JSON-RPC

Versiunea actuală a paginii nu a fost încă revizuită de colaboratori experimentați și poate diferi semnificativ de versiunea revizuită la 24 iunie 2014; controalele necesită 55 de modificări .

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.

Scurt istoric

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

Utilizare

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

Exemple

În aceste exemple, -->indică datele trimise către server (cerere) și <--indică răspunsul.

Versiunea 1.0

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 }

Versiunea 1.1 (schiță de lucru)

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

Versiunea 2.0

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 }

Implementări

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 .

Vezi și

Note

  1. Grupuri Google . Preluat la 17 martie 2013. Arhivat din original la 4 noiembrie 2012.
  2. RFC 4627
  3. Specificația JSON-RPC Arhivată 17 mai 2008.
  4. JSON-RPC - Trac (link descendent) . Preluat la 17 martie 2013. Arhivat din original la 29 decembrie 2014. 

Link -uri