JSON-RPC (abreviat din limba engleză JavaScript Object Notation Remote Procedure Call - JSON remote procedure call) este un protocol de apel de procedură la distanță care utilizează JSON pentru a codifica mesajele. Este un protocol foarte simplu (foarte similar cu XML-RPC ) care definește doar câteva tipuri de date și comenzi. JSON-RPC acceptă notificări (informațiile trimise către server nu necesită un răspuns) și apeluri multiple.
Versiune | Descriere | data |
---|---|---|
1.0 | Versiunea originală Arhivată pe 13 martie 2013 la Wayback Machine este considerată în prezent versiunea oficială [1] . | 2005 |
1.1WD | proiect de lucru
Au fost adăugați parametri denumiți, coduri de eroare specifice și funcții de introspecție. |
07.08.2008 |
1.1 Alt | Convenția JSON-RPC 1.1 simplă
Ofertă alternativă la 1.1 WD. |
2007.05.06 |
1.1 Specificația obiectului | Specificație obiect Propunere alternativă la 1.1 WD/1.1 Alt | 30.07.2007 |
1.2 | Sugestie O versiune ulterioară a acestui document a fost redenumită 2.0. | 27.12.2007 |
2.0 | Propunerea de caiet de sarcini | 24.05.2009 |
2.0 (revizuit) | Specificație | 26.03.2010 |
2.0 (Actualizat) | Specificație | 04.01.2013 |
JSON-RPC funcționează prin trimiterea de cereri către un server care implementează protocolul. Clientul este de obicei un program care trebuie să apeleze o metodă pe sistemul de la distanță. Un set de parametri de intrare poate fi transmis unei metode de la distanță ca matrice sau înregistrare. Metoda poate returna, de asemenea, mai multe ieșiri (aceasta este dependentă de implementare). Metoda de la distanță este apelată prin trimiterea unei cereri către serverul de la distanță printr-un socket HTTP sau TCP /IP (din versiunea 2.0). Când se utilizează HTTP, antetul Content -Type este definit ca [2] . application/json
Toate datele transmise sunt simple înregistrări seriate în JSON [3] . O solicitare este un apel către o metodă specifică furnizată de sistemul de la distanță. Trebuie să conțină trei proprietăți necesare:
Serverul trebuie să trimită un răspuns valid pentru fiecare cerere pe care o primește. Răspunsul trebuie să conțină următoarele proprietăți:
Pentru situațiile în care nu este necesar un răspuns, au fost introduse notificări. O notificare diferă de o solicitare prin faptul că nu are o proprietate id, care nu este necesară deoarece nu va fi trimis niciun răspuns. Într-un astfel de caz, proprietatea idpoate fi omisă (versiunea 2.0) sau setată la null(versiunea 1.0).
În aceste exemple, -->indică datele trimise către server (cerere) și <--indică răspunsul.
Solicitare simplă și răspuns.
--> { „metodă” : „echo” , „params” : [ „Bună ziua JSON-RPC” ], „id” : 1 } <-- { „rezultat” : „Bună ziua JSON-RPC” , „eroare” : null , „id” : 1 }Acest exemplu arată interacțiunea într-o aplicație de chat. Serverul trimite notificări pentru fiecare mesaj fiecărui client care ar trebui să-l primească. Clientul trimite o cerere către server pentru a trimite un mesaj pe chat și așteaptă un răspuns pozitiv pentru a ști că mesajul a fost livrat.
... --> { "method" : "postMessage" , "params" : [ "Bună ziua tuturor!" ], „id” : 99 } <-- { „rezultat” : 1 , „eroare” : nul , „id” : 99 } --> { "method" : "handleMessage" , "params" : [ "user1" , "tocmai vorbeam" ], "id" : null } --> { "method" : "handleMessage" , "params" : [ "user3" , "scuze, trebuie să plec acum, ttyl" ], "id" : null } --> { "method" : "postMessage" , "params" : [ "Am o întrebare:" ], "id" : 101 } <-- { „rezultat” : 1 , „eroare” : nul , „id” : 101 } --> { "metodă" : "userLeft" , "params" : [ "user3" ], "id" : null } ...Deoarece proprietatea paramseste o matrice de intrări, următorul format este valid.
{ "method" : "methodnamehere" , "params" : [ { "firstparam" : "acesta conține informații despre primul param." , "secondparam" : 1121211234 , "thirdparam" : "acest lucru conține informații despre thirdparam." }, { "fourthparam" : "acesta este deja un obiect diferit." , "secondparam" : "pot exista câmpuri cu același nume în obiecte diferite." , "thirdparam" : "acest lucru conține informații despre thirdparam." } ], „id” : 1234 }Formatul cererii ar trebui să fie cam așa:
{ "versiunea" : "1.1" , "method" : "confirmFruitPurchase" , "id" : "194521489" , "params" : [ [ "măr" , "orange" , "Mangustă" ], 1.123 ] }Formatul răspunsului ar putea fi cam așa:
{ „versiunea” : „1.1” , „rezultat” : „terminat” , „eroare” : nul , „id” : „194521489” }Apelarea unei proceduri cu parametri de poziție:
--> { "jsonrpc" : "2.0" , "method" : "scădere" , "params" : [ 42 , 23 ], "id" : 1 } <-- { "jsonrpc" : "2.0" , "rezultat „ : 19 , „id” : 1 } --> { "jsonrpc" : "2.0" , "method" : "scădere" , "params" : [ 23 , 42 ], "id" : 2 } <-- { "jsonrpc" : "2.0" , "rezultat " : - 19 , "id" : 2 }Apelarea unei proceduri cu parametri numiți:
--> { "jsonrpc" : "2.0" , "method" : "scădere" , "params" : { "subtrahend" : 23 , "minuend" : 42 }, "id" : 3 } <-- { "jsonrpc" " : " 2.0 " , " rezultat " : 19 , " ID " : 3 } --> { "jsonrpc" : "2.0" , "metodă" : "scădere" , "params" : { "minuend" : 42 , "subtrahend" : 23 }, "id" : 4 } <-- { "jsonrpc" " : " 2.0 " , " rezultat " : 19 , " ID " : 4 }Notificare:
--> { "jsonrpc" : "2.0" , "method" : "actualizare" , "params" : [ 1 , 2 , 3 , 4 , 5 ]} --> { "jsonrpc" : "2.0" , "method" : "foobar" }Apelarea unei funcții inexistente:
--> { "jsonrpc" : "2.0" , "method" : "foobar" , "id" : 10 } <-- { "jsonrpc" : "2.0" , "error" : { "code" : - 32601 , "message" : "Procedura nu a fost găsită." }, „id” : 10 }Apel de procedură cu structură greșită
--> [ 1 , 2 , 3 ] <-- { "jsonrpc" : "2.0" , "error" : { "code" : - 32600 , "message" : "JSON-RPC nevalid." }, „id” : nul }Nume | Versiunea JSON-RPC | Descriere | Limba(e), Platforme |
---|---|---|---|
JSON-RPC.NET | 2.0 | Server rapid JSON-RPC. Acceptă socket-uri, socket-uri denumite și HTTP folosind ASP.NET necesită Mono sau .NET Framework 4.0. | .NET |
Jayrock | 1.0 | Implementarea serverului JSON-RPC 1.0 pentru Microsoft .NET Framework versiunile 1.1 și 2.0. | .NET |
System.Data.JsonRpc | 2.0 | Componentă pentru serializarea și deserializarea mesajelor JSON-RPC 2.0 pentru .NET Standard 1.0 și mai sus. | .NET Standard |
StreamJsonRpc | 2.0 | O bibliotecă care implementează specificația JSON-RPC 2.0 cu opțiuni flexibile pentru alegerea unui strat de transport și a serializatoarelor | .NET Standard 2.0 |
jsonrpc-c | 2.0 | Implementarea JSON-RPC prin socket-uri TCP (numai server). | C |
libjson-rpc-cpp | 2.0+1.0 | Cadrul C++ JSON-RPC care acceptă partea client și server prin HTTP. | C++ |
Fobos | 2.0 | Implementare pentru Qt / C++ . Rezumă stratul de transfer de date (clase gata de utilizare pentru TCP și HTTP). | C++ |
qjsonrpc | 2.0 | Implementare pentru Qt / C++ . Acceptă conexiuni între mesaje și sloturile QObject (cum ar fi QDBus, qxtrpc). Utilizează noile clase JSON incluse în Qt 5. | C++ |
JSON Toolkit Arhivat pe 13 ianuarie 2013 la Wayback Machine | 2.0 | Implementare în Delphi (redenumită în SuperObject) | Delphi |
SuperObiect | 2.0 | Implementare în Delphi (încheiat la 14.12.2018) | Delphi |
pascal-jsonrpc-lite | 2.0 | Implementare în Pascal (Lazarus, Delphi) | Pascal |
go/net/rpc | 1.0 | Implementarea JSON-RPC a bibliotecii standard Go | Merge |
jsonrpc4j | 2.0 | Implementarea Java a JSON-RPC 2.0 acceptă atât socket-uri, cât și conexiuni HTTP. | Java |
json-rpc | 1.0 | O implementare de bază Java/JavaScript care se integrează bine în aplicațiile Android/Servlets/Java autonome/JavaScript/App-Engine. | Java / JavaScript |
jpoxy (link indisponibil) | 2.0 | O implementare Java simplă a JSON-RPC, concepută pentru a facilita implementarea accesului la POJO-uri printr-un cadru RPC brut. | Java |
Serviciul JSON | 2.0 | Implementarea serverului JSON-RPC cu suport pentru Service Mapping Description. Se integrează bine cu Dojo Toolkit și Spring Framework . | Java |
JSON-RPC 2.0 | 2.0 | O bibliotecă Java ușoară pentru analizarea și serializarea mesajelor JSON-RPC 2.0 (sursă deschisă). Mai multe realizări pe site. (Bază, Client, Shell, ...) | Java |
java-json-rpc | 2.0 | Implementare pentru servere J2EE . | Java |
lib-json-rpc | 2.0 | Servlet de implementare, client, JavaScript | Java |
simplejsonrpc | 2.0 | Un simplu Servlet JSON-RPC 2.0 care servește metode de clasă. | Java |
gson-rmi | 2.0 | Cadru ușor, independent de transfer RMI, conceput pentru calcul distribuit. | Java |
THETA-RPC | 2.0 | O implementare la nivel înalt a JSON-RPC 2.0 pentru Node.js cu suport pentru transporturi multiple. | Node.js |
jsonrpcjs | 2.0 | Bibliotecă client JavaScript pentru JSON-RPC 2.0, fără dependențe. | JavaScript |
easyXDM | 2.0 | Bibliotecă pentru conexiuni între domenii cu suport RPC. Suportă toate browserele postMessage, nix, frameElement, window.name și FIM, foarte ușor de utilizat. | JavaScript |
Setul de instrumente Dojo | 1.0+ | Oferă suport JSON-RPC | JavaScript |
Pmrpc | 2.0 | Bibliotecă JavaScript pentru utilizare în browserele HTML5. Implementarea JSON-RPC folosind API-ul postMessage HTML5 pentru transmiterea mesajelor. | JavaScript |
qooxdoo Arhivat 4 februarie 2013 la Wayback Machine | 2.0 | Are o implementare JSON-RPC cu back-end-uri opționale Java, PHP, Perl și Python. | JavaScript, Java, PHP, PERL și Python |
Implementarea JavaScript JSON-RPC | 2.0 | Suportă JSON-RPC prin HTTP și TCP/IP. | JavaScript |
jabsorb | 2.0 | Un cadru Java Ajax/Web 2.0 JSON-RPC ușor, care extinde protocolul JSON-RPC cu funcționalități ORB suplimentare , cum ar fi suport pentru dependențe circulare. | JavaScript, Java |
Platforma Wakanda | 2.0 | Acceptă clientul JSON-RPC 2.0 în cadrul Ajax Framework și serviciul JSON-RPC 2.0 în JavaScript de pe server | JavaScript |
Deimos | 1.0+2.0 | Implementare pe partea serverului pentru Node.js / JavaScript . | JavaScript |
Barracuda Web Server | 2.0 | Barracuda Web Server este integrat | Lua |
Lugate API Gateway | 2.0 | Implementarea API Gateway ca modul JSON-RPC 2.0 pentru NGINX | Lua |
Kit amânat | 1.0 | Suportă client JSON-RPC 1.0. | Obiectiv-C |
Demiurgic | 2.0 | Client JSON-RPC 2.0 pentru Objective-C | Obiectiv-C |
Componente JSON Oxen iPhone Commons | 1.0 | Client JSON-RPC 1.0 pentru Objective-C | Obiectiv-C |
objc-JSONRpc | 2.0 | Client RPC Objective-c JSON. Suportă notificări, apeluri simple și apeluri multiple. | Obiectiv-C |
AFJSONRPCClient | 2.0 | Client RPC Objective-c JSON. | Obiectiv-C |
JSON::RPC | 2.0 | Implementarea serverului JSON RPC 2.0 | Perl |
json-rpc-perl6 | 2.0 | Client și server. | Perl 6 |
php-json-rpc Arhivat 21 iunie 2020 la Wayback Machine | 2.0 | O implementare PHP simplă a JSON-RPC 2.0 prin intermediul unui client HTTP. | PHP |
jQuery JSON-RPC Server | 2.0 | Server JSON-RPC special creat pentru a funcționa cu Zend Framework JSON RPC Server. | PHP, JavaScript |
jsonrpc2php | 2.0 | Exemplu de clasă de bază PHP5 JSON-RPC 2.0 și server | PHP |
tivoka | 1.0+2.0 | Biblioteca universală client/server JSON-RPC pentru PHP 5+. | PHP |
Junior | 2.0 | Biblioteca client/server pentru JSON-RPC 2.0 | PHP |
json-rpc-php | 2.0 | Biblioteca client/server pentru JSON-RPC 2.0 | PHP |
JSONRpc2 | 2.0 | Implementare cu „magie puncte” pentru PHP (= suport pentru gruparea metodelor și separarea punctelor) | PHP |
GetResponse jsonRPCClient | 2.0 | Implementarea client orientată pe obiecte | PHP |
zoServicii | 2.0 | Implementarea PHP, Node.js și JavaScript a JSON-RPC 2.0 | PHP, JavaScript, Node.js |
json-rpc2php | 2.0 | Implementare server și client pentru PHP. Conține un client JavaScript care utilizează jQuery | PHP, JavaScript |
jsonrpc-php | 2.0 | Implementarea JSON-RPC pentru PHP | PHP |
php-json-rpc | 2.0 | Implementarea JSON-RPC 2.0. | PHP |
sajya/server | 2.0 | Server JSON-RPC pentru Laravel | PHP |
JsonRpcBundle | 2.0 | Server JSON-RPC pentru Symfony | PHP |
Django JSON-RPC 2.0 | 2.0 | Server JSON-RPC pentru Django | Piton |
Pijama | Implementarea clientului JSON-RPC. | Piton | |
Zope 3 | 1.1 | Implementarea JSON RPC pentru Zope 3 | Piton |
jsonrpclib | 2.0 | Modul client JSON-RPC pentru Python. | Piton |
tornadorpc | 2.0 | Suportă JSON-RPC necesită server web Tornado . | Piton |
tinyrpc | 2.0 | Suportă JSON-RPC peste TCP, WSGI, ZeroMQ etc. Separă transferul de date de procesarea mesajelor, poate funcționa fără redirecționarea mesajelor. | Piton |
jsonrpc | 2.0 | JSON-RPC 2.0 pentru Python + Twisted . | Piton |
bjsonrpc | 1.0+ | Implementare prin TCP/IP (asincron, bidirecțional) | Piton |
AvocatRPC | 2.0 | Implementarea clientului și serverului JSON-RPC | Python, Ruby, JavaScript (Node.js + browser web), PHP, Java |
pyramid_rpc | 2.0 | Implementare flexibilă JSON-RPC integrată în aplicația web Pyramid. Funcționează cu sistemul de autorizare Pyramid. | Piton |
rjr | 2.0 | JSON-RPC prin TCP/UDP, HTTP, WebSockets, AMQP și multe altele. | Server Ruby (EventMachine) cu clienți Ruby și JavaScript. |
Jimson | 2.0 | Client și server pentru Ruby | rubin |
Obiecte JSON-RPC | 1.0+ | Realizarea numai a obiectelor (fara client si server). | rubin |
JSON-RPC RT | 2.0 | Suport complet pentru JSON-RPC 2.0 peste TCP. | Windows Runtime (WinRT) |
XINS | 2.0 | Începând cu versiunea 2.0, acceptă JSON și JSON-RPC. | XML |
jsonrpc | 2.0 | Implementarea client si server. Protocoalele de comunicare acceptate sunt http, ipc, websocket și tcp. | Rugini |
Pagina oficială [4] conține mai multe implementări Arhivat 17 martie 2013 la Wayback Machine . Lista CPAN de implementări în Perl .