31. března 2008

Vytvářet nejdříve WSDL nebo Java rozhraní?

Mé zkušenosti s vytvářením webových služeb resp. WSDL (viz např. minulý článek) mě dovedly ke zjištění, že vždy raději nejdříve navrhnout WSDL a poté si nechat vygenerovat Java kód (WSDL First Development) než opačně - napsat Java rozhraní, přidat anotace a vygenerovat WSDL (Java First Development).

Píši vždy, ale myslím tím vždy, když budu mít možnost si službu sám navrhnout (zejména pro nové projekty) a příjemcem služby bude jiný systém než můj. Již více nebudu navrhovat WSDL pomocí Java rozhraní a anotací, protože s tím mám špatné zkušenosti:

  • Zatím se mi nikdy nepodařilo vytvořit pomocí anotací takové WSDL, které bych si představoval. Vždy jsem musel vzít nějaké kompromisní řešení. Většinu lze ovlivnit pomocí JAX-WS anotací, ale pokud potřebuji jít dále (například vyladit mapování jednotlivých objektů), tak už to není zcela jednoduché a přijde mi to spíše komplikované. Dosud mám zkušenost s XFire a Apache CXF.

  • Webové služby většinou používám při integraci s jinými systémy převážně systémy od jiných dodavatelů. Svým způsobem je pěkná podoba WSDL mojí vizitkou. Nemluvě pak o tom, že mohou být problémy při vytváření klientů v jiných jazycích než je Java. Ano, ono to vždy půjde, ale jak moc sližitě?

  • Když se mi generuje WSDL z kódu, tak se mi lehce může stát, že něco změním a hned se mi změní WSDL (a ani si to nemusím uvědomit). Pokud budu mít nejdříve WSDL, tak toto se mi stát nemůže.

Samozřejmě vytváření WSDL z Javy se pořád hodí - já osobně vidím hlavní oblast použití pro případ komunikace mezi dvěma systémy (nebo v rámci jednoho systému), kde mám pod kontrolou klienta i server. Zde je mi tak nějak jedno, jak to WSDL vlastně vypadá. Ideální jsou v tomto ohledu možnosti Springu - Remoting and web services using Spring.
Pokud budu mít klienta i server pod kontrolou na stejné platformě, tak pak je ale otázka, proč používat webové služby a nepoužít něco rychlejšího, např. RMI, Hessian, Burlab... Přeci jen webové služby moc výkonné nejsou.

Může se také stát, že již budu mít nějaký historický systém a bude potřeba zpřístupnit určitou funkcionalitu přes webové služby - zde asi také bude vhodné jen přidat anotace, přidat konfiguraci a bude hotovo.

6 komentářů:

Ladislav Thon řekl(a)...

Přesně tenhle přístup (contract first) protežuje framework Spring Web Services. Vím jenom, že to existuje, nikdy jsem to nezkoušel, tak jenom takový tip :-)

Anonymní řekl(a)...

kápl jsi na to chlape, tvůj úsudek byl rychlejší než děcko po prvním kari

Anonymní řekl(a)...

No a v čem to WSDL děláte/píšete?

Petr Jůza řekl(a)...

Momentálně používám WID, ale ten je drahý a jen kvůli schématům to nemá cenu.

V minulosti jsem používal XMLSPY. Teď koukám, že ta firma má i neco speciálního jen na schémata SchemaAgent.
Bohužel i tyto nástroje jsou za peníze.

O žádném dobrém nástroji zadarmo nevím, také bych ho uvítal.

Anonymní řekl(a)...

Eclipse + WST

Petr Jůza řekl(a)...

Přidávám odkaz na článek Od WSDL k webovej službe.