Klávesové zkratky na tomto webu - rozšířené Na obsah stránky

PHP, brzda internetu?

20.59 - 9. května 2006 | Webdesign

Nechci tímto článkem rozpoutávat flamewar, ani polemiky, zda je lepší PHP nebo ASP.NET – každé má své využití v odlišných scénářích. To jen tak pro začátek. Tenhle článek se pozastavuje nad tím, jak jsou některé věci (PHP) znásilňovány k jiným věcem, na které nejsou vhodné (SOAP služby).

Kolega Filip – ten, díky němuž jsem šel na školení :) – řeší zajímavý problém. V rámci spolupráce s jednou firmou (není podstatné s jakou) potřebuje vzdáleně volat jejich API a to je poskytnuto pomocí webové služby na protokolu SOAP. To je super. Háček je v tom, že zase tak super to není, protože vzdálená implementace nerespektuje standardy. A to navíc standardy, které osobně považuji za mnohem důležitější než (X)HTML a CSS – modly spousty webdesignérů. Konkrétně jde o WSDL. WSDL je formát, který formálně popisuje rozhraní služby, struktury využívané při vzdálené komunikaci a datové typy vlastností struktur. Podle tohoto popisu můžete nechat vygenerovat Proxy třídy pro komunikaci se službou, tak že se služba chová jako jedna z tříd vašeho projektu. A pomalu se dostáváme k nadpisu :) Jelikož PHP formálně nezná datové typy – je typované dynamicky – nedochází ke správné interpretaci typů vlastností struktur. To by zase tak úplně nevadilo, že místo Integerů a Booleanů vám choděj Stringy, to se dá přežít, ale horší je, že PHP přidává do SOAP zpráv elementy, které nejsou ve WSDL popsány a tudíž se s nimi nepopere parser.

Můj odhad je, že služba je napsaná v PHP 5, které má podporu SOAPu, vlastní zkušenosti s tím ale nemám. Na PHP 4 jsem zkoušel framework nuSOAP, který má trochu odlišné výstupy než zmiňovaná služba. PHP 5, tedy přináší možnost vytvářet a konzumovat webové služby běžící na protokolu SOAP, ale jeho výstupy si pravděpodobně neodpovídají. WSDL by totiž měl popisovat, jak bude výsledná SOAP zpráva vypadat a konzument se na to spoléhá, ale výstupní zpráva má úplně jiný formát. To pěkně děkuju. To si mám napsat vlastní WSDLko, abych mohl konzumovat cizí službu, na kterou se nemohu spolehnout, nebo ručně parsovat hodnoty z příchozích zpráv a skládat zprávy odchozí? A co když se za čas služba pozmění? Bodejď by pak WS nebyly považovány za další webovou bublinu, s tímhle přístupem to ani jinak nejde…

Slovníček

SOAP
Simple Object Access Protocol
XML protokol pro podporu komunikace webových služeb nejen přes HTTP
WSDL
Web Service Description Language
XML jazyk, využívající XSD k formálnímu popisu rozhraní webových služeb

Komentáře RSS

  1.  

    Jakub Podhorský

    21.42 - 9. května 2006 | #

    sice s PHP dělám už docela dlouho ale SOAP jsem nikdy nevyužil to jen tak na začátek a nehodlám tady zakládat žádnej flame

    ale musím dodat že jsi možná šlápnul do vosího hnízda pokud si tohle přečte nějakej zarytej PHPčkář a bude tady pěknej flame :)

    btw: já měl za to že by v tomhle PHP mělo standardy dodržovat ale holt asi jak píšeš tomu tak není…možná by se to vyplatilo reportovat jako bug(?)

  2.  

    borek

    21.58 - 9. května 2006 | #

    Gratuluju k zařazení do Weblogů.cz!

    Teď k věci. SOAP extension v PHP 5 funguje následovně:

    1. Ručně vytvoříš WSDL.
    2. Napíšeš funkci s požadovanou funkčností
    3. Pomocí krátkého kódu namapuješ WSDL na tuto funkci.

    Případ, který popisuješ, podle mě nemá nic společného s typovým systémem PHP nebo s rozšířením samotným, podle mě je vina na straně firmy, na jejímž jméně nezáleží. To, že je k funkci s rozhraním A namapován popis s rozhraním B je vina nějakého konkrétního člověka.

    Asi jsi byl tentokrát ve svých závěrech příliš ukvapený, i když chápu, jak tě tvá situace mohla naštvat.

  3.  

    David Grudl

    22.21 - 9. května 2006 | #

    Tohle skutečně není problém PHP, ale špatné implementace SOAP. PHP typy zná (viz funkce get_type apod), nicméně i kdyby je neznalo, je to jedno. V tomto případě se totiž pracuje s typy SOAP (které můžou být v PHP reprezentovány třeba objektem).

    Na podobný problém jsem narazil při práci s PEAR XML/RPC, které jsem si musel lehce upravit, aby (jak říkáš) byl integer integerem a boolean booleanem. Problém je obecný a spočívá v celkově mizerné úrovni dostupných knihoven.

  4.  

    jow

    22.48 - 9. května 2006 | #

    hehe… dalsi co se ohani standardy. kdy uz to vas zaryty aspeckare prestane bavit. proc delate to, ze kdyz neumite neco vyresit a nahodou se nekde kolem prichomejtne neco, co zrovna neni asp.net, tak se do toho hned budu trefovat?

  5.  

    Aleš Roubíček

    06.58 - 10. května 2006 | #

    [2] borek díky :) ad SOAP – díky za osvětlení problému, čekal jsem že se PHP postará i vygenerování WSDL, jako je tomu např, u nuSOAPu, se kterým jsem měl tu čest. Jak vidím, asi ne, ale stejně to nevyvrací fakt, že je PHP na WS imho nepoužitelné :)

    [3] dgx díky za info

    [4] jow já nejsem zarytý ASPčkař – nikdy jsem v ASP nedělal. Ale nedělá mi problémy něco napsat v PHP nebo Javě; Řešit to umim, ale tady jde o princip. K čemu pak jsou ty standardy WS-x, na kterých má fungovat celý automatizovaný proces vystavování a komzumace služeb, když se jich nedrží jeden z nejrozšířenějších nástrojů? Nebo implementuje jen půlku, což je taky k ničemu.

  6.  

    Petr

    19.21 - 10. května 2006 | #

    Nejlepší je si to parsovat sám. Osobně parsování je pro mě tou nejlepší cestou jak odkudkoliv získat cokoliv ;)

  7.  

    Aleš Roubíček

    21.19 - 10. května 2006 | #

    [6] Petr To každopádně, teda pokud na to máš celej den. Jakmile děláš na rozsáhlém systému, ve kterém se vzdáleně volá hodně metod se složitými strukturami, tak se z toho ručního parsování asi po… ;)

    Filip to nakonec vyřešil ručním přepsáním WSDL souboru…

  8.  

    s

    09.05 - 13. srpna 2006 | #

    jezisi ty si lama, to snad neni pravda;) dalsi vysokoskolacek do sbirky;)

  9.  

    Aleš Roubíček

    07.33 - 14. srpna 2006 | #

    [8] s o mé odborné způsobilosti můžeme pochybovat, ale tu tvoji ani neznáme…

  10.  

    MK

    00.55 - 3. července 2008 | #

    [8] s:

    On je možná do sbírky, ale ty jsi do koše. zcout (at) jab­bim.cz@

  11.  

    vm

    15.04 - 23. února 2009 | #

    [5] Aleš Roubíček: Hm, tak názor, že v PHP je SOAP nepoužitelné je opravdu hodně zkratkovitý – pokud něco neznám (zcela viditelně jste zde šlápl s článkem úplně vedle), tak nesoudím. To, že PHP extenze SOAP neumí generovat WSDL je naprosto v pořádku právě proto, že pokud by se o to pokoušela, tak je WSDL standardům neodpovídající (těžko mapovat PHP typy na SOAP typy). Každý atribut by tak musel býti objektem s vlastností soap-type, což je z hlediska PHP značně neefektivní (nikoli, že by to PHP nezvládalo, ale jde to proti filozofii). Generátorů WSDL je mnoho, stačí si jen vybrat (určitě lze nalézt i generátor psaný v PHP) My máme v PHP pomocí NuSOAP napsanou aplikaci, jedna je rozesetá po celé ČR a pomocí webservices si vesele vyměňuje data. Druhá komunikuje s mnohými externími aplikacemi (jako klient i jako server). Zrovna plánujeme přepracování z nuSOAP, které má své mouchy na SOAP extenzi, která je stabilní a dobře použitelná.

  12.  

    Aleš Roubíček

    18.51 - 23. února 2009 | #

    [11] vm: Zkuste si vytvořit nebo zkonzumovat SOAP službu např. ve WCF, pak se tu můžem začít bat o použitelnosti a efektivitě. Já psal služby jak v PHP (nuSOAP i PHP5), tak ASMX tak WCF, takže o neznalosti nebo nepochopení nelze mluvit. ;)

  13.  

    Chaos

    20.58 - 28. března 2010 | #

    Clanek od idiota. Cekal jsem, ze se z nej neco dozvim, ale jedine, co vim: 1, php je znasilnovano 2, autor ma kamarada, kamarad ma problem 3, autor si mysli, ze je sluzba je v php 5, coz sice zni naprosto cool, ale sam ma zkusenosti jen s php 4. sice detail, ze v php 5 bylo napsane cele soap jadro nove, predtim dostupne jen z frameworku vyuzovajici pear balik…

    na duchodce v kauflandu by to dojem udelalo, tady to je ztrata casu.

  14.  

    Gonzi

    21.16 - 28. března 2010 | #

    Možná bych si příště odpustil tak agresivní nadpisy vůči PHPku a zeptal bych se někoho, kdo se PHPkem dlouhodobě živí, se SOAPem dělá atd. Co a jak v PHP jde, nejde, proč to jde zrovna tak a tohle bych teprve porovnával s vlastníma znalostma .NETu. Jinými slovy: Když nevím, nemluvím ;)

  15.  

    Aleš Roubíček

    07.16 - 29. března 2010 | #

    [13] Chaos:[14] Gonzi: Pánové děkuji za diagnózu.

    Zkuste se nejprve podívat, kdy byl článek vydán. Má cenu reagovat na čtyři roky starý spot? Dle mého názoru nemá. Chytne se je debil, kterýmu se zatemní před očima po přečtení nadpisu.

    Nebojte se, zkušenosti s psaním SOAP služeb na PHP4 i 5 jsem si doplnil, ale stejně to stojí za hovno. Pokud vás baví se dřít s prací, kterou zvládne snadno a rychle stroj (také mnohem levnějí), tak to je mi vás opravdu líto.

Místo pro tvůj názor

Povinné je jméno a komentář, z e-mailu se rozpoznají Gravatary.
Komentář je formátován pomocí Texy! syntaxu.
Například: **tučný text**, *kurzíva*, "text odkazu":adresa.
Internetové adresy jsou převáděny na odkazy.
Na komentáře se můžete odkazovat pomocí [číslo komentáře].

Nový komentář