JSON-RPC (forkortet fra engelsk JavaScript Object Notation Remote Procedure Call - JSON remote procedure call) er en fjernprocedurekaldsprotokol, der bruger JSON til at kode meddelelser. Det er en meget simpel protokol (ligner meget XML-RPC ), der kun definerer nogle få typer data og kommandoer. JSON-RPC understøtter notifikationer (information sendt til serveren kræver ikke et svar) og flere opkald.
Version | Beskrivelse | datoen |
---|---|---|
1.0 | Den originale version Arkiveret 13. marts 2013 på Wayback Machine betragtes i øjeblikket som den officielle version [1] . | 2005 |
1.1WD | arbejdsudkast
Navngivne parametre, specifikke fejlkoder og introspektionsfunktioner er tilføjet. |
2008.08.07 |
1.1 Alt | Almindelig JSON-RPC 1.1-konvention
Alternativt tilbud til 1.1 WD. |
2007.05.06 |
1.1 Objektspecifikation | Objektspecifikation Alternativt forslag til 1.1 WD/1.1 Alt | 2007.07.30 |
1.2 | Forslag En senere version af dette dokument er blevet omdøbt til 2.0. | 2007.12.27 |
2.0 | Specifikationsforslag | 24.05.2009 |
2.0 (revideret) | Specifikation | 26.03.2010 |
2.0 (opdateret) | Specifikation | 2013.01.04 |
JSON-RPC fungerer ved at sende anmodninger til en server, der implementerer protokollen. Klienten er normalt et program, der skal kalde en metode på fjernsystemet. Et sæt inputparametre kan overføres til en ekstern metode som et array eller record. Metoden kan også returnere flere output (dette er implementeringsafhængig). Fjernmetoden kaldes ved at sende en anmodning til fjernserveren via en HTTP- eller TCP /IP- socket (siden version 2.0). Når du bruger HTTP, er Content-Type- headeren defineret som application/json[2] .
Alle transmitterede data er simple optegnelser serialiseret i JSON [3] . En anmodning er et opkald til en specifik metode leveret af fjernsystemet. Det skal indeholde tre påkrævede egenskaber:
Serveren skal sende et gyldigt svar for hver anmodning, den modtager. Svaret skal indeholde følgende egenskaber:
For situationer, hvor der ikke kræves svar, er der indført meddelelser. En meddelelse adskiller sig fra en anmodning ved, at den ikke har en ejendom id, hvilket ikke er påkrævet, fordi der ikke vil blive sendt noget svar. I et sådant tilfælde kan egenskaben idspringes over (version 2.0) eller indstilles til null(version 1.0).
I disse eksempler -->angiver dataene sendt til serveren (anmodning) og <--angiver svaret.
Enkel anmodning og svar.
--> { "method" : "echo" , "params" : [ "Hej JSON-RPC" ], "id" : 1 } <-- { "result" : "Hej JSON-RPC" , "fejl" : null , "id" : 1 }Dette eksempel viser interaktion i en chatapplikation. Serveren sender meddelelser om hver besked til hver klient, der skal modtage den. Klienten sender en anmodning til serveren om at sende en besked til chatten og venter på et positivt svar for at vide, at beskeden er blevet leveret.
... --> { "method" : "postMessage" , "params" : [ "Hej alle sammen!" ], "id" : 99 } <-- { "result" : 1 , "error" : null , "id" : 99 } --> { "method" : "handleMessage" , "params" : [ "bruger1" , "vi snakkede lige" ], "id" : null } --> { "method" : "handleMessage" , "params" : [ "user3" , "beklager, må gå nu, ttyl" ], "id" : null } --> { "method" : "postMessage" , "params" : [ "Jeg har et spørgsmål:" ], "id" : 101 } <-- { "result" : 1 , "error" : null , "id" : 101 } --> { "method" : "userLeft" , "params" : [ "user3" ], "id" : null } ...Da egenskaben paramser en række poster, er følgende format gyldigt.
{ "method" : "methodnamehere" , "params" : [ { "firstparam" : "dette indeholder information om den første param." , "secondparam" : 1121211234 , "thirdparam" : "dette indeholder information om den tredje param." }, { "fourthparam" : "dette er allerede et andet objekt." , "secondparam" : "der kan være samme navnefelter i forskellige objekter." , "thirdparam" : "dette indeholder information om tredjeparam." } ], "id" : 1234 }Anmodningsformatet skal være noget som dette:
{ "version" : "1.1" , "method" : "confirmFruitPurchase" , "id" : "194521489" , "params" : [ [ "æble" , "orange" , "Mangoose" ], 1.123 ] }Formatet på svaret kan være noget som dette:
{ "version" : "1.1" , "result" : "færdig" , "fejl" : null , "id" : "194521489" }Kaldning af en procedure med positionelle parametre:
--> { "jsonrpc" : "2.0" , "method" : "subtrahere" , "params" : [ 42 , 23 ], "id" : 1 } <-- { "jsonrpc" : "2.0" , "resultat " : 19 , "id" : 1 } --> { "jsonrpc" : "2.0" , "method" : "fratrække" , "params" : [ 23 , 42 ], "id" : 2 } <-- { "jsonrpc" : "2.0" , "resultat " : - 19 , "id" : 2 }Kald en procedure med navngivne parametre:
--> { "jsonrpc" : "2.0" , "method" : "subtract" , "params" : { "subtrahend" : 23 , "minuend" : 42 }, "id" : 3 } <-- { "jsonrpc " : "2.0" , "result" : 19 , "id" : 3 } --> { "jsonrpc" : "2.0" , "method" : "subtract" , "params" : { "minuend" : 42 , "subtrahend" : 23 }, "id" : 4 } <-- { "jsonrpc " : "2.0" , "result" : 19 , "id" : 4 }Notifikation:
--> { "jsonrpc" : "2.0" , "metode" : "opdatering" , "params" : [ 1 , 2 , 3 , 4 , 5 ]} --> { "jsonrpc" : "2.0" , "method" : "foobar" }Kald en ikke-eksisterende funktion:
--> { "jsonrpc" : "2.0" , "method" : "foobar" , "id" : 10 } <-- { "jsonrpc" : "2.0" , "error" : { "code" : - 32601 , "message" : "Proceduren blev ikke fundet." }, "id" : 10 }Procedurekald med forkert struktur
--> [ 1 , 2 , 3 ] <-- { "jsonrpc" : "2.0" , "error" : { "code" : - 32600 , "message" : "Ugyldig JSON-RPC." }, "id" : null }Navn | JSON-RPC version | Beskrivelse | Sprog(er), platforme |
---|---|---|---|
JSON-RPC.NET | 2.0 | Hurtig JSON-RPC-server. Understøtter sockets, navngivne sockets og HTTP ved hjælp af ASP.NET kræver Mono eller .NET Framework 4.0. | .NET |
Jayrock | 1.0 | JSON-RPC 1.0-serverimplementering til Microsoft .NET Framework version 1.1 og 2.0. | .NET |
System.Data.JsonRpc | 2.0 | Komponent til serialisering og deserialisering af JSON-RPC 2.0-meddelelser til .NET Standard 1.0 og nyere. | .NET Standard |
StreamJsonRpc | 2.0 | Et bibliotek, der implementerer JSON-RPC 2.0-specifikationen med fleksible muligheder for at vælge et transportlag og serializers | .NET Standard 2.0 |
jsonrpc-c | 2.0 | JSON-RPC-implementering over TCP-sockets (kun server). | C |
libjson-rpc-cpp | 2,0+1,0 | C++ JSON-RPC framework, der understøtter klient- og serversiden via HTTP. | C++ |
Phobos | 2.0 | Implementering for Qt / C++ . Abstraherer dataoverførselslaget (klar-til-brug-klasser til TCP og HTTP). | C++ |
qjsonrpc | 2.0 | Implementering for Qt / C++ . Understøtter forbindelser mellem meddelelser og QObject-slots (som QDBus, qxtrpc). Bruger nye JSON-klasser inkluderet i Qt 5. | C++ |
JSON Toolkit Arkiveret 13. januar 2013 på Wayback Machine | 2.0 | Implementering i Delphi (omdøbt til SuperObject) | Delphi |
Superobjekt | 2.0 | Implementering i Delphi (afsluttet den 14/12/2018) | Delphi |
pascal-jsonrpc-lite | 2.0 | Implementering i Pascal (Lazarus, Delphi) | Pascal |
go/net/rpc | 1.0 | JSON-RPC Implementering af Go Standard Library | gå |
jsonrpc4j | 2.0 | Java-implementeringen af JSON-RPC 2.0 understøtter både sockets og HTTP-forbindelser. | Java |
json-rpc | 1.0 | En grundlæggende Java/JavaScript-implementering, der integreres godt i Android/Servlets/Standalone Java/JavaScript/App-Engine-applikationer. | Java / JavaScript |
jpoxy (utilgængeligt link) | 2.0 | En simpel Java-implementering af JSON-RPC designet til at gøre det nemt at implementere adgang til POJO'er gennem en rå RPC-ramme. | Java |
JSON Service | 2.0 | JSON-RPC-serverimplementering med understøttelse af Service Mapping Description. Integrerer godt med Dojo Toolkit og Spring Framework . | Java |
JSON-RPC 2.0 | 2.0 | Et letvægts Java-bibliotek til at parse og serialisere JSON-RPC 2.0-meddelelser (open source). Flere erkendelser på siden. (Base, klient, Shell, …) | Java |
java-json-rpc | 2.0 | Implementering til J2EE- servere. | Java |
lib-json-rpc | 2.0 | Implementeringsservlet, klient, JavaScript | Java |
simplejsonrpc | 2.0 | En simpel JSON-RPC 2.0 Servlet servering klasse metoder. | Java |
gson-rmi | 2.0 | Letvægts, RMI-overførselsuafhængig ramme designet til distribueret databehandling. | Java |
THETA-RPC | 2.0 | En implementering på højt niveau af JSON-RPC 2.0 til Node.js med understøttelse af flere transporter. | Node.js |
jsonrpcjs | 2.0 | JavaScript-klientbibliotek til JSON-RPC 2.0, ingen afhængigheder. | JavaScript |
easyXDM | 2.0 | Bibliotek til forbindelser på tværs af domæner med RPC-understøttelse. Understøtter alle browsere postMessage, nix, frameElement, window.name og FIM, meget let at bruge. | JavaScript |
Dojo Toolkit | 1,0+ | Giver JSON-RPC support | JavaScript |
Pmrpc | 2.0 | JavaScript-bibliotek til brug i HTML5-browsere. JSON-RPC-implementering ved hjælp af HTML5 postMessage API til meddelelsesoverførsel. | JavaScript |
qooxdoo Arkiveret 4. februar 2013 på Wayback Machine | 2.0 | Den har en JSON-RPC-implementering med valgfri Java, PHP, Perl og Python back-ends. | JavaScript, Java, PHP, PERL og Python |
JSON-RPC JavaScript-implementering | 2.0 | Understøtter JSON-RPC over HTTP og TCP/IP. | JavaScript |
jabsorbere | 2.0 | En letvægts Ajax/Web 2.0 JSON-RPC Java-ramme, der udvider JSON-RPC-protokollen med yderligere ORB - funktionalitet såsom understøttelse af cirkulære afhængigheder. | JavaScript, Java |
Wakanda platformen | 2.0 | Understøtter JSON-RPC 2.0-klient inde i Ajax Framework og JSON-RPC 2.0-tjeneste i server-side JavaScript | JavaScript |
Deimos | 1,0+2,0 | Server-side implementering for Node.js / JavaScript . | JavaScript |
Barracuda webserver | 2.0 | Barracuda Web Server er integreret | Lua |
Lugate API Gateway | 2.0 | Implementering af API Gateway som JSON-RPC 2.0 modul til NGINX | Lua |
Udskudt sæt | 1.0 | Understøtter JSON-RPC 1.0 klient. | Mål-C |
Demiurgisk | 2.0 | JSON-RPC 2.0-klient til Objective-C | Mål-C |
Oxen iPhone Commons JSON-komponenter | 1.0 | JSON-RPC 1.0-klient til Objective-C | Mål-C |
objc-JSONRpc | 2.0 | Objective-c JSON RPC-klient. Understøtter meddelelser, simple opkald og flere opkald. | Mål-C |
AFJSONRPCCient | 2.0 | Objective-c JSON RPC-klient. | Mål-C |
JSON::RPC | 2.0 | JSON RPC 2.0 serverimplementering | Perl |
json-rpc-perl6 | 2.0 | Klient og server. | Perl 6 |
php-json-rpc Arkiveret 21. juni 2020 på Wayback Machine | 2.0 | En simpel PHP-implementering af JSON-RPC 2.0 via en HTTP-klient. | PHP |
jQuery JSON-RPC-server | 2.0 | JSON-RPC server specielt lavet til at fungere med Zend Framework JSON RPC Server. | PHP, JavaScript |
jsonrpc2php | 2.0 | PHP5 JSON-RPC 2.0 basisklasse og servereksempel | PHP |
tivoka | 1,0+2,0 | Universal klient/server JSON-RPC-bibliotek til PHP 5+. | PHP |
junior- | 2.0 | Klient-/serverbibliotek til JSON-RPC 2.0 | PHP |
json-rpc-php | 2.0 | Klient-/serverbibliotek til JSON-RPC 2.0 | PHP |
JSONRpc2 | 2.0 | Implementering med "dot magic" til PHP (= understøttelse af metodegruppering og dot separation) | PHP |
GetResponse jsonRPCClient | 2.0 | Objektorienteret klientimplementering | PHP |
zoServices | 2.0 | PHP, Node.js og JavaScript implementering af JSON-RPC 2.0 | PHP, JavaScript, Node.js |
json-rpc2php | 2.0 | Server- og klientimplementering til PHP. Indeholder en JavaScript-klient ved hjælp af jQuery | PHP, JavaScript |
jsonrpc-php | 2.0 | JSON-RPC implementering til PHP | PHP |
php-json-rpc | 2.0 | JSON-RPC 2.0 implementering. | PHP |
sajya/server | 2.0 | JSON-RPC-server til Laravel | PHP |
JsonRpcBundle | 2.0 | JSON-RPC-server til Symfony | PHP |
Django JSON-RPC 2.0 | 2.0 | JSON-RPC-server til Django | Python |
Pyjamas | JSON-RPC klientimplementering. | Python | |
Zope 3 | 1.1 | JSON RPC implementering til Zope 3 | Python |
jsonrpclib | 2.0 | JSON-RPC klientmodul til Python. | Python |
tornadorpc | 2.0 | Understøtter JSON-RPC kræver Tornado webserver . | Python |
tinyrpc | 2.0 | Understøtter JSON-RPC over TCP, WSGI, ZeroMQ osv. Adskiller dataoverførsel fra meddelelsesbehandling, kan fungere uden videresendelse af meddelelser. | Python |
jsonrpc | 2.0 | JSON-RPC 2.0 til Python + Twisted . | Python |
bjsonrpc | 1,0+ | Implementering via TCP/IP (asynkron, tovejs) | Python |
BarristerRPC | 2.0 | JSON-RPC klient og server implementering | Python, Ruby, JavaScript (Node.js + webbrowser), PHP, Java |
pyramide_rpc | 2.0 | Fleksibel JSON-RPC implementering integreret i Pyramid webapplikation. Arbejder med Pyramids autorisationssystem. | Python |
rjr | 2.0 | JSON-RPC over TCP/UDP, HTTP, WebSockets, AMQP og mere. | Ruby (EventMachine) server med Ruby og JavaScript klienter. |
Jimson | 2.0 | Klient og server til Ruby | rubin |
JSON-RPC objekter | 1,0+ | Realisering af kun objekter (ingen klient og server). | rubin |
JSON-RPC RT | 2.0 | Fuld understøttelse af JSON-RPC 2.0 over TCP. | Windows Runtime (WinRT) |
XINS | 2.0 | Siden version 2.0, understøtter JSON og JSON-RPC. | XML |
jsonrpc | 2.0 | Client og server implementering. Understøttede kommunikationsprotokoller er http, ipc, websocket og tcp. | Rust |
Officiel side [4] indeholder flere implementeringer Arkiveret 17. marts 2013 på Wayback Machine . CPAN- liste over implementeringer i Perl .