Dopo molto tempo webservices che consumano altri toccavano mi creo il mio primo server SOAP PHP e, francamente, sembrava davvero semplice ed intuitivo. Si crea una classe con metodi che stanno per esporre al ws e il servizio viene automaticamente creato per loro, così semplice come sembra.
- <? Php
- ; $ WSDL = "miclase.wsdl";
- SoapServer ( $wsdl ) ; $ Sapone = new SoapServer ($ wsdl);
- ( 'MiClase' ) ; $ Sapone -> setClass ('MyClass');
- ( ) ; $ Sapone -> handle ();
- / / Classe che gestisce il ws
- class MyClass {
- public function MyClass () {
- / / Il tuo codice
- }
- / **
- *
- * @ Param stringa $ email
- * @ Stringa Return
- * /
- $email ) { funzione is_email_available pubblico ($ email) {
- / / Il tuo codice ...
- ; restituisce "OK";
- }
- / **
- *
- * @ Param stringa $ telefono
- * @ Param stringa $ email
- * @ Stringa Return
- * /
- $phone , $email ) { funzione register_user pubblico ($ telefono, $ email) {
- / / Il tuo codice ...
- ; restituisce "OK";
- }
- / **
- *
- * @ Param stringa $ telefono
- * @ Stringa Return
- * /
- $phone ) { funzione downgrade_user pubblico ($ telefono) {
- / / Il tuo codice ...
- ; restituisce "OK";
- }
- }
- ?>
Questo creerà automaticamente il nostro webservice con i tre metodi pubblici. Ma aspettate, manca qualcosa, prima di tutto definire un 'miclase.wsdl ". Che cosa è? Da dove viene?
In realtà, questo è il problema principale quando si crea un webservice SOAP con PHP, WSDL non viene generato automaticamente, ma si deve scrivere a mano. Per risolvere abbiamo libreria PHP WSDL Generator che deve passare solo la classe da cui si estrae il WSDL e lo fa per noi
. Che tutto funzioni bene è necessario che i nostri metodi di classe sono ben documentati come appaiono nel precedente esempio, quindi WSDL Generator sa configurare i tipi di dati di input e parametri di output dei metodi.
Ecco un esempio:
- <? Php
- "wsdl2php/WSDLCreator.php" ) ; require_once ("wsdl2php/WSDLCreator.php");
- WSDLCreator ( "miclase" , "http://ws.tudominio.com/wsdl" ) ; $ Prova = new WSDLCreator ("MyClass", "http://ws.tudominio.com/wsdl");
- ( "miclase.php" ) ; $ Test -> addFile ("MyClass.php");
- ( "http://tudominio.com" ) ; $ Test -> setClassesGeneralURL ("http://tudominio.com");
- ( "MiClase" , "http://ws.tudominio.com/miclase.php" ) ; $ Test -> addURLToClass ("MyClass", "http://ws.tudominio.com/miclase.php");
- ( ) ; $ Test -> createWSDL ();
- ?>
Questo piccolo codice genererà il file WSDL dal nostro webservice. Si vede solo il file raccontiamo la nostra classe (che abbiamo scritto sopra), la classe che vogliamo mappare l'URL webservice (endpoint) e, inoltre, si dimostra che ignora il costruttore della classe non sarà un metodo il nostro webservice. Tutto qui.
Ora provate il servizio web, per esempio dal Eclipse Web Service Explorer:
Dopo aver dato il percorso per il WSDL, http://ws.tudominio.com/miclase.php?wsdl, vedere i tre metodi che abbiamo discusso e possiamo cercare di usarli.
Non ha mai avuto la necessità di creare un server SOAP, ma è stato davvero facile. Ora sto cercando modi per restituire tipi di dati complessi, ma che sarà nel prossimo capitolo
.










6 utenti hanno commentato in "Il mio primo webservice in PHP (scintille)"
Alimentare I commenti a questo articolo TrackbackSaluti, grande articolo, continuate così con il blog, vorrebbe l'intervento ad essere un po 'più spesso, ma capisco che a volte manca il tempo, se avete bisogno di persone di inviare un elemento di volta in volta di poter postare si prega di contattare, saluti!
Buon tutorial, sto iniziando a servizio web, come posso fare in php senza utilizzare nusoap a consumare l'esempio che avete dato?
Ho testato il codice in SoapUI, ottengo i tre metodi, ma solo nel primo vengo ben definito come un tipo di dati stringa nel WSDL, qualcuno sa perché solo primo metodo prende sia il tipo di dati in un altro me sinistra come anyType
Ho testato lo strumento proposto (WSDL Generator) con l'esempio che mostra, appena cambiato i nomi dei metodi (method1, method2 e method3 rispettivamente) ei testi di ritorno ("OK" per ognuno dei metodi) di " Metodo 1 "," Method2 "e" method3 ", questo per testare ciascuno dei metodi di cui correttamente invocato.
Si scopre che quando testato con SoapUI (versione 4.0.1) funziona solo il primo metodo, chiamato gli altri metodi falliscono. In SoapUI si può vedere che il messaggio di risposta per i metodi 2 e 3 è mal costruito, che si pensa che sta accadendo?
Grazie.
@ Leonardo,
WSDL Generator non è perfetto, ha alcuni problemi che dovrebbero essere riviste WSDL generato e risolvere gli errori di solito sono dovuti alla impropriamente caratterizza l'input / output, l'intera struttura è corretta.
Se spendo qualche tempo generando uso quella classe non ha creato il wsdl e il servizio di terminazione del tubo in modo che il congedo statica e dinamica, ma è una soluzione completa per generare il descrittore pure.
Lascia un Commento