JSON-RPC

Aktuální verze stránky ještě nebyla zkontrolována zkušenými přispěvateli a může se výrazně lišit od verze recenzované 24. června 2014; kontroly vyžadují 55 úprav .

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í.

Stručná historie

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

Použití

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).

Příklady

V těchto příkladech -->označuje data odeslaná na server (požadavek) a <--označuje odpověď.

Verze 1.0

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 }

Verze 1.1 (pracovní návrh)

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" }

Verze 2.0

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 }

Implementace

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 .

Viz také

Poznámky

  1. Skupiny Google . Získáno 17. března 2013. Archivováno z originálu dne 4. listopadu 2012.
  2. RFC 4627
  3. Specifikace JSON-RPC Archivováno 17. května 2008.
  4. JSON-RPC - Trac (downlink) . Získáno 17. března 2013. Archivováno z originálu dne 29. prosince 2014. 

Odkazy