JSON-RPC

Az oldal jelenlegi verzióját még nem ellenőrizték tapasztalt hozzászólók, és jelentősen eltérhet a 2014. június 24-én felülvizsgált verziótól ; az ellenőrzések 55 szerkesztést igényelnek .

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.

Rövid előzmények

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

Használat

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

Példák

Ezekben a példákban -->a szervernek küldött adatokat (kérést) és <--a választ jelöli.

1.0 verzió

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 }

1.1-es verzió (Munkavázlat)

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

2.0 verzió

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 }

Megvalósítások

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 .

Lásd még

Jegyzetek

  1. Google Csoportok . Letöltve: 2013. március 17. Az eredetiből archiválva : 2012. november 4..
  2. RFC 4627
  3. JSON-RPC specifikáció Archiválva : 2008. május 17.
  4. JSON-RPC - Trac (lefelé irányuló kapcsolat) . Letöltve: 2013. március 17. Az eredetiből archiválva : 2014. december 29.. 

Linkek