JSON-RPC

Den aktuelle version af siden er endnu ikke blevet gennemgået af erfarne bidragydere og kan afvige væsentligt fra den version , der blev gennemgået den 24. juni 2014; checks kræver 55 redigeringer .

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.

Kort historie

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

Brug

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

Eksempler

I disse eksempler -->angiver dataene sendt til serveren (anmodning) og <--angiver svaret.

Version 1.0

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 }

Version 1.1 (arbejdsudkast)

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

Version 2.0

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 }

Implementeringer

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

Se også

Noter

  1. Google Grupper . Hentet 17. marts 2013. Arkiveret fra originalen 4. november 2012.
  2. RFC 4627
  3. JSON-RPC-specifikation Arkiveret 17. maj 2008.
  4. JSON-RPC - Trac (downlink) . Hentet 17. marts 2013. Arkiveret fra originalen 29. december 2014. 

Links