XML-RPC
Author
Albert FloresXML-RPC je protokol, s jehož pomocí lze velice jednoduše provádět vzdálené volání procedur. XML-RPC nepřineslo do světa vzdáleného volání procedur novou technologii. Jedná se totiž o soubor pravidel, které pouze říkají, jak použít již funkční a dokonce standardizované technologie pro potřeby RPC. Data jsou zapouzdřena pomocí značkovacího jazyka XML (eXtensible Markup Language) a přenášena díky protokolu HTTP. Taková koncepce umožňuje aplikacím, napsaným v různých programovacích jazycích, komunikaci mezi různými počítačovými architekturami a jejich operačními systémy.
V současné době je projekt ukončen, nicméně stal se předlohou pro protokol SOAP.
Specifikace
Komunikace probíhá na bázi klient-server. Klient odešle serveru požadavek na vykonání činnosti, server požadavek zpracuje a zpět klientovi vrátí buď odpověď, nebo chybu. +more Každá ze zpráv, které si mezi sebou klient se serverem vyměňují, se skládá z hlavičky a samotného těla zprávy.
Specifikace požadavku
Hlavička
První údaj v prvním řádku hlavičky požadavku indikuje druh dotazu, což je v případě XML-RPC vždy „POST“. Druhá položka nese informaci o umístění XML-RPC serveru (tzv. +more URI). Neexistuje žádný zvláštní požadavek na URI, může být zadáno třeba jen lomítko, nebo může být dokonce prázdné. Třetím údaj definuje verzi a druh protokolu - pro potřeby XML-RPC se používá „HTTP/1. 0“. Další čtyři řádky se skládají vždy z názvu položky a hodnoty („název: hodnota“) a jsou povinné. První ze čtveřice - „User-agent“ - obvykle informuje druh a verzi implementace. Řádek „Host“ určuje adresu počítače, na kterém běží XML-RPC server. „Content-Type“ značí druh odesílaných dat, musí mít vždy hodnotu „text/xml“. „Content-length“ udává délku dokumentu a ta musí být správně určena.
POST /server HTTP/1.0 User-Agent: identifikace_klienta Host: xmlrpc.moje-domena.cz Content-Type: text/xml Content-length: pocet_znaku
Tělo
Tělo požadavku musí uvozovat značka „“. Jedná se o párovou značku, jejímž uzavíracím ekvivalentem „“ je potřeba tělo, respektive celý dokument, ukončit. +more Uvnitř této značky se nachází párová značka „“, udávající název volané procedury (volaná procedura nemusí být ve skutečnosti procedurou, lze stejně dobře jako proceduru volat například tabulku či sloupec tabulky v databázi, záleží na konkrétní implementaci XML-RPC). V názvu procedury se smí vyskytovat pouze velká a malá písmenka A-Z, číslice 0-9, podtržítko, tečka, pomlčka a lomítko. Zároveň podle specifikace záleží jen na serveru, jak se vypořádat se znaky v názvu procedury. Po značkách „“ následuje seznam parametrů předávaných vzdálené proceduře (pokud tato nějaké vyžaduje, v opačném případě není nutné, dokonce ani povolené, je uvádět). Parametry se uvozují párovými značkami „“, mezi něž lze vložit libovolný počet parametrů (slovem „libovolný“ míním, že specifikace jejich počet nikterak neomezuje, počet omezuje pouze definice procedury). Každý parametr je uzavřen mezi značkami „“, v nichž se nachází jeho hodnota mezi značkami „“ s volitelnou definicí datového typu (obecně se doporučuje datový typ uvádět vždy pro zlepšení čitelnosti nebo pro předejití chyb z nepozornosti). Pokud existuje definice parametru, musí být vnořena do značky „“.
POST /server HTTP/1.0 User-Agent: Mozilla/5.0 (Windows; U; Windows NT 5.1; cs-CZ; rv:1.9.0.11) Gecko/2009060215 Firefox/3.0.11 Host: xmlrpc.example.com Content-Type: text/xml Content-length: 314
trida.jmenoMetody
250
WiBXaWtpcGVkaWUsIG90ZXbFmWVuw6kgZW5jeWtsb3BlZGll
Specifikace odpovědi
Hlavička
První položka prvního řádku značí verzi protokolu (vždy HTTP/1. 1), za ní následuje [url= Server|Apache]url=/1. +more0 a[/url]url=/1. 1, přestože odpověď není možné odeslat jinak než v[/url]url=/1. 1, tento protokol však umožňuje odesílat datum pouze ve zmíněném formátu [[rfc:822|RFC 822][stavový kód]], který má ve většině případů hodnotu 200 OK, což znamená, že server obdržel požadavek a posílá odpověď (jiný stavový kód může být vrácen například v případě, že serverová část je napsána v jazyce PHP, jenž se dost často zavádí jako modul do webového serveru [[Apache[/url]], ten může v případě chyby vyslat i jiný, než „200 OK“ stavový kód).
Řádek „Connection“ obsahuje hodnotu „close“, díky čemuž klient pozná, že pokud chce serveru opět vyslat požadavek, musí navázat nové připojení. „Content-Length“ opět udává délku dokumentu a taktéž vyžaduje korektní hodnotu. +more Pole „Content-type“, stejně jako v hlavičce požadavku, nabývá pouze hodnot „text/xml“. Řádek „Date“ předává informaci o době odeslání odpovědi a to ve formátu RFC 822, updatovaném RFC 1123, který je považován za internetový standard (existují ještě dva další formáty data a času, s nimiž si musí být případní klienti/servery schopní poradit; je to důsledek zpětné kompatibility mezi protokoly[/url]]/RFC 1123). Poslední položka hlavičky, a sice položka „Server“, informuje o jménu serveru odesílajícího odpověď.
HTTP/1.1 200 OK Connection: close Content-Length: pocet_znaku Content-Type: text/xml Date: Fri, 29 May 2007 16:31:06 GMT Server: identifikace_serveru
Tělo
Tělo odpovědi tvoří velice jednoduchá XML struktura - značky „“, mezi kterými se, na rozdíl od dotazu, musí vyskytnout párová značka „“. Taktéž uvnitř musí existovat alespoň jedna značka „“ obsahující hodnotu, případně datový typ.
HTTP/1.1 200 OK Connection: close Content-Length: pocet_znaku Content-Type: text/xml Date: Fri, 29 May 2007 16:35:15 GMT Server: identifikace_serveru
Text odpovědi
Specifikace chybové odpovědi
Hlavička
Stejná jako hlavička odpovědi, protože chybová odpověď je také odpovědí, pouze se striktně definovanou strukturou těla.
Tělo
Tělo chybové odpovědi se uvozuje značkami „“ následovanými značkami „“ - jakýsi ekvivalent k „“, ovšem bez vnějšího „“. Uvnitř se nachází značka „“ obsahující datový typ „struct“. +more Struct má zde dva členy, první - „faultCode“ - udává číslo chyby, „faultString“ v sobě nese textovou část chyby. Toto číslo ani text není definováno, pouze se musí dodržet datové typy, jinak záleží čistě na implementátorovi serveru, jaká čísla si pro chyby vymyslí (existuje rozšíření definující několik běžných chyb, má však pouze doporučující charakter, nikoliv závazný).
Důležité upozornění: odpověď, ať už běžná nebo chybová, smí obsahovat buď „“, nebo „“. Jiné struktury nejsou přípustné a slovo „nebo“ je míněno ve vylučovacím smyslu (tzn. +more nemohou nastat obě možnosti zároveň).
HTTP/1.1 200 OK Connection: close Content-Length: pocet_znaku Content-Type: text/xml Date: Fri, 29 May 2007 16:35:15 GMT Server: identifikace_serveru
faultCode 32001
faultString Text chyby
Datové typy
XML-RPC v základním rozšíření definuje šest jednorozměrných a dva vícerozměrné datové typy.
Jednorozměrné
Tabulka 1: datové typy
Značka | Typ | Příklad |
---|---|---|
nebo | 32bitové celé číslo (integer) | -12 |
Číslo s plovoucí řádovou tečkou a dvojnásobnou přesností dle IEEE 754 (double) | -123. 21 | |
Booleovská hodnota - pouze 0 (pro hodnotu false) nebo 1 (pro hodnotu true) | 1 | |
Textový řetězec (string) | Pozdravuj doma | |
Datum a čas podle normy ISO 8601 | 20070529T16:00:00 | |
zakódovaná binární data podle algoritmu base64 | eW91IGNhbid0IHJlYWQgdGhpcyE= | |
rozšířené typy | musí být podporovány vlastností enabledForExtensions | musí být podporovány vlastností enabledForExtensions |
beztypová prázdná hodnota (obdoba null) | ||
, , , | celá čísla s různou bitovou šířkou (8, 16 resp. +more 64 bitů pro i1, i2 resp. i8, které doplňují 32bitové ) a volitelný počet číslic pro . | 127 |
, | číslo s plovoucí desetinnou tečkou. U s jednoduchou přesností dle IEEE 754, u bigdecimal s přesností volitelnou | 5. 4 |
rozšířená reprezentace data, včetně milisekund a časové zóny | 20070529T16:00:00. 99 +0100 |
Poznámka: Integer se smí skládat pouze z číslic, případně znaménkem před číslem samotným, nesmí obsahovat mezeru. Double navíc obsahuje desetinnou tečku, zároveň ale jeho rozsah záleží na konkrétní implementaci. +more Typ string povoluje jakékoliv znaky kromě znaku „.
Rozšířené vícerozměrné typy
Značka | Typ |
---|---|
uzel DOM | |
speciálně uložený (serializovaný) objekt, zkonvertovaný podle algoritmu base64 |
Literatura
Externí odkazy
[url=http://www. xmlrpc. +morecom]Oficiální stránky XML-RPC protokolu[/url] * [url=http://www. scripting. com/davenet/1998/02/27/rpcOverHttpViaXml. html]Historie XML-RPC na blogu jeho autora[/url] * [url=https://web. archive. org/web/20080912164825/http://validator. xmlrpc. com/]Validátor XML-RPC serverů[/url] * [url=http://developer. apple. com/library/mac/#documentation/Networking/Conceptual/UsingWebservices/Introduction/Introduction. html]Srovnání XML-RPC a SOAP[/url] * [url=https://web. archive. org/web/20080115070118/http://www. xmlrpc. com/directory/1568/services/xmlrpcExtensions]Rozšíření XML-RPC[/url] * [url=https://web. archive. org/web/20080105151521/http://www. xmlrpc. com/directory/1568/implementations]Oficiální seznam implementací[/url].