JSON-RPC (zkráceně z anglického JavaScript Object Notation Remote Procedure Call - JSON vzdálené volání procedur) je protokol vzdáleného volání procedur , který používá JSON ke kódování zpráv. Jedná se o velmi jednoduchý protokol (velmi podobný XML-RPC ), který definuje pouze několik typů dat a příkazů. JSON-RPC podporuje upozornění (informace odeslané na server nevyžadují odpověď) a vícenásobná volání.
Verze | Popis | datum |
---|---|---|
1,0 | Původní verze Archived March 13, 2013 at Wayback Machine je v současné době považována za oficiální verzi [1] . | 2005 |
1,1WD | pracovní návrh
Byly přidány pojmenované parametry, specifické chybové kódy a funkce introspekce. |
2008.08.07 |
1.1 Alt | Obyčejná konvence JSON-RPC 1.1
Alternativní nabídka k 1,1 WD. |
06.05.2007 |
1.1 Specifikace objektu | Specifikace objektu Alternativní návrh k 1.1 WD/1.1 Alt | 30.07.2007 |
1.2 | Návrh Pozdější verze tohoto dokumentu byla přejmenována na 2.0. | 27.12.2007 |
2,0 | Návrh specifikace | 24.05.2009 |
2.0 (revidováno) | Specifikace | 26.03.2010 |
2.0 (aktualizováno) | Specifikace | 01.04.2013 |
JSON-RPC funguje tak, že odesílá požadavky na server, který implementuje protokol. Klient je obvykle program, který potřebuje volat metodu na vzdáleném systému. Sadu vstupních parametrů lze předat vzdálené metodě jako pole nebo záznam. Metoda může také vracet více výstupů (toto je závislé na implementaci). Vzdálená metoda je volána odesláním požadavku na vzdálený server přes soket HTTP nebo TCP /IP (od verze 2.0). Při použití HTTP je hlavička Content-Type definována jako [2] . application/json
Všechna přenášená data jsou jednoduché záznamy serializované v JSON [3] . Požadavek je volání specifické metody poskytované vzdáleným systémem. Musí obsahovat tři požadované vlastnosti:
Server musí odeslat platnou odpověď na každý požadavek, který obdrží. Odpověď musí obsahovat následující vlastnosti:
Pro situace, kdy není vyžadována odpověď, byla zavedena upozornění. Oznámení se liší od požadavku tím, že nemá vlastnost id, která není vyžadována, protože nebude odeslána žádná odpověď. V takovém případě lze vlastnost idpřeskočit (verze 2.0) nebo nastavit na null(verze 1.0).
V těchto příkladech -->označuje data odeslaná na server (požadavek) a <--označuje odpověď.
Jednoduchá žádost a odpověď.
--> { "method" : "echo" , "params" : [ "Ahoj JSON-RPC" ], "id" : 1 } <-- { "result" : "Dobrý den JSON-RPC" , "error" : null , "id" : 1 }Tento příklad ukazuje interakci v chatovací aplikaci. Server odešle oznámení o každé zprávě každému klientovi, který by ji měl obdržet. Klient odešle na server požadavek na odeslání zprávy do chatu a čeká na kladnou odpověď, aby věděl, že zpráva byla doručena.
... --> { "method" : "postMessage" , "params" : [ "Ahoj všichni!" ], "id" : 99 } <-- { "výsledek" : 1 , "chyba" : null , "id" : 99 } --> { "method" : "handleMessage" , "params" : [ "user1" , "právě jsme mluvili" ], "id" : null } --> { "method" : "handleMessage" , "params" : [ "user3" , "sorry, must go now, ttyl" ], "id" : null } --> { "method" : "postMessage" , "params" : [ "Mám dotaz:" ], "id" : 101 } <-- { "výsledek" : 1 , "chyba" : null , "id" : 101 } --> { "method" : "userLeft" , "params" : [ "user3" ], "id" : null } ...Protože vlastnost paramsje pole položek, je platný následující formát.
{ "method" : "methodnamehere" , "params" : [ { "firstparam" : "toto obsahuje informace o prvním parametru." , "secondparam" : 1121211234 , "thirdparam" : "toto obsahuje informace o třetím parametru." }, { "čtvrtý param" : "toto je již jiný objekt." , "secondparam" : "v různých objektech mohou být pole se stejným názvem." , "thirdparam" : "toto obsahuje informace o třetím parametru." } ], "id" : 1234 }Formát požadavku by měl být něco takového:
{ "version" : "1.1" , "method" : "confirmFruitPurchase" , "id" : "194521489" , "params" : [ [ "jablko" , "oranžová" , " Mongus " ], 1.123 ] }Formát odpovědi může být něco takového:
{ "version" : "1.1" , "result" : "done" , "error" : null , "id" : "194521489" }Volání procedury s pozičními parametry:
--> { "jsonrpc" : "2.0" , "metoda" : "odečíst" , "parametry" : [ 42 , 23 ], "id" : 1 } <-- { "jsonrpc" : "2.0" , "výsledek " : 19 , "id" : 1 } --> { "jsonrpc" : "2.0" , "metoda" : "odečíst" , "parametry" : [ 23 , 42 ], "id" : 2 } <-- { "jsonrpc" : "2.0" , "výsledek " : - 19 , "id" : 2 }Volání procedury s pojmenovanými parametry:
--> { "jsonrpc" : "2.0" , "method" : "odečíst" , "params" : { "subtrahend" : 23 , "minuend" : 42 }, "id" : 3 } <-- { "jsonrpc" " : "2.0" , "výsledek" : 19 , "id" : 3 } --> { "jsonrpc" : "2.0" , "metoda" : "odečíst" , "parametry" : { "minuend" : 42 , "subtrahend" : 23 }, "id" : 4 } <-- { "jsonrpc" " : "2.0" , "výsledek" : 19 , "id" : 4 }Oznámení:
--> { "jsonrpc" : "2.0" , "method" : "update" , "params" : [ 1 , 2 , 3 , 4 , 5 ]} --> { "jsonrpc" : "2.0" , "method" : "foobar" }Volání neexistující funkce:
--> { "jsonrpc" : "2.0" , "method" : "foobar" , "id" : 10 } <-- { "jsonrpc" : "2.0" , "chyba" : { "code" : - 32601 , "message" : "Procedura nenalezena." }, "id" : 10 }Volání procedury se špatnou strukturou
--> [ 1 , 2 , 3 ] <-- { "jsonrpc" : "2.0" , "error" : { "code" : - 32600 , "message" : "Neplatný JSON-RPC." }, "id" : null }název | Verze JSON-RPC | Popis | Jazyk(y), platformy |
---|---|---|---|
JSON-RPC.NET | 2,0 | Rychlý server JSON-RPC. Podporuje sokety, pojmenované sokety a HTTP pomocí ASP.NET vyžaduje Mono nebo .NET Framework 4.0. | .SÍŤ |
Jayrock | 1,0 | Implementace serveru JSON-RPC 1.0 pro rozhraní Microsoft .NET Framework verze 1.1 a 2.0. | .SÍŤ |
System.Data.JsonRpc | 2,0 | Komponenta pro serializaci a deserializaci zpráv JSON-RPC 2.0 pro .NET Standard 1.0 a vyšší. | .NET Standard |
StreamJsonRpc | 2,0 | Knihovna, která implementuje specifikaci JSON-RPC 2.0 s flexibilními možnostmi výběru transportní vrstvy a serializátorů | .NET Standard 2.0 |
jsonrpc-c | 2,0 | Implementace JSON-RPC přes sokety TCP (pouze server). | C |
libjson-rpc-cpp | 2,0 + 1,0 | C++ JSON-RPC framework podporující klientskou a serverovou stranu přes HTTP. | C++ |
Phobos | 2,0 | Implementace pro Qt / C++ . Abstrahuje vrstvu přenosu dat (třídy připravené k použití pro TCP a HTTP). | C++ |
qjsonrpc | 2,0 | Implementace pro Qt / C++ . Podporuje spojení mezi zprávami a sloty QObject (jako QDBus, qxtrpc). Používá nové třídy JSON zahrnuté v Qt 5. | C++ |
JSON Toolkit Archivováno 13. ledna 2013 na Wayback Machine | 2,0 | Implementace v Delphi (přejmenováno na SuperObject) | Delphi |
SuperObject | 2,0 | Implementace v Delphi (ukončeno 14.12.2018) | Delphi |
pascal-jsonrpc-lite | 2,0 | Implementace v Pascalu (Lazarus, Delphi) | Pascal |
go/net/rpc | 1,0 | JSON-RPC Implementace standardní knihovny Go | Jít |
jsonrpc4j | 2,0 | Implementace Java JSON-RPC 2.0 podporuje jak sockety, tak připojení HTTP. | Jáva |
json-rpc | 1,0 | Základní implementace Java/JavaScript, která se dobře integruje do aplikací Android/Servlets/Standalone Java/JavaScript/App-Engine. | Java / JavaScript |
jpoxy (nedostupný odkaz) | 2,0 | Jednoduchá Java implementace JSON-RPC navržená tak, aby usnadnila implementaci přístupu k POJO přes nezpracovaný rámec RPC. | Jáva |
Služba JSON | 2,0 | Implementace serveru JSON-RPC s podporou popisu mapování služeb. Dobře se integruje s Dojo Toolkit a Spring Framework . | Jáva |
JSON-RPC 2.0 | 2,0 | Odlehčená Java knihovna pro analýzu a serializaci zpráv JSON-RPC 2.0 (open source). Několik realizací na místě. (Základ, Klient, Shell, …) | Jáva |
java-json-rpc | 2,0 | Implementace pro J2EE servery. | Jáva |
lib-json-rpc | 2,0 | Implementační servlet, klient, JavaScript | Jáva |
simplejsonrpc | 2,0 | Jednoduché metody třídy obsluhující servlet JSON-RPC 2.0. | Jáva |
gson-rmi | 2,0 | Lehký rámec nezávislý na přenosu RMI určený pro distribuované výpočty. | Jáva |
THETA-RPC | 2,0 | Implementace JSON-RPC 2.0 na vysoké úrovni pro Node.js s podporou více přenosů. | Node.js |
jsonrpcjs | 2,0 | Klientská knihovna JavaScript pro JSON-RPC 2.0, žádné závislosti. | JavaScript |
easyXDM | 2,0 | Knihovna pro připojení mezi doménami s podporou RPC. Podporuje všechny prohlížeče postMessage, nix, frameElement, window.name a FIM, velmi snadné použití. | JavaScript |
Dojo Toolkit | 1,0+ | Poskytuje podporu JSON-RPC | JavaScript |
Pmrpc | 2,0 | Knihovna JavaScript pro použití v prohlížečích HTML5. Implementace JSON-RPC pomocí HTML5 postMessage API pro předávání zpráv. | JavaScript |
qooxdoo Archivováno 4. února 2013 na Wayback Machine | 2,0 | Má implementaci JSON-RPC s volitelnými back-endy Java, PHP, Perl a Python. | JavaScript, Java, PHP, PERL a Python |
Implementace JavaScriptu JSON-RPC | 2,0 | Podporuje JSON-RPC přes HTTP a TCP/IP. | JavaScript |
jabsorb | 2,0 | Odlehčený Ajax/Web 2.0 JSON-RPC Java framework, který rozšiřuje protokol JSON-RPC o další funkce ORB , jako je podpora cyklických závislostí. | JavaScript, Java |
Platforma Wakanda | 2,0 | Podporuje klienta JSON-RPC 2.0 v rámci Ajax Framework a službu JSON-RPC 2.0 v JavaScriptu na straně serveru | JavaScript |
Deimos | 1,0 + 2,0 | Implementace na straně serveru pro Node.js / JavaScript . | JavaScript |
Webový server Barracuda | 2,0 | Integrovaný webový server Barracuda | Lua |
Lugate API Gateway | 2,0 | Implementace API Gateway jako modulu JSON-RPC 2.0 pro NGINX | Lua |
Odložená souprava | 1,0 | Podporuje klienta JSON-RPC 1.0. | Cíl-C |
Demiurgický | 2,0 | Klient JSON-RPC 2.0 pro Objective-C | Cíl-C |
Komponenty Oxen iPhone Commons JSON | 1,0 | Klient JSON-RPC 1.0 pro Objective-C | Cíl-C |
objekt-JSONRpc | 2,0 | Objective-c JSON RPC klient. Podporuje upozornění, jednoduché hovory a více hovorů. | Cíl-C |
AFJSONRPCClient | 2,0 | Objective-c JSON RPC klient. | Cíl-C |
JSON::RPC | 2,0 | Implementace serveru JSON RPC 2.0 | Perl |
json-rpc-perl6 | 2,0 | Klient a server. | Perl 6 |
php-json-rpc Archivováno 21. června 2020 na Wayback Machine | 2,0 | Jednoduchá PHP implementace JSON-RPC 2.0 přes HTTP klienta. | PHP |
Server jQuery JSON-RPC | 2,0 | Server JSON-RPC speciálně vyrobený pro práci se serverem Zend Framework JSON RPC Server. | PHP, JavaScript |
jsonrpc2php | 2,0 | Příklad základní třídy PHP5 JSON-RPC 2.0 a serveru | PHP |
tivoka | 1,0 + 2,0 | Univerzální klient/server knihovna JSON-RPC pro PHP 5+. | PHP |
juniorský | 2,0 | Knihovna klient/server pro JSON-RPC 2.0 | PHP |
json-rpc-php | 2,0 | Knihovna klient/server pro JSON-RPC 2.0 | PHP |
JSONRpc2 | 2,0 | Implementace pomocí "tečkové magie" pro PHP (= podpora pro seskupování metod a oddělování teček) | PHP |
GetResponse jsonRPCClient | 2,0 | Objektově orientovaná klientská implementace | PHP |
zoServices | 2,0 | PHP, Node.js a JavaScript implementace JSON-RPC 2.0 | PHP, JavaScript, Node.js |
json-rpc2php | 2,0 | Serverová a klientská implementace pro PHP. Obsahuje klienta JavaScript pomocí jQuery | PHP, JavaScript |
jsonrpc-php | 2,0 | Implementace JSON-RPC pro PHP | PHP |
php-json-rpc | 2,0 | Implementace JSON-RPC 2.0. | PHP |
sajya/server | 2,0 | JSON-RPC server pro Laravel | PHP |
JsonRpcBundle | 2,0 | JSON-RPC Server pro Symfony | PHP |
Django JSON-RPC 2.0 | 2,0 | JSON-RPC server pro Django | Krajta |
Pyžama | Implementace klienta JSON-RPC. | Krajta | |
Zope 3 | 1.1 | Implementace JSON RPC pro Zope 3 | Krajta |
jsonrpclib | 2,0 | Klientský modul JSON-RPC pro Python. | Krajta |
tornadorpc | 2,0 | Podporuje JSON-RPC vyžaduje webový server Tornado . | Krajta |
tinyrpc | 2,0 | Podporuje JSON-RPC přes TCP, WSGI, ZeroMQ atd. Odděluje přenos dat od zpracování zpráv, může fungovat bez přeposílání zpráv. | Krajta |
jsonrpc | 2,0 | JSON-RPC 2.0 pro Python + Twisted . | Krajta |
bjsonrpc | 1,0+ | Implementace přes TCP/IP (asynchronní, obousměrná) | Krajta |
BarristerRPC | 2,0 | Implementace klienta a serveru JSON-RPC | Python, Ruby, JavaScript (Node.js + webový prohlížeč), PHP, Java |
pyramida_rpc | 2,0 | Flexibilní implementace JSON-RPC integrovaná do webové aplikace Pyramid. Pracuje s autorizačním systémem Pyramid. | Krajta |
rjr | 2,0 | JSON-RPC přes TCP/UDP, HTTP, WebSockets, AMQP a další. | Server Ruby (EventMachine) s klienty Ruby a JavaScript. |
Jimson | 2,0 | Klient a server pro Ruby | rubín |
Objekty JSON-RPC | 1,0+ | Realizace pouze objektů (žádný klient a server). | rubín |
JSON-RPC RT | 2,0 | Plná podpora pro JSON-RPC 2.0 přes TCP. | Windows Runtime (WinRT) |
XINS | 2,0 | Od verze 2.0 podporuje JSON a JSON-RPC. | XML |
jsonrpc | 2,0 | Implementace klienta a serveru. Podporované komunikační protokoly jsou http, ipc, websocket a tcp. | Rez |
Oficiální stránka [4] obsahuje více implementací Archivováno 17. března 2013 na Wayback Machine . CPAN seznam implementací v Perlu .