Web services

Pokud byste někdo někdy chtěl dělat v PHP Web Services, tak mohu doporučit opensource php knihovnu NuSOAP, aktuálně s ní mám zkušenosti; zároveň si dovoluji varovat, že některé věci tam fungují docela po svém, např. je překvapivě špatně vygooglitelné, jak tam nastavit kódování utf8, ač je to pro WS jakýsi standard... A nemá to snad žádnou pořádnou dokumentaci, při problémech doporučujou použít fórum, kde to ale moc nežije, takže se toho člověk stejně moc nedozví...

(Hm, tak si říkám, proč jsem to sem vlastně napsal... Asi je to jako v té Nohavicově básni "Haló haló"... Třeba to nějakej Nípal smaže...)

//EDIT: Třeba nesmaže... Nípal, 13:00.
To už si raději napíšu vlastní knihovnu ;) Není to zase tak těžký.

Se SOAP jsem se setkal ve spojitosti s API datové schránky. Docela důmyslná knihovna. Vzdálené funkce se tváří jako lokální funkce objektu. Jediný problém, který jsem s nima řešil a vyřešili, byla chyba přihlašování přes SSL. Chyba byla ve verzování SSL ;)
Mě to na https řve, pač to mam na zdarma SSL... A ono se to v tom NuSOAP napíše fakt hezky rychle stručně jednoduše... jen je potřeba vědět, co tam napsat...
A obecně je SOAP pěkná věc, pro spolupráci dvou různejch kusů nečeho, postavenejch třeba na úplně jinejch architekturách, je to asi ideální...
Tak zobrazit seznam funkcí, které obsahuje, lze získat zavoláním funkce $soap->__getFunctions() nebo z WSDL.
A jaké parametry zadat nebo jaké vyplivne, tak to se dozvíš buď z dokumentace nebo z XSD.
Nojo, ale nejpodstatnější je tam popis toho, co to dělá, takováhle automatická dokumentace je k tomu přibalená, ale člověku (třeba mně) to moc neřekne... Tohle hezky řeší třebas .NET a jeho XML komentáře...
google
NuSOAP php documentation
NuSOAP php documentation utf8

http://www.scottnichol.com/nusoapprogwsdl.htm
POST /phphack/hellowsdl.php HTTP/1.0
Host: localhost
User-Agent: NuSOAP/0.6.8 (1.81)
Content-Type: text/xml; charset=ISO-8859-1
SOAPAction: &quoturn:hellowsdl#hello"
Content-Length: 550

<?xml version="1.0" encoding="ISO-8859-1"?>

http://www.phplivedocx.org/articles/using-livedocx-with-nusoap/
$nuSoap->soap_defencoding = 'UTF-8';
$data[$pageCounter] = base64_decode($result['GetAllMetafilesResult']['string']);

To je proste rukama :) Nekdo hledat umi...
tez na jedne strance proste pouzivaji klasicke
header('Content-Type: text/plain; charset=utf-8');
http://dev.xoofoo.org/dev_xoops_240b1/d4/d99/a01634.html
a tady treba je jakazsi finkce omezena
eregi('^(ISO-8859-1|US-ASCII|UTF-8)$',$enc)
a tady dokonce mas ceskou dokumentaci
http://is.muni.cz/th/98637/fi_b_a2/bc_prace.txt

3.2.1 Úpravy knihovny NuSOAP
Při implementaci jsem narazil na problém s českou diakritikou, a to i když bylo nastaveno
kódování UTF-8. Po zběžném hledání problému jsem zjistil, že knihovna převádí text z UTF-8
na ISO-8859-1 a poté zpět do UTF-8. Tohoto nelogického chování se dá zamezit úpravou
řádku:
12
var $soap_defencoding = 'ISO-8859-1';
Zde je nutné změnit hodnotu proměnné na UTF-8. Aby byly znaky posílány správně, je ještě
potřebné zakomentovat (nebo odstranit) podmínku ve funkci character_data:
if($this->decode_utf8) {
$data = utf8_decode($data);
}
Ve verzi PHP 5 (a vyšších) navíc nastává konflikt se třídou soapclient, protože je již
obsažená v základní instalaci. Je tedy potřeba ji vhodně přejmenovat (v mém případě na
soapclient2).
Hm, tak ted už to vim taky žejo. Ale povedlo se ti to najít hezky.
Nicméně žádnou skutečnou dokumentaci tam nevidim... Vždycky je to pár příkladů nějakejch věcí, který zrovna tomu autorovi přišly užitečný... Ale nikde jsem třeba nenašel něco jako function list s popisem toho, co co dělá. Takže člověk to podle těch příkladů nějak copy-pastuje a poupraví, aniž by chápal, co přesně to dělá/nedělá...
A jaks sám zjistil, aby tam správně fungovalo utf8, tak to je trochu magie. Návodů je spousta, každý je trochu jiný, a jen některé vyřeší ten problém, který zrovna člověk má... Neexistuje nějaký jednoduchý kompletní přepnutí do utf8. Já jsem implementoval server, a fungovalo toto:
$server->soap_defencoding = 'UTF-8';
$server->decode_utf8 = false;
Nicméně tys to našel hned druhým odkazem, povedlo se ti ten dotaz položit šikovnějc. Ovšem jistě uznáte, že když tohle vidíte, tak vás nenapadne, že to je přepnutí pro podporu utf8. Ten první řádek jo, ale ten druhej rozhodně ne...
A např. v citované "české dokumentaci" (teda nic proti, je to česky a je to dokumentace, akorát to neni dokumentace tý knihovny) je vidět, že kvůli absenci skutečné dokumentace autor zkoumal ten kód, našel problém a odstranil ho smazáním kusu kódu. Přičemž je vidět, že čistějším a bezpečnějším řešením se stejným efektem je použít:
$decode_utf8 = false
Jenže člověk se v žádných oficiálních nedozví, co to "decode_utf8" dělá, a na co je to dobré, takže bud má štěstí a potká potřebný kus kódu (v lepším případě i s vysvětlením) v nějakém článku, anebo to štěstí nemá...
Dobrý programátor vlastně ani dokumentaci nepotřebuje. Zdrojové kódy jsou pro něj podstatě dokumentace. Stačí umět to přečíst ;)

Takže $soap_defencoding určuje kódování pro sestavení SOAP zprávy ve funkci serializeEnvelope()

A $decode_utf8 povoluje nebo zakazuje použití PHP funkce utf8_decode()
Tomík (tom.czweb.org)
Ona vetsinou neni dobra dokumentace :) V knihovnach se delaji caste zmeny a nema je kdo zaznamenavat do dokumentace.
Osobne tez obvykle dohledavam zpetne, kde se co meni. Proto mam Far, ktery umi hledat slova ve vice souborech a spoustu dalsich veci, na ktere musite mit dalsich X programu.

R.U.R. (jsrosa.wz.cz)
To neni podstatne, jak, nahoda. Co mne zajima spis, jestli to funguje, jak jsi chtel? Spokojenost zakaznika predevsim :) Prozatim z tvych slov chapu, ze jsem to asi trefil.
Dokumentace se dnes píše do zdrojáků, viz javadoc.