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.
Generazione Manuale
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.
Generazione con NuSOAP
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.