Kaugprotseduurid IDL kompileerimine ONCIDLnäide CORBAIDLnäide MIDLnäide DCERPCmuidomadusi XML-RPC JSON-RPC REST document.idl IDL kompilaator document_cstub.o document.h document_sstub.o #include document_client.c document_server.c C kompileerimine document_client.o document_server.o linkimine linkimine document_client.exe document_server.exe MEELIS ROOS 1 MEELIS ROOS 2 ONC RPC näide telefoniraamat CORBA IDL näide typedef string name<200>; typedef string phone<20>; struct entry { name n; phone p; ; program netphone { version firstphone { int add(entry) = 1; int remove(name) = 2; phone find(name) = 3; = 1; = 58239; module data { typedef string<200> name; typedef string<20> phone; ; struct entry { name n; phone p; ; exception duplicate { phone p; ; exception notfound {; interface phonebook { void add(in entry e) raises (duplicate); void remove(in name n) raises (notfound); phone find(in name n) raises (notfound); ; MEELIS ROOS 3 MEELIS ROOS 4
[ uuid(765c3b10-100a-135d-1568-040034e67831), version(1.0), ] interface DocumentServer { import "globaldef.idl"; const long maxdoc=10; typedef [string] char *String; String documentname; String documentdescription; long size; DocumentDescription; DocumentDescription desc; String header; char *data; Document; [idempotent] long documentquery ( [in] String documentname[maxdoc], [out] DocumentDescription *dd[maxdoc], [out] long *status); MEELIS ROOS 5 MEELIS ROOS 6 Muutuva suurusega parameetrid long insertdocument ( [in] Document *d, [out] long *status) long removedocument ( [in] String name, [out] long *status) DocumentDescription desc; String header; char *data; long numsubdoc; [size_is(numsubdoc)] ComplexDocument *subdocument[*]; ComplexDocument; long fetchdocument ( [in] DocumentDescription *dd, [out] Document *d); MEELIS ROOS 7 MEELIS ROOS 8
MIDL väljade atribuudid DCE RPC muid omadusi [ignore] [size_is] [min_is] [max_is] [length_is] [first_is] Leviedastusega RPC("broadcast") Vastuseta RPC("maybe"), töökindel teade("message") Läbipaistmatu sisuga blob handle_t Tüübitud andmetega toru("pipe") Callback("callback") Autentimine vaikimisi Kerberosega tänapäeval [last_is] [switch_is] [string] MEELIS ROOS 9 MEELIS ROOS 10 XML-RPC XML-RPC vastus Lihtne XML esitusel põhinev RPC mehhanism Peaaegu minimalistlik võrreldes SOAP-iga Kasutab tavalist HTTP protokolli XML kujul päringute ja vastuste edastamiseks Lihttüübid, massiivid, struktuurid, string, datetime, base64 <?xml version="1.0"?> <methodcall> <methodname>examples.getstatename</methodname> <params> <param> <value><i4>40</i4></value> </param> </params> </methodcall> <?xml version="1.0"?> <methodresponse> <params> <param> <value><string>south Dakota</string></value> </param> </params> </methodresponse> MEELIS ROOS 11 MEELIS ROOS 12
JSON-RPC JSON-RPC näide JSON JavaScript Object Notation (Efektiivne) Javascripti parser on brauseritel sees olemas, ei vaja lisaparsimist JSON-RPC kergekaaluline RPC üle HTTP, kasutades JSON formaati application/json MIME tüüp Notification ühesuunaline suhtlus(ükskõik kummas suunas) Nimelised ja positsioonilised parameetrid(ver. 1.1) error-tüüpi objektid vigadest teatamiseks Päring service.echo("hello JSON-RPC") { "method": "echo", "params": ["Hello JSON-RPC"], "id": 1 Vastus { "result": "Hello JSON-RPC", "error": null, "id": 1 Masinloetav teenuse kirjeldus(samuti JSON kujul) MEELIS ROOS 13 MEELIS ROOS 14 JSON-RPC näide REST Päring nimeliste parameetritega { "version": "1.1", "method": "test", "params": { "a" : 1, "b" : 10, Mitu vastust { "version": "1.1", "result": "110", "error": null { "method": "lisainfo", "params": ["teade"], "id": null MEELIS ROOS 15 Representational State Transfer RPC alternatiiv(pole ise RPC) Keskseks olemiks on ressurss, mitte protseduur IgalressursilonURI Väike täpselt defineeritud meetodite hulk ressurssidel Kasutab valdavalt HTTP protokolli, kuid REST arhitektuurset stiili võib ka mujal kasutada Ilma lisakihtideta(pole SOAP-i ega küpsistega seansse ega muud sellist) Olekuvaba protokoll, puhverdatav Skaleerub juba oma disaini tõttu Klienditarkvara on osalt automaatselt olemas MEELIS ROOS 16
REST meetodid Leht(fail,kirje,...) POST eikasutata GET objektiküsimine PUT etteantud ID-ga objekti muutmine DELETE objekti kustutamine Kollektsioon(kataloog,...) POST Luuauusobjekt,tagastadaID GET Listing alamobjektidest PUT eriti ei kasutata, asendaks kogu kollektsiooni DELETE eriti ei kasutata, kustutaks kogu kollektsiooni MEELIS ROOS 17