Come il RESTO, effettuare il SAPONE coinvolge sia generare le richieste che allora maneggiare la risposta. Considerando che maneggiare la risposta del SAPONE è simile al risultato di RESTO, generare la richiesta del SAPONE è abbastanza differente.
Diverso di RESTO, è piuttosto raro vedere le richieste generate manualmente, benchè possa ancora essere fatta. Generalmente, le richieste del SAPONE sono generate con un attrezzo generico (come NuSOAP o Pear:SOAP) o con un codice categoria di application-specifico o il modulo. La generazione manuale è coperta qui (una buona comprensione di come funziona verrà in utile), così come NuSOAP.
Gli attrezzi di Application-specifico stanno andando essere ignorati, per i motivi della coppia. Tramite la definizione sono applicazione specifica e quindi non molto utile in questo articolo generico. Secondariamente, gli attrezzi hanno le interfacce e livelli di variazione di funzionalità e per fare la giustizia che di soggetto richiederebbe uno sguardo approfondito. Per concludere, sono saldamente dell'opinione che se potete calcolare verso l'esterno come rendergli il lavoro con NuSOAP (o grezzo, per quella materia), voi potete convincere l'attrezzo di application-specifico per funzionare anche.
La generazione delle richieste del SAPONE non è manualmente troppo differente dalla generazione delle richieste di RESTO. Il processo di generazione della richiesta e realmente di trasmetterla è tagliato in due funzioni separate, per la dimostrazione degli scopi.
|
|
Per la generazione della richiesta in se, ho scelto usare una stringa pregenerated e soltanto popolo i valori richiesti a tempo di esecuzione. Ci sono opzioni più complesse (come la generazione del documento all'interno di SimpleXML, o generazione esso da zero ciascuno funzionato), ma realmente non sono richiesti:
functioncreaterequest($devkey, #,
#, #)
{
$request = "<?xmlversion=\"1.0 \ "= di cifratura \"
UTF-8 \ "standalone=\"no \ "? >
< SOAP-ENV:Envelope
/ \ "di
xmlns:SOAP-ENV=\"http://schemas.xmlsoap.org/soap/envelope
xmlns:xsd=\"http://www.w3.org/2001/XMLSchema \"
xmlns:xsi=\"http://www.w3.org/2001/XMLSchema-instance \"
>
< SOAP-ENV:Body >
< devkey xsi:type=\"xsd:int\">$devkey</devkey >
< azione xsi:type=\"xsd:string\">$action</action >
< scriva xsi:type=\"xsd:string\">$type</type a macchina
>
< parola chiave
xsi:type=\"xsd:string\">$keyword</keyword >
</SOAP-ENV:Body >
</SOAP-ENV:Envelope > ";
ritorno #;
}
Come potete dire a, la funzione è circa semplice solo come può ottenere. Si noti che le variabili URL-NON sono state messe; quello è perché non stanno introducende il URL (suoni evidenti, ma esso è inoltre facili da mancare).
Realmente, denominare l'api per trasmettere la richiesta coinvolge prendere in prestito un certo codice dal primo esempio di RESTO, perché la richiesta sarà trasmessa grezzo questo volta.
functioncallsoapapi($data)
{
$url = "http://library.example.com/api/soap/search";
$url_info = parse_url($url);
ospite di $url_info[ =‘di $host '];
percorso di $url_info[ =‘di $path '];
Potrei popolare appena le variabili di $path e di $host all'inizio, ma questo dovrebbe essere più chiaro. In un sistema di produzione, potreste conservare alcuni cicli del CPU hardcoding questi elementi.
#, 80);
fputs($fp, "OTTENGONO". "HTTP/1.1\r\n di $path");
fputs($fp, "ospite: ". # ");
fputs($fp, "accettano: */* \r\n");
fputs($fp, "Accept-Charset:ISO-8859-1, utf-8;q=0.7,
*;q=0.7\r\n");
fputs($fp, "Connection:close\r\n");
fputs($fp, "Content-Type:application/soap+xml\r\n");
fputs($fp, "Soddisfare-Lunghezza: ".strlen($data).
"\r\n\r\n");
fputs($fp, "# ");
Questo blocco è quasi identico all'esempio precedente. L'esempio precedente era una richiesta dell'ALBERINO, mentre questa è una richiesta di OTTEN, un cambiamento da che sarà dettato che cosa api state lavorando con. Il Soddisfare-Tipo intestazione è differente riflettere esattamente che cosa state trasmettendo e questo volta naturalmente avete $data da trasmettere, in modo da la Soddisfare-Lunghezza non sarà 0.
# = "";
while(!feof($fp))
{
#, 128);
}
fclose($fp);
list($http_headers, $http_content)=explode("\r\n\r\n",
#);
ritorno #;
}
Questa sezione è inoltre identica all'esempio di RESTO. Lo spostamento delle entrambe quelle funzioni per richiamare una risposta è soltanto a mala pena degno accennare:
$request = createRequest('123 ', 'ricerca ', 'book',
'style);
# = callsoapapi($request);
Non era troppo duro!
Diverso di RESTO, non potete usare appena il file_get_contents() per colpire l'api, perché dovete trasmettere il corpo di XML con il file_put_contents() di richiesta non funzionerete neanche, perché avete bisogno dei ritorni di risposta (file_put_contents() un interno), ma ci sono altre opzioni. La pera (http://pear.php.net), per esempio, ha un mazzo di funzioni di HTTP-specifico che possono prendere alcuna dell'emicrania manualmente di generazione della richiesta fuori delle vostre mani, ma ancora vi concede tutta la flessibilità che ottenete con la creazione manuale.
Per qualche cosa tranne un programma unico, definitivamente suggerirei andare con una certa specie di un modulo del SAPONE rendere la vostra vita di codificazione più facile. Anche se, se funzionate nei problemi, rintracciarli giù possono essere un po'di un dolore. Gradisco per mezzo di una scatola locale di sviluppo durante lo sviluppo, in modo da inizio di cose che va awry io posso usare una ventosa di pacchetto per guardare il request/response nella relativa forma grezza.
Concettualmente, usando NuSOAP non è troppo differente dal completare l'operazione manualmente. L'oggetto è inizializzato, il carico utile è generato e la richiesta è trasmessa. La differenza chiave qui è che NuSOAP sta facendo tutto il lavoro sporco.
require('../lib/nusoap.php ');
$client = nuovo
soapclient("http://library.example.com/api/soap/wsdl/", allineare);
Qui l'oggetto di $client è generato. Due opzioni sono disponibili quando generano un nuovo soapclient: Potete o specificare la lima del wsdl per il servizio (e regolare il secondo parametro per allineare), o specifichi il punto finale per la chiamata (e regoli il secondo parametro a falso). Per quanto possibile, gradisco usare la lima del wsdl; il modulo di NuSOAP può interferire alcuni dei vostri errori che il senso ed esso accerta che differente chieda i tipi che tutti vanno al punto finale corretto.
$params = array(
'devkey ' = > '123',
'azione ' = > 'ricerca ',
'tipo ' = > 'libro ',
'parola chiave ' = > 'stile '
);
Preparando i parametri per la trasmissione è più facilmente più presto metodi del poco.
# = 'http://library.example.com ';
$action = 'http://library.example.com/api/soap/search ';
$method = "SearchRequest";
$result = # call($method>,
array(‘SearchRequest '= >
#),
#, #);
Per concludere, gli ultimi parametri sono regolati e la chiamata in se è fatta.
Il maneggiamento della risposta da una richiesta del SAPONE non è ancora troppo differente dalla risposta che di RESTO—entrambe sono fornite nelle disposizioni simili di XML. La risposta del SAPONE trasporta gli elementi supplementari del corpo e della busta, ma spesso i dati del presente in un modo simile all'interno di quegli elementi. Ci è naturalmente una certa variazione fra il maneggiamento della risposta da una richiesta manuale e da una richiesta di NuSOAP. Entrambi i metodi sono presentati qui.
L'imitazione dell'uscita generata con la richiesta di RESTO usa il codice simile, con alcune modifiche per lo schema di incapsulamento usato con SAPONE.
il echo"You ha cercato
for:{$xml->Body->LibrarySearchResponse->RequestInfo - >
keyword}<br > ";
il echo"Here è
your{$xml->Body->LibrarySearchResponse->ResponseInfo- >
ResultCount}
results<br > ";
foreach($xml->Body->LibrarySearchResponse->ResponseInfo->Item
COME &$item)
{
echeggi "{# title>} by{$item->Author}<br
>";
}
Ciò genererà l'uscita identica come la richiesta di RESTO indicata più presto. Noti la sintassi differente usata per acquistare la parola chiave di ricerca. Non è un attributo questo volta, in modo da l'accesso è differente.
L'accesso a dell'oggetto fornito da NuSOAP è poco un differente dai metodi impiegati con SimpleXML, ma la struttura di dati interna è abbastanza simile. La modificazione del codice per funzionare con l'oggetto di NuSOAP occorre soltanto alcuni momenti.
il echo"You ha cercato: ".
#
']
"<br >";
il echo"Here è vostro
{#
']}
results<br > ";
foreach($xml['Body']['LibrarySearchResponse']['ResponseInfo']['Item
'] COME &$item)
{
eco "{#‘titolo ']} by{$item[‘Author']}<br >";
}
Con NuSOAP, i dati interni sono molto raggiunto lo stesso senso di un allineamento associativo, così piuttosto che il metodo di OO di usando - > accedere agli elementi del bambino, ulteriori informazioni di allineamento sono incluse. Questo elemento produrrà identicamente all'esempio precedente.
Il SAPONE è un metodo efficace di interrogazione del APIs quando le spese generali supplementari sono ammissibili. L'incapsulamento di tutti gli elementi tiene conto lettura facile e portata variabile all'interno della richiesta. La generazione delle richieste del SAPONE può essere facile quanto la scrittura loro fuori una volta, allora variabili chiave di sostituzione giuste. Alternativamente, può anche essere compiuta usando un attrezzo quale NuSOAP. L'accesso a della risposta del SAPONE può essere compiuto in molto lo stesso modo della risposta di RESTO quando la richiesta è stata completata manualmente. Nel caso delle richieste completate con NuSOAP, il metodo di accesso è strutturalmente identico, con soltanto alcuni cambiamenti secondari alla sintassi usata.
Online: 852 users browsing the articles directory
|
|