A JSON-RPC (az angol JavaScript Object Notation Remote Procedure Call - JSON távoli eljáráshívás rövidítése) egy távoli eljáráshívási protokoll , amely JSON -t használ az üzenetek kódolására. Ez egy nagyon egyszerű protokoll (nagyon hasonlít az XML-RPC- hez ), amely csak néhány adat- és parancstípust határoz meg. A JSON-RPC támogatja az értesítéseket (a kiszolgálónak küldött információk nem igényelnek választ) és több hívást.
Változat | Leírás | dátum |
---|---|---|
1.0 | Az eredeti verzió , 2013. március 13-án archiválva a Wayback Machine -nél , jelenleg a hivatalos verziónak számít [1] . | 2005 |
1.1WD | munkatervezet
Elnevezett paraméterek, specifikus hibakódok és introspekciós funkciók kerültek hozzáadásra. |
2008.08.07 |
1.1 Alt | Sima JSON-RPC 1.1 egyezmény
Alternatív ajánlat az 1.1 WD-hez. |
2007.05.06 |
1.1 Objektum specifikáció | Objektum specifikáció Alternatív javaslat az 1.1 WD/1.1 Alt | 2007.07.30 |
1.2 | Javaslat A dokumentum egy későbbi verziója 2.0-ra lett átnevezve. | 2007.12.27 |
2.0 | Specifikációs javaslat | 2009.05.24 |
2.0 (felülvizsgált) | Leírás | 2010.03.26 |
2.0 (frissítve) | Leírás | 2013.01.04 |
A JSON-RPC úgy működik, hogy kéréseket küld a protokollt megvalósító kiszolgálónak. A kliens általában egy program, amelynek meg kell hívnia egy metódust a távoli rendszeren. A bemeneti paraméterek egy készlete átadható egy távoli metódusnak tömbként vagy rekordként. A metódus több kimenetet is visszaadhat (ez megvalósításfüggő). A távoli metódust úgy hívják meg, hogy kérést küldenek a távoli kiszolgálónak HTTP vagy TCP /IP socketen keresztül (2.0 verzió óta). HTTP használata esetén a Content-Type fejléc a application/json[2] -ként van definiálva .
Minden továbbított adat egyszerű rekord JSON -ban [3] . A kérés egy adott metódus hívása, amelyet a távoli rendszer biztosít. Három kötelező tulajdonságot kell tartalmaznia:
A szervernek érvényes választ kell küldenie minden beérkezett kérésre. A válasznak a következő tulajdonságokat kell tartalmaznia:
Azokra a helyzetekre, amikor nincs szükség válaszadásra, értesítéseket vezettünk be. Az értesítés abban különbözik a kéréstől, hogy nem rendelkezik tulajdonsággal id, ami nem kötelező, mert nem küldenek választ. Ilyen esetben a tulajdonság idátugorható (2.0-s verzió) vagy beállítható null(1.0-s verzió).
Ezekben a példákban -->a szervernek küldött adatokat (kérést) és <--a választ jelöli.
Egyszerű kérés és válasz.
--> { "method" : "echo" , "params" : [ "Hello JSON-RPC" ], "id" : 1 } <-- { "result" : "Hello JSON-RPC" , "error" : null , "id" : 1 }Ez a példa interakciót mutat be egy csevegőalkalmazásban. A szerver minden üzenetről értesítést küld minden olyan ügyfélnek, amelynek meg kell kapnia. Az ügyfél kérést küld a szervernek, hogy küldjön üzenetet a csevegésnek, és pozitív választ vár, hogy tudja, hogy az üzenetet kézbesítették.
... --> { "method" : "postMessage" , "params" : [ "Sziasztok!" ], "id" : 99 } <-- { "eredmény" : 1 , "hiba" : null , "id" : 99 } --> { "method" : "handleMessage" , "params" : [ "felhasználó1" , "csak beszélgettünk" ], "id" : null } --> { "method" : "handleMessage" , "params" : [ "user3" , "bocs, most mennem kell, ttyl" ], "id" : null } --> { "method" : "postMessage" , "params" : [ "Van egy kérdésem:" ], "id" : 101 } <-- { "eredmény" : 1 , "hiba" : null , "id" : 101 } --> { "method" : "userLeft" , "params" : [ "user3" ], "id" : null } ...Mivel a tulajdonság paramsbejegyzések tömbje, a következő formátum érvényes.
{ "method" : "methodnamehere" , "params" : [ { "firstparam" : "ez az első paraméter információit tartalmazza." , "secondparam" : 1121211234 , "thirdparam" : "ez a harmadik paraméter információit tartalmazza." }, { "fourthparam" : "ez már egy másik objektum." , "secondparam" : "különböző objektumokban lehetnek azonos nevű mezők." , "thirdparam" : "ez a harmadik paraméter információit tartalmazza." } ], "azonosító" : 1234 }A kérés formátumának valami ilyesminek kell lennie:
{ "version" : "1.1" , "method" : "confirmFruitPurchase" , "id" : "194521489" , "params" : [ [ "alma" , "narancs" , "Mongoose" ], 1.123 ] }A válasz formátuma a következő lehet:
{ "verzió" : "1.1" , "eredmény" : "kész" , "hiba" : null , "id" : "194521489" }Eljárás hívása helyzeti paraméterekkel:
--> { "jsonrpc" : "2.0" , "method" : "kivonás" , "params" : [ 42 , 23 ], "id" : 1 } <-- { "jsonrpc" : "2.0" , "eredmény" " : 19 , "id" : 1 } --> { "jsonrpc" : "2.0" , "method" : "kivonás" , "params" : [ 23 , 42 ], "id" : 2 } <-- { "jsonrpc" : "2.0" , "eredmény" " : - 19 , "id" : 2 }Eljárás hívása elnevezett paraméterekkel:
--> { "jsonrpc" : "2.0" , "method" : "kivonás" , "params" : { "subtrahend" : 23 , "minuend" : 42 }, "id" : 3 } <-- { "jsonrpc" " : "2.0" , "eredmény" : 19 , "id" : 3 } --> { "jsonrpc" : "2.0" , "method" : "kivonás" , "params" : { "minuend" : 42 , "subtrahend" : 23 }, "id" : 4 } <-- { "jsonrpc" " : "2.0" , "eredmény" : 19 , "id" : 4 }Értesítés:
--> { "jsonrpc" : "2.0" , "method" : "frissítés" , "params" : [ 1 , 2 , 3 , 4 , 5 ]} --> { "jsonrpc" : "2.0" , "method" : "foobar" }Nem létező függvény hívása:
--> { "jsonrpc" : "2.0" , "method" : "foobar" , "id" : 10 } <-- { "jsonrpc" : "2.0" , "error" : { "code" : - 32601 , "message" : "Az eljárás nem található." }, "azonosító" : 10 }Eljáráshívás rossz szerkezettel
--> [ 1 , 2 , 3 ] <-- { "jsonrpc" : "2.0" , "error" : { "code" : - 32600 , "message" : "Érvénytelen JSON-RPC." }, "id" : null }Név | JSON-RPC verzió | Leírás | Nyelv(ek), Platformok |
---|---|---|---|
JSON-RPC.NET | 2.0 | Gyors JSON-RPC szerver. Támogatja a socketeket, az elnevezett socketeket és a HTTP-t az ASP.NET használatával. Mono vagy .NET-keretrendszer 4.0 szükséges. | .HÁLÓ |
Jayrock | 1.0 | JSON-RPC 1.0 kiszolgáló megvalósítása a Microsoft .NET-keretrendszer 1.1-es és 2.0-s verziójához. | .HÁLÓ |
System.Data.JsonRpc | 2.0 | JSON-RPC 2.0-s üzenetek sorosításához és deszerializálásához szükséges komponens .NET Standard 1.0 és újabb verziókhoz. | .NET szabvány |
StreamJsonRpc | 2.0 | Egy olyan könyvtár, amely megvalósítja a JSON-RPC 2.0 specifikációt rugalmas lehetőségekkel a szállítási réteg és a sorosítók kiválasztására | .NET Standard 2.0 |
jsonrpc-c | 2.0 | JSON-RPC megvalósítás TCP socketeken keresztül (csak a szerveren). | C |
libjson-rpc-cpp | 2,0+1,0 | C++ JSON-RPC keretrendszer, amely támogatja a kliens- és szerveroldalt HTTP-n keresztül. | C++ |
Phobos | 2.0 | Implementáció Qt / C++ esetén . Kivonja az adatátviteli réteget (használatra kész osztályok a TCP és a HTTP számára). | C++ |
qjsonrpc | 2.0 | Implementáció Qt / C++ esetén . Támogatja az üzenetek és a QObject slot közötti kapcsolatokat (például QDBus, qxtrpc). A Qt 5-ben található új JSON-osztályokat használja. | C++ |
JSON Toolkit archiválva : 2013. január 13. a Wayback Machine -nél | 2.0 | Megvalósítás Delphiben (átnevezve SuperObject-re) | Delphi |
SuperObject | 2.0 | Megvalósítás Delphiben (2018.12.14-én befejeződött) | Delphi |
pascal-jsonrpc-lite | 2.0 | Megvalósítás Pascalban (Lazarus, Delphi) | Pascal |
go/net/rpc | 1.0 | A Go Standard Library JSON-RPC megvalósítása | Megy |
jsonrpc4j | 2.0 | A JSON-RPC 2.0 Java implementációja támogatja a socketeket és a HTTP kapcsolatokat is. | Jáva |
json-rpc | 1.0 | Alapvető Java/JavaScript implementáció, amely jól integrálható Android/Servlet/Önálló Java/JavaScript/App-Engine alkalmazásokba. | Java / JavaScript |
jpoxy (nem elérhető link) | 2.0 | A JSON-RPC egyszerű Java-megvalósítása, amely megkönnyíti a POJO-khoz való hozzáférést nyers RPC-keretrendszeren keresztül. | Jáva |
JSON szolgáltatás | 2.0 | JSON-RPC kiszolgáló megvalósítása Service Mapping Description támogatással. Jól integrálható a Dojo Toolkittel és a Spring Framework -el . | Jáva |
JSON-RPC 2.0 | 2.0 | Könnyű Java-könyvtár a JSON-RPC 2.0 üzenetek elemzéséhez és sorosításához (nyílt forráskód). Számos megvalósítás az oldalon. (Alap, kliens, Shell,…) | Jáva |
java-json-rpc | 2.0 | Megvalósítás J2EE szerverekhez. | Jáva |
lib-json-rpc | 2.0 | Implementációs szervlet, kliens, JavaScript | Jáva |
simplejsonrpc | 2.0 | Egy egyszerű JSON-RPC 2.0 Servlet osztálymetódusokat kiszolgáló. | Jáva |
gson-rmi | 2.0 | Könnyű, RMI átviteltől független keretrendszer elosztott számítástechnikához. | Jáva |
THETA-RPC | 2.0 | A JSON-RPC 2.0 magas szintű megvalósítása a Node.js-hez, több átvitel támogatásával. | Node.js |
jsonrpcjs | 2.0 | JavaScript-ügyfélkönyvtár a JSON-RPC 2.0-hoz, függőségek nélkül. | JavaScript |
easyXDM | 2.0 | Könyvtár tartományok közötti kapcsolatokhoz RPC-támogatással. Támogatja az összes postMessage, nix, frameElement, window.name és FIM böngészőt, nagyon könnyen használható. | JavaScript |
Dojo Toolkit | 1.0+ | JSON-RPC támogatást biztosít | JavaScript |
Pmrpc | 2.0 | JavaScript könyvtár HTML5 böngészőkben való használatra. JSON-RPC megvalósítás HTML5 postMessage API használatával az üzenettovábbításhoz. | JavaScript |
qooxdoo Archiválva : 2013. február 4. a Wayback Machine -nél | 2.0 | JSON-RPC implementációja van opcionális Java, PHP, Perl és Python háttérrendszerekkel. | JavaScript, Java, PHP, PERL és Python |
JSON-RPC JavaScript implementáció | 2.0 | Támogatja a JSON-RPC-t HTTP-n és TCP/IP-n keresztül. | JavaScript |
jabsorb | 2.0 | Könnyű Ajax/Web 2.0 JSON-RPC Java-keretrendszer, amely a JSON-RPC protokollt további ORB - funkciókkal, például a körkörös függőségek támogatásával bővíti. | JavaScript, Java |
A Wakanda platform | 2.0 | Támogatja a JSON-RPC 2.0 klienst az Ajax Framework-en belül és a JSON-RPC 2.0 szolgáltatást a szerveroldali JavaScriptben | JavaScript |
Deimos | 1,0+2,0 | A Node.js / JavaScript szerveroldali megvalósítása . | JavaScript |
Barracuda webszerver | 2.0 | Barracuda webszerver integrált | Lua |
Lugate API átjáró | 2.0 | Az API Gateway megvalósítása JSON-RPC 2.0 modulként NGINX-hez | Lua |
Halasztott készlet | 1.0 | Támogatja a JSON-RPC 1.0 klienst. | Célkitűzés-C |
demiurgikus | 2.0 | JSON-RPC 2.0 ügyfél az Objective-C számára | Célkitűzés-C |
Oxen iPhone Commons JSON-összetevők | 1.0 | JSON-RPC 1.0 ügyfél az Objective-C-hez | Célkitűzés-C |
objc-JSONRpc | 2.0 | Objective-c JSON RPC-ügyfél. Támogatja az értesítéseket, az egyszerű hívásokat és a több hívást. | Célkitűzés-C |
AFJSONRPCClient | 2.0 | Objective-c JSON RPC-ügyfél. | Célkitűzés-C |
JSON::RPC | 2.0 | JSON RPC 2.0 szerver megvalósítás | Perl |
json-rpc-perl6 | 2.0 | Kliens és szerver. | Perl 6 |
php-json-rpc archiválva 2020. június 21-én a Wayback Machine -nél | 2.0 | A JSON-RPC 2.0 egyszerű PHP megvalósítása HTTP-kliensen keresztül. | PHP |
jQuery JSON-RPC kiszolgáló | 2.0 | JSON-RPC szerver kifejezetten a Zend Framework JSON RPC kiszolgálóval való együttműködéshez. | PHP, JavaScript |
jsonrpc2php | 2.0 | PHP5 JSON-RPC 2.0 alaposztály és szerver példa | PHP |
tivoka | 1,0+2,0 | Univerzális kliens/szerver JSON-RPC könyvtár PHP 5+-hoz. | PHP |
junior | 2.0 | Kliens/szerver könyvtár a JSON-RPC 2.0-hoz | PHP |
json-rpc-php | 2.0 | Kliens/szerver könyvtár a JSON-RPC 2.0-hoz | PHP |
JSONRpc2 | 2.0 | Megvalósítás "pontvarázslattal" PHP-hez (= metóduscsoportosítás és pontelválasztás támogatása) | PHP |
GetResponse jsonRPCClient | 2.0 | Objektum-orientált kliens megvalósítás | PHP |
zoServices | 2.0 | A JSON-RPC 2.0 PHP, Node.js és JavaScript implementációja | PHP, JavaScript, Node.js |
json-rpc2php | 2.0 | Szerver és kliens megvalósítás PHP-hez. jQuery -t használó JavaScript-klienst tartalmaz | PHP, JavaScript |
jsonrpc-php | 2.0 | JSON-RPC implementáció PHP-hez | PHP |
php-json-rpc | 2.0 | JSON-RPC 2.0 megvalósítás. | PHP |
sajya/szerver | 2.0 | JSON-RPC szerver a Laravel számára | PHP |
JsonRpcBundle | 2.0 | JSON-RPC kiszolgáló a Symfony számára | PHP |
Django JSON-RPC 2.0 | 2.0 | JSON-RPC szerver a Django számára | Piton |
Pizsama | JSON-RPC kliens megvalósítás. | Piton | |
Zope 3 | 1.1 | JSON RPC megvalósítás a Zope 3-hoz | Piton |
jsonrpclib | 2.0 | JSON-RPC ügyfélmodul Pythonhoz. | Piton |
tornadorpc | 2.0 | A JSON-RPC támogatásához Tornado webszerver szükséges . | Piton |
tinyrpc | 2.0 | Támogatja a JSON-RPC-t TCP-n, WSGI-n, ZeroMQ -n stb. Elválasztja az adatátvitelt az üzenetfeldolgozástól, üzenettovábbítás nélkül is működik. | Piton |
jsonrpc | 2.0 | JSON-RPC 2.0 Pythonhoz + Twisted . | Piton |
bjsonrpc | 1.0+ | Megvalósítás TCP/IP-n keresztül (aszinkron, kétirányú) | Piton |
BarristerRPC | 2.0 | JSON-RPC kliens és kiszolgáló megvalósítása | Python, Ruby, JavaScript (Node.js + webböngésző), PHP, Java |
piramis_rpc | 2.0 | Rugalmas JSON-RPC implementáció a Pyramid webalkalmazásba integrálva. Működik a Pyramid engedélyezési rendszerével. | Piton |
rjr | 2.0 | JSON-RPC TCP/UDP, HTTP, WebSockets, AMQP és még sok más felett. | Ruby (EventMachine) szerver Ruby és JavaScript kliensekkel. |
Jimson | 2.0 | Kliens és szerver a Ruby számára | rubin |
JSON-RPC objektumok | 1.0+ | Csak objektumok megvalósítása (nincs kliens és szerver). | rubin |
JSON-RPC RT | 2.0 | A JSON-RPC 2.0 teljes támogatása TCP-n keresztül. | Windows Runtime (WinRT) |
XINS | 2.0 | A 2.0-s verzió óta támogatja a JSON -t és a JSON-RPC-t. | XML |
jsonrpc | 2.0 | Kliens és szerver megvalósítás. A támogatott kommunikációs protokollok a http, ipc, websocket és tcp. | Rozsda |
A hivatalos oldal [4] további megvalósításokat tartalmaz . Archiválva : 2013. március 17. a Wayback Machine -nél . A Perl implementációinak CPAN listája .