Až Vám zčerná obrazovka, přejděte na Linux!

Proč používat Linux

pátek 1. srpna 2008

WebServisování, díl první - pojem WebServisa ( Web Service )

Dneska jsem Gůglil něco o JBossu a WebServisách a narazil jsem na terminologický problém - pod pojmem Raw Service si různí lidé představují různé věci. A protože jsem si sám nebyl jist, rozhodl jsem si všechno zase oživit, nastudovat a taky o tom něco napsat. Navíc vzhledem k několika diskusím, které jsem tu na téma WebServis rozvířil a v nichž se ukázalo vzájemné nepochopení základního pojmosloví, začnu s tím vším celým tak nějak z gruntu.

Úplně na začátku musím uvést, že ač jsem příznivcem překladů termínů do češtiny, tak anglický termín Web Service překladám jako (TWikiňácky) WebServisa. Vím, že mnozí češtinofilové preferují webová služba, ale mám k tomu překladu hned několik výhrad.

Ponejprv je třeba si říci, že ani samotné slovo Web se nepřekládá, pavučina se zkrátka neujala. Proto u tohoto termínu neexistuje precedent (který se mimochodem také nepřekládá :-) ). Dále pak nepřekládáme pojem Web Server.

Přestože by se dalo říci, že Webová Služba zní pěkně hezky česky a proč to nepoužít, mám jeden velký protipříklad. Mnoho lidí používá termín Webová Služba pro označení portálu nebo funkce portálu. Například https://kontrola.isvav.cvut.cz/ , http://www.zive.cz/default.aspx?server=1&article=141698, http://www.magic-shop.cz/webove-sluzby-atcomputers-s-v-zencart. Takže aby nedošlo ke zmatení nepřítele, budu i nadále používat terminus technicus WebServisa. Může se vám to nelíbit, můžete s tím nesouhlasit... ale to je tak asi všechno, co s tím můžete dělat.

A co to vlastně ta WebServisa je? Už toto je poměrně těžká otázka. Ještě před čtyřmi lety platilo, že v každé firmě, která se nějak podílela na onom WS-H (WebService Hype :-D ), měli svou vlastní definici. Přestože všichni tak nějak intuitivně chápali wocogo, každý si tento termín definoval tak, jak se mu hodilo, a tím se také vymezoval proti ostatním. "Ty že máš WebServisy? Ale kdeže! To MY máme WebServisy..." V roce 2003 (nejsem si rokem přesně jist) vyšel Sun s prohlášením, že ON dělá WebServisy už SEDM let! No nic. Uvedu pár příkladů definice:
* A service is an abstract resource that represents a capability of performing tasks that represents a coherent functionality from the point of view of provider entities and requester entities. To be used, a service must be realized by a concrete provider agent. (W3C ws-arch)
* A service is a mechanism to enable access to one or more capabilities, where the access is provided using a prescribed interface and is exercised consistent with constraints and policies as specified by the service description. (Oasis standard SOA-RM)
* WebService - Loosely coupled software components delivered over Internet standard technologies. (Systinet Server for Java glossary)
* Webová služba je podle definice W3C řešení, jak spolu aplikace mohou komunikovat a vyměňovat si informace přes Internet. (tak hovoří česká Wikipedie)

Néjlepe celou rozepři vystihuje asi Google.

"Kupodivu" ony terminologické pře přestaly přesně v okamžiku, kdy se buzzword WebServisa stal "out" a "in" bylo mluvit jen a jen o SOA.

Já tedy zkusím tak nějak shrnout onu definici ne do věty, ale bodů:
1) WebServisa je kus kódu, který zprostředkovává nějakou funkcionalitu, z pohledu z horního patra sémantiky atomickou.
2) WebServisa má přijímat data v (jednoduše) strojově zpracovatelném stavu a ve stejně jednoduše strojově zpracovatelném stavu produkovat.
3) WebServisa je dostupná svému "zákazníkovi" obdobným způsobem jako webové stránky, může tedy běžet jak na stejném počítači, tak na druhém konci světa.
4) Každá WebServisa má nějaký její jednojednoznačný identifikátor (URI), který je možno použít k jejímu dosažení.
5) Komunikační protokol mezi klientem a WebServisou je otevřený, kýmkoli použitelný, nepodléhá patentům (no, tak tady sice můžeme narazit, ale podle vyjádření IBM a Microsoftu nebudou svá vlastnická práva na SOAP nikdy zpoplatňovat), není závislý na implementaci WebServisy či klienta (je tedy zaručeno, že lze implementovat na všech různých platformách libovolným jazykem). Je tedy možné jednu WebServisu bez obtíží nahradit jinou od jiného dodavatele.
6) Totéž platí pro transportní protokol.

A co se ještě přidává jako "ještě by mělo platit, abychom to jako WebServisu uznali všichni":
1) Data jsou strukturovaná a textová, ideálně XML. Veškerá binární data jsou zakódována do textové podoby (nejčastěji algoritmem Base64).
2) WebServisa má dobře zdokumentované rozhraní.
3) Jako URI se používá URL.

A co je de facto standardem:
1) Transportním protokolem je HTTP a používá se HTTP-SOAP binding, protože na jiný není standard. HTTP je sice aplikační protokol, ale pro potřeby WebServis byl ohnutý tak, aby sloužil jako transportní vrstva.
2) Data jsou zabalena v SOAPové obálce.
3) Klient a WebServisa si spolu povídají jazykem, kterému rozumí Microsoft DotNet framework. Když MS přejde na modré trpaslíky, mýdlo bude zahozeno. Tolik k nezávislosti na jedné firmě.
4) Na popis rozhraní se používá WSDL.
5) Každé volání je synchronní request-response. K WebServisám se tak převážně přistupuje jako ke vzdáleným objektům, tedy takové vylepšené XML-RPC.

Neříkám, že je to přesně ono, ale plus mínus ano.

2 komentáře:

Makub řekl(a)...

Před třemi lety dělal rešerši na téma co je to SOA a hledal jsem definici slova service/služba. Našel jsem jich spousty, a ta, která se mi líbila nejvíc, zní:

"Service is a contracted interface to software functionality and data that communicates via messages" (ZapThink)

Takže si dovolím přidat definici webservisy, která mne teď napadla: webservica je služba, která komunikuje pomocí zpráv ve formátu zpracovatelném nezávisle na platformě.

Oto 'tapik' Buchta řekl(a)...

Ano, ZapThinková je jedna ze zajímavějších. Málokterá používá důležitý termín "message". Bohužel z mého pohledu je příliš obecná. Lze si pod takovouto servisou představit téměř cokoli, včetně generického UNIXového procesu.
K té tvojí, makube, mám taky několik výhrad. Hlavní je ta, že ořezává "služby" pouze podle platformní nezávislosti, což určitě není něco, co by měnilo celou architektu systémů.
Opět tedy platí to, co jsem již napsal. IMHO se nelze shodnout na jediné jednotné definici.