Hlavní navigace

Zope jako XML-RPC server

David Marko 16. 8. 2002

Na Rootovi již proběhl pěkný článek týkající se základních vlastností aplikačního serveru Zope. Dnes se podíváme na jeho možnosti vzhledem ke komunikaci s okolním světem.

Pokud používáte aplikační server, po nějakém čase pravděpodobně dospějete k situaci, kdy s ním budete potřebovat komunikovat z nějakého jiného programu, z jiného počítače, popřípadě budete mít více instalací aplikačního serveru na více počítačích a budete potřebovat zajistit komunikaci mezi nimi.

Takovýchto komunikačních rozhraní je vyvíjeno (a více či méně používáno) několik. Hodně se hovoří a píše například o SOAP rozhraní, které tyto požadavky umožňuje řešit. Jako však i v jiných oblastech jsou technologie, o kterých se hodně píše, ale již méně je najdete v konkrétních řešeních. Důležitým faktorem pro rozšíření je vždy snadnost implementace a následného použití.

Zope server v sobě standardně implementuje rozhraní nazývané XML-RPC server. Jedná se o jednoduchý a zároveň velmi mocný nástroj, jehož pomocí můžete vytvářet distribuované systémy schopné komunikace mezi sebou. XML-RPC server je v Zope serveru integrován do vrstvy protokolu HTTP a jeho použití je zcela transparentní. Tímto způsobem lze pomocí XML-RPC klienta přistupovat de-facto ke všem objektům, vytvořeným na Zope serveru, bez toho, abyste je museli pro tyto účely upravovat.

Klientská část může být realizována několika způsoby. Pokud používáte scriptovací jazyk Python, máte vyhráno. Pro něj je dostupná knihovna nazvaná ‚xmlrpclib.py‘, která poskytuje potřebné nástroje.

Marshalling a unmarshalling – dvě tajemná slova

Název XML-RPC je tvořen dvěmi slovy. RPC pochází z remote-procedure-call a XML se týká dnes často zmiňované XML technologie. XML-RPC je XML využívané v praxi. Nebojte, abyste XML-RPC mohli používat, nemusíte XML jazyk znát. De-facto se s ním během vytváření komunikace se serverem nesetkáte. K jeho použití dochází uvnitř. Veškeré informace, které na server posíláte nebo ze serveru přijímáte, nemusí být pouze ‚holé‘ textové řetězce, ale můžete prostřednictvím XML-RPC pracovat i s komplikova­nějšími datovými strukturami, jako jsou klasická pole či složitější dictionaries. K přenosu těchto datových typů se používá tzv. marshalling či opačně unmarshalling­. Jedná se o způsob, jakým jsou data transformována do přenositelné standardizované podoby. V našem případě je to právě XML.

Ale dost teorie. Představme si, že na serveru máme objekt, který vrací seznam uživatelů vyhovujících zaslaným kritériím. Tento objekt má název ‚get_users‘. Jako argument přijímá datovou strukturu, která popisuje kritéria pro vyhledávání.

V interaktivním režimu Pythonu si pak můžeme vyzkoušet, jak takováto transformace vypadá.

# natažení podpůrné knihovny
>>> import xmlrpclib

# nastavení kritérií
>>> par={'pohlavi':'muz','vek':26}

# převedení na datový typ 'tuple'
>>> tpar=tuple([{'pohlavi':'muz','vek':26}])

# volání metody provádějící převod parametrů do XML
>>> vysledek=xmlrpclib.dumps(tpar,'get_users')


>>> print vysledek
<?xml version='1.0'?>
<methodCall>
<methodName>get_users</methodName>
<params>
<param>
<value><struct>

<member>
<name>vek</name>
<value><int>26</int></value>
</member>
<member>
<name>pohlavi</name>

<value><string>muz</string></value>
</member>
</struct></value>
</param>
</params>
</methodCall>

Zobrazena je pythonová datová struktura převedená do XML.

Obrácený převod, tzv. unmarhalling, je zajišťován prostřednictvím jiné metody téže knihovny. Máme-li z předchozího příkladu v proměnné ‚vysledek‘ uložen XML objekt, následující metodou provedeme zpětné převedení na původní datový typ.

>>> print xmlrpclib.loads(vysledek)[0][0]
({'vek': 26, 'pohlavi': 'muz'},)

Působivé, že? Přesto se jedná pouze o interní metody, které při běžné práci nevyužijete. A je to tak dobře. Soustředit se můžete více na to, co děláte, a ne, jak to děláte.

Jak tedy klient komunikuje s XML-RPC serverem?

Ukažme si to na příkladu, který může vypadat takto:

Dejme tomu, že na Zope serveru máme v kořenovém adresáři skript s názvem ‚aktualni_cas‘. Ten jako hodnotu vrací naformátované aktuální datum a čas. Jednoduchý PythonScript, který vrací aktuální datum a čas, může vypadat např. takto:

## Script (Python) "aktualni_cas"

##bind container=container
##bind context=context
##bind namespace=
##bind script=script
##bind subpath=traverse_subpath
##parameters=
##title=
##

datum=DateTime().strftime("%d.%m.%Y %H:%M:%S")
return datum

Klientská část naprogramovaná v pythonu pak vypadá takto:

# natažení podpůrné knihovny
>>> import xmlrpclib

# nastavení spojení na server, proměnná 's' je
# nyní objektem připojení na server
>>> s=xmlrpclib.Server('http://linuxbox')

# volání našeho scriptu na serveru (jednoduché, že?)
>>> s.aktualni_cas()

# vaše metoda vrátí řetězec z aktuálním datumem a časem
'6.8.2002 12:30:20'

# pokud máte na serveru adresář users a v něm script
# nazvaný 'get_users', vypadá volání takto

>>> s.users.get_users()

Odkazovat se však můžete i na objekt běžné HTML stránky, a tak následující příklad provede natažení standardní úvodní stránky. Ta je pak k dispozici jako textový řetězec.

>>> import xmlrpclib
>>> s=xmlrpclib.Server('http://linuxbox')
>>> s.index_html()

'<html>

<head>
<title>Zope
</title>\n
<meta http-equiv="Content-Type"
    content="text/html;
    charset=windows-1250">\n
</head>
<body
bgcolor="#FFFFFF"> ......

<body>
</html>\n'

XML-RPC rozhraní neslouží pouze k získávání informací ze serveru, ale funguje plnohodnotně oboustranně, tzn. můžete volat vytvořený objekt s parametrem, který se na straně serveru zpracuje. Samozřejmě jsou stále na straně serveru zohledňována přístupová práva, což v praxi znamená, že k objektu, ke kterému nemáte přístup přes standardní Zope rozhraní, se nedostanete ani přes XML-RPC.

K čemu je možno XML-RPC použít?

V jednoduchosti je síla a zde to platí dvojnásob. Jednoduché použití ve spolupráci se Zope serverem přímo vede k různým implementačním řešením.

U nás například provádíme zálohování prostřednictvím vlastní aplikace naprogramované v pythonu, která vysledek své činnosti zapisuje prostřednictvím XML-RPC do Zope serveru. Ten pak poskytuje uživatelské rozhraní pro prohlížení a při nestandardních stavech je schopen odpovědné osobě zaslat e-mail.

Závěr

XML-RPC v podání Zope serveru je živé a plně funkční řešení. Nemusíte nic doinstalovávat, dodatečně konfigurovat a pak se o to starat. Lehce tak můžete své již vyvinuté aplikace otevřít okolnímu světu a vytvořit tak například bezpečnou vstupní bránu do vašeho skladového systému pro vaše obchodní partnery.

Příště se podíváme na možnost komunikace dvou Zope serverů mezi sebou právě prostřednictvím XML-RPC rozhraní, či jak vytvářet tzv. web-services dostupné pro okolní svět. Dozvíte se také, k čemu je dobrá XML-RPC Proxy a že XML-RPC je otevřenou technologií schopnou zajistit komunikaci např. mezi prostředím PHP a Zope.

Odkazy

Zde si můžete stáhnout Zope server
Zde naleznete xmlrpclib knihovnu
Řešení založená na aplikačním serveru Zope

Našli jste v článku chybu?

19. 8. 2002 12:39

lzap (neregistrovaný)

Díky za vynikající článek. Jen tak dál.

16. 8. 2002 13:21

lojza (neregistrovaný)

je tuze fajn věc. Podrobnosti na
http://www.xmlrpc.org/

Hezké na tom je, že není závislé na implementaci.
Server můžete mít např. v pythonu, klienta třeba v
PHP nebo v perlu. Seznam implemetací je na
http://www.xmlrpc.com/directory/1568/implementations

případně HOWTO
http://xmlrpc-c.sourceforge.net/xmlrpc-howto/xmlrpc-howto.html

Velmi jednoduchým způsobem jak si pořídit server je
např. apache a PHP













Podnikatel.cz: EET zvládneme, budou horší zákony

EET zvládneme, budou horší zákony

DigiZone.cz: ČRo rozšiřuje DAB do Berouna

ČRo rozšiřuje DAB do Berouna

Podnikatel.cz: EET: Totálně nezvládli metodologii projektu

EET: Totálně nezvládli metodologii projektu

Podnikatel.cz: Přehledná titulka, průvodci, responzivita

Přehledná titulka, průvodci, responzivita

Podnikatel.cz: K EET. Štamgast už peníze na stole nenechá

K EET. Štamgast už peníze na stole nenechá

Vitalia.cz: Láska na vozíku: Přitažliví jsme pro tzv. pečovatelky

Láska na vozíku: Přitažliví jsme pro tzv. pečovatelky

Podnikatel.cz: Na poslední chvíli šokuje vyjímkami v EET

Na poslední chvíli šokuje vyjímkami v EET

Vitalia.cz: „Připluly“ z Německa a možná obsahují jed

„Připluly“ z Německa a možná obsahují jed

Vitalia.cz: Paštiky plné masa ho zatím neuživí

Paštiky plné masa ho zatím neuživí

Měšec.cz: Zdravotní a sociální pojištění 2017: Připlatíte

Zdravotní a sociální pojištění 2017: Připlatíte

Lupa.cz: Google měl výpadek, nejel Gmail ani YouTube

Google měl výpadek, nejel Gmail ani YouTube

Měšec.cz: Finančním poradcům hrozí vracení provizí

Finančním poradcům hrozí vracení provizí

Lupa.cz: UX přestává pro firmy být magie

UX přestává pro firmy být magie

Vitalia.cz: Říká amoleta - a myslí palačinka

Říká amoleta - a myslí palačinka

Lupa.cz: Co se dá měřit přes Internet věcí

Co se dá měřit přes Internet věcí

DigiZone.cz: NG natáčí v Praze seriál o Einsteinovi

NG natáčí v Praze seriál o Einsteinovi

Vitalia.cz: Chtějí si léčit kvasinky. Lék je jen v Německu

Chtějí si léčit kvasinky. Lék je jen v Německu

Podnikatel.cz: 1. den EET? Problémy s pokladnami

1. den EET? Problémy s pokladnami

Vitalia.cz: 9 největších mýtů o mase

9 největších mýtů o mase

Vitalia.cz: Baletky propagují zdravotní superpostel

Baletky propagují zdravotní superpostel