Hlavní navigace

Zope a XML-RPC: komunikace mezi Zope servery a webovými službami

David Marko 23. 8. 2002

V minulém článku jsme si ukázali, jaké možnosti má Zope server v roli serveru XML-RPC. Dnes se podíváme na to, jak je možno prostřednictvím XML-RPC komunikovat mezi dvěma Zope servery. Povíme se také trochu o webových službách a ukážeme si, jak takovou jednoduchou službu vytvořit.

XML-RPCProxy

Pokud chcete zajistit vzájemnou komunikaci dvou a více Zope serverů, máte v zásadě dvě možnosti: použít vlastní (Zope) rozhraní pomocí tzv. Zope klienta, nebo použít XML-RPC. Zde existují opět dvě varianty: buď si vytvoříte externí script, který bude v sobě implementovat potřebnou logiku a funkčnost, nebo použijete předpřipravený produkt s názvem XML-RPCProxy. A o této druhé variantě si nyní povíme něco více.

Jak již bylo řečeno, Zope server v sobě nativně podporuje serverovou část XML-RPC protokolu. Aby mohly spolu komunikovat dva Zope servery, potřebujeme implementovat XML-RPC klienta. XML-RPCProxy poskytuje právě tyto služby.

Instalace XML-RPCProxy

XML-RPCProxy patří do kategorie tzv. ‚Products‘, tzn. jedná se rozšiřující moduly instalující se na úrovni souborového systému. V našem případě to bude mírně složitější.

  1. Stáhněte si XML-RPCProxy. Jedná se o dva soubory: XMLRPCProxyBase.tgz a XMLRPCProxy.zexp
  2. Archiv XMLRPCProxyBase.tgz rozbalte do adresáře lib/python/Products ve vaší instalaci Zope.
  3. Soubor XMLRPCProxy.zexp uložte do adresáře import ve vaší instalaci Zope.
  4. Restartujte Zope.
  5. Přihlašte se do prostředí Zope jako ‚Manager‘ a v ‚Products/Control Panel‘ proveďte import souboru ‚XMLRPCProxy.zexp‘

Nyní by se vám v drop-down menu v prostředí Zope měla mezi dostupnými moduly objevit i XMLRPCProxy.

Instalace je za námi. Co dál?

Abychom mohli možnosti XMLRPCProxy využít, musíme vytvořit její instanci v databázové struktuře Zope. To provedeme jednoduchým přidáním prostřednictvím drop-down menu do nějakého zvoleného adresáře.

Záložka ‚Properties‘

Zde máme možnost nastavit dvě zásadní informace:

  1. ‚URL‘ – určuje adresu objektu, na který budeme přes XML-RPC přistupovat (např. http://server1/pu­blic)
  2. 2. ‚ValidMethodList‘ – zde specifikujeme seznam objektů, které budou pro vzdálené volání přístupné. Na jednotlivé řádky napíšeme názvy těchto objektů např.

    dostupnostSklad

    objednaniSklad

Kliknutím na tlačítko ‚Save options‘ nastavení uložíme. Tak, a to je vše z hlediska instalace a konfigurace XML-RPCProxy. V záložce ‚Call External Method‘ máme možnost vyzkoušet funkčnost. Do zobrazeného políčka napíšeme název vzdáleného objektu a po nakliknutí na ‚Execute‘ se zobrazí výsledek.

Příklady

Server poskytující XML-RPC služby

Mějme Zope server na počítači se jménem ‚server-sklad‘. Ten bude pro své okolí kromě jiného poskytovat služby XML-RPC serveru a bude tak poskytovat informace o dostupnosti požadovaných položek. K tomuto účelu máme vytvořený skript s názvem ‚dostupnostSkla­dem‘. Skript očekává dva parametry: kód položky a požadovaný počet kusů (pn,pcs). Návratovou hodnotou je buď prázdný řetězec, což znamená, že zboží je skladem v požadovaném počtu, a nebo informace o tom, že zboží skladem není plus informace o dostupnosti.

Skript máme umístěný v adresáři public. Celá cesta k němu je http://server-sklad/public/dos­tupnostSkladem.

Z hlediska zabezpečení je potřeba zajistit, aby měl anonymní uživatel k objektu přístup.

Server využívající služeb XML-RPC serveru

Nyní se přesuňme na jiný Zope server, který bude chtít služeb serveru předchozího využít.

Vložme prostřednictvím drop-down menu do zvoleného adresáře objekt ‚XMLRPCProxy‘ a nazvěme jej ‚proxy‘. Uvnitř takto vytvořeného objektu vyplňme parametry:

URL = http://server-sklad/public/
ValidMethodList = dostupnostSkladem

Nyní můžeme již služeb XMLRPCProxy využít. Vytvořme si ve stejném adresáři skript s názvem ‚zjisti_dostup­nost‘. Zdrojový kód bude vypadat takto:

## Script (Python) "zjisti_dostupnost"

##bind container=container
##bind context=context
##bind namespace=
##bind script=script
##bind subpath=traverse_subpath
##parameters=pn,pcs
##title=
##
request = container.REQUEST
RESPONSE = request.RESPONSE

res=container.proxy.callRemoteMethod('dostupnostSkladem',
    pn,pcs)
return res

Pokud bychom chtěli volat vzdálenou službu s pevnými parametry, může volání vypadat následovně:

res = container.proxy.callRemoteMethod('dostupnostSkladem',
    'PD345DE',10)

Použité volání znamená, že zjišťujeme dostupnost produktu s kódem ‚PD345DE‘ v množství 10 kusů.

Pokud vše funguje, můžeme si gratulovat. Vytvořili jsme svou první implementaci webové služby (web services).

Že nevíte, co jsou web services (webové služby)?

Nejjednodušší vysvětlení je, že se jedná o programy na vašem serveru, které může využít kdokoliv jiný. Pokud např. nyní poskytujete na svých stránkách informace o cenách letenek nebo o počasí, pomocí web services mohou tyto údaje zpracovávat programy umístěné na jiných serverech či klientech. Pokud tedy prodáváte letenky, typickou webovou službou bude funkce, které zašlete informaci o odletové a cílové destinaci, a jako výsledek vám bude vrácen seznam dostupných volných letů. Tyto údaje pak můžete zapracovat do své vlastní podoby na svých vlastních stránkách nebo např. uvnitř intranetu.

Použití XML-RPC k vytváření webových služeb

XML-RPC přes HTTP → webové služby

HTML přes HTTP → html stránky

Možností použití je obrovské množství. Pomocí webových služeb nemusejí ostatní informace z vašeho serveru pouze vytahovat, ale můžete si implementovat např. možnost vytváření objednávek přímo do vašeho systému. Jak již bylo řečeno v předchozím článku, k webovým službám v podání serveru Zope je možno omezit přístup tak, že např. k zadání objednávky potřebuje klient uživatelské jméno a heslo.

Velkou výhodou implementace web services na serveru Zope je nativní implementace XML-RPC v základní instalaci. Pokud si postupně necháte vytvořit intranetový systém pro vnitrofiremní použití, můžete jej následně otevřít i pro okolní svět. A to bez složitých předělávek, vytváření různých přemostění atp.

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?

26. 8. 2002 13:46

Lojza Vitásek (neregistrovaný)

Bezpečnost si můžete udělat buď na vrstvě XML-RPC sami
(do parametrů funcí si můžete dát např. jméno a heslo
a na straně servru to pak kontrolovat).

Nebo použít nějakou moužnost na úrovni HTTP protokoulu.

1. Auth Basic (tuším že jsem to viděl v některé z
implementací v PHP)

2. SSL - pokud to podporuje implementace. V PHP
jsem viděl v xmlrpc.inc volání curl, ale netestoval
jsem to. Pokud to implementace neumožňuje, dá se
použít stunnel (http://www.stunnel.org) a v něm …











23. 8. 2002 12:15

David Marko (neregistrovaný)

Pokud vím, tak toto v současnosti udělat nelze. Přesněji, udělat by to asi šlo, ale uděláno to není :-)

Vitalia.cz: Pečete cukroví a zbyl vám bílek?

Pečete cukroví a zbyl vám bílek?

Root.cz: Vypadl Google a rozbilo se toho hodně

Vypadl Google a rozbilo se toho hodně

DigiZone.cz: Recenze Westworld: zavraždit a...

Recenze Westworld: zavraždit a...

Podnikatel.cz: Babiše přesvědčila 89letá podnikatelka?!

Babiše přesvědčila 89letá podnikatelka?!

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

Přehledná titulka, průvodci, responzivita

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

EET: Totálně nezvládli metodologii projektu

Měšec.cz: Jak vymáhat výživné zadarmo?

Jak vymáhat výživné zadarmo?

Lupa.cz: Teletext je „internetem hipsterů“

Teletext je „internetem hipsterů“

Lupa.cz: Proč firmy málo chrání data? Chovají se logicky

Proč firmy málo chrání data? Chovají se logicky

DigiZone.cz: ČRa DVB-T2 ověřeno: Hisense a Sencor

ČRa DVB-T2 ověřeno: Hisense a Sencor

DigiZone.cz: Flix TV má set-top box s HEVC

Flix TV má set-top box s HEVC

Vitalia.cz: Proč vás každý zubař posílá na dentální hygienu

Proč vás každý zubař posílá na dentální hygienu

Vitalia.cz: Baletky propagují zdravotní superpostel

Baletky propagují zdravotní superpostel

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

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

Lupa.cz: Babiš: E-shopů se EET možná nebude týkat

Babiš: E-shopů se EET možná nebude týkat

Podnikatel.cz: Babiš: E-shopy z EET možná vyjmeme

Babiš: E-shopy z EET možná vyjmeme

Lupa.cz: Insolvenční řízení kvůli cookies? Vítejte v ČR

Insolvenční řízení kvůli cookies? Vítejte v ČR

Vitalia.cz: Jsou čajové sáčky toxické?

Jsou čajové sáčky toxické?

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

1. den EET? Problémy s pokladnami

Měšec.cz: Kdy vám stát dá na stěhování 50 000 Kč?

Kdy vám stát dá na stěhování 50 000 Kč?