Hoe de uitvoering van de SOAP-technologie

Dutch French Spanish Portuguese Italian German Japanese Chinese Korean Russian Arabic Bookmark and Share this Article Original English article
  

Net REST, SOAP uitvoering omvat zowel het genereren van aanvragen en de verwerking van de respons. Overwegende dat de verwerking van de SOAP-respons is vergelijkbaar met de REST resultaat, het genereren van de SOAP verzoek is heel anders.

Genereren Verzoeken

In tegenstelling tot RUST, is het niet ongewoon om verzoeken handmatig gegenereerde zien, hoewel het nog kan worden gedaan. Het algemeen zijn SOAP verzoeken van de zijde gegenereerd met een generiek instrument (zoals nuSOAP of Peer: SOAP) of met een applicatie-specifieke klasse of module. Handleiding generatie is hier bedekt (een goed begrip van hoe het werkt zal komen in bruikbaar), evenals nuSOAP.

Applicatie-specifieke hulpmiddelen zullen worden genegeerd, voor een paar redenen. Per definitie zijn aanvraag specifiek, en dus niet erg nuttig in deze generieke artikel. Ten tweede, de instrumenten hebben verschillende interfaces en functionaliteit niveaus, en om te doen het onderwerp recht het vergt een grondige blik. Tot slot, ik ben er vast van mening dat als je kunt achterhalen hoe u het werken met nuSOAP doen (of rauw, wat dat betreft), kunt u de applicatie-specifieke instrument om te werken.

Handleiding Generation

Het genereren van SOAP aanvragen handmatig is niet te verschillen van het genereren van REST verzoeken. Het proces van het genereren van de aanvraag en eigenlijk is het overbrengen gesplitst in twee afzonderlijke functies, voor het aantonen van doeleinden.

Voor het genereren van het verzoek zelf, heb ik gekozen voor een Vooraf gegenereerde string, en slechts bevolken de vereiste waarden in runtime. Er zijn meer complexe opties (zoals het maken van het document binnen SimpleXML, of het creëren van nul elke run), maar ze zijn niet echt nodig:

functioncreateRequest ($ devkey, $ action, $ type, $ trefwoord)
(
$ request = "
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 \">
 
$ devkey
$ action
$ type
$ trefwoord
 

"
return $ verzoek;
)

Zoals u kunt zien, de functie is zo ongeveer net zo eenvoudig als het kan krijgen. Merk op dat de variabelen niet zijn URL-gecodeerd, dat is omdat ze niet worden verzonden in de URL (klinkt vanzelfsprekend, maar het is ook makkelijk te missen).

Eigenlijk roepen de API aan het verzoek zenden gaat lenen wat code uit het eerste REST voorbeeld, omdat het verzoek zal worden toegezonden ruwe deze tijd.

functioncallSOAPAPI ($ data)
(
$ url = "http://library.example.com/api/soap/search";
= $ url_info parse_url ($ url);
$ host = $ url_info [ 'host'];
$ path = $ url_info [ 'path'];

Ik kon alleen maar bevolkt de $ host en $ path variabelen bij de start, maar dit moet duidelijker zijn. In een productie-systeem zou het opslaan van een enkele CPU cycli door hardcoding deze elementen.

$ fp = fsockopen ($ host, 80);
fputs ($ fp, "GET". $ path. "HTTP/1.1 \ r \ n");
fputs ($ fp, "Host:". $ host. "\ r \ n");
fputs ($ fp, "Accept: * / * \ 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, "Content-Length:". strlen ($ data). "\ r \ n \ r \ n");
fputs ($ fp, "$ data");

Dit blok is bijna identiek aan het vorige voorbeeld. Het vorige voorbeeld was een POST-aanvraag, terwijl dit een GET-verzoek, een verandering die wordt ingegeven door wat API u werkt. De Content-Type header is anders nauwkeurig weergeven wat je sturen en deze keer natuurlijk heb je $ data te versturen, dus Content-Length zal niet worden 0.

$ response = "";
while (! feof ($ fp))
(
$ response .= fgets ($ fp, 128);
)
fclose ($ fp);
list ($ http_headers, $ http_content) = explode ( "\ r \ n \ r \ n", $ response);
return $ http_content;
)

Deze sectie is ook identiek aan de REST voorbeeld. Wrapping deze beide functies om een reactie te halen is maar nauwelijks het vermelden waard:

$ request = createRequest ('123 ',' zoeken ',' boek ',' stijl);
$ response = callSOAPAPI ($ request);

Was niet te hard!

Generatie met nuSOAP

Voor iets anders dan een one-shot-programma zou ik zeker aanraden te gaan met een soort van een SOAP-module om uw codering leven gemakkelijker te maken. Hoewel, als je in de problemen, volgen ze neer kan een beetje pijn. Ik wil met behulp van een lokale ontwikkeling vak tijdens de ontwikkeling, dus moeten beginnen dingen gaan mis ik kan gebruik maken van een packet sniffer te kijken naar de aanvraag / antwoord in zijn ruwe vorm.

Conceptueel, met behulp van nuSOAP is niet te verschillen van de voltooiing van de taak handmatig. Het object wordt geïnitialiseerd, de lading wordt gemaakt, en het verzoek wordt verzonden. Het belangrijkste verschil is dat nuSOAP al het vuile werk doet.

vereisen ('../ lib / nusoap.php ');
$ client = new SoapClient ( "http://library.example.com/api/soap/wsdl/", true);

Hieronder de $ client-object is gemaakt. Twee opties zijn beschikbaar wanneer u een nieuwe SoapClient: U kunt opgeven van de WSDL-bestand voor de dienst (en zet de tweede parameter op true) of geef het eindpunt voor het gesprek (en zet de tweede parameter op false). Waar mogelijk, gebruik ik graag de WSDL-bestand, de nuSOAP module kan een aantal van je fouten te vangen op die manier, en zorgt ervoor dat de verschillende soorten vragen gaan allemaal naar het juiste eindpunt.

$ params = array (
'devkey' => '123 ',
'action' => 'zoeken',
'type' => 'boek',
'keyword' => 'stijl'
)

Voorbereiden van de parameters voor de transmissie is een stuk makkelijker dan eerdere methodes.

$ namespace = 'http://library.example.com';
$ action = 'http://library.example.com/api/soap/search';
$ method = "SearchRequest";
$ result = $ client-> call ($ method,
array ( 'SearchRequest' => $ params),
$ naamruimte, $ actie);

Ten slotte zijn de laatste paar parameters in te stellen, en het gesprek zelf is gemaakt.

Omgaan met de Response

Omgaan met een reactie van een SOAP-verzoek is wederom niet te verschillend van de rest response-beide zijn voorzien in soortgelijke XML-formaten. De SOAP response draagt de extra envelop en Body elementen, maar vaak huidige gegevens op een vergelijkbare manier binnen deze elementen. Er is uiteraard enkele verschillen tussen de behandeling van de reactie van een handmatige verzoek en van een nuSOAP verzoek. Beide methoden worden hier gepresenteerd.

Handmatig Parsing de Response

Het nabootsen van de output gegenereerd met de rest verzoek gebruikt dezelfde code, met enkele wijzigingen voor de inkapseling regeling gebruikt met SOAP.

echo "U hebt gezocht naar: ($ xml-> Body-> LibrarySearchResponse-> RequestInfo->
trefwoord)
"

echo "Hier zijn uw ($ xml-> Body-> LibrarySearchResponse-> ResponseInfo-> ResultCount)
resultaten
"
foreach ($ xml-> Body-> LibrarySearchResponse-> ResponseInfo-> Item AS & $ item)
(
echo "($ item-> title) door ($ item-> Auteur)
"
)

Dit zal dezelfde output als de rest verzoek eerder getoond. Let op de verschillende syntaxis gebruikt voor het verwerven van de trefwoorden zoeken. Het is niet een kenmerk van deze tijd, dus toegang anders is.

Ontleden van de Response met nuSOAP

Toegang tot het object door nuSOAP is een beetje anders dan de methoden met SimpleXML, maar de interne data structuur is vrij gelijkaardig. Wijzigen van de code te werken met de nuSOAP object duurt slechts enkele momenten.

echo "U hebt gezocht naar:".
$ xml [ 'Body'] [ 'LibrarySearchResponse'] [ 'RequestInfo'] [ 'trefwoord']. "
"
echo "Hier zijn je
($ xml [ 'Body'] [ 'LibrarySearchResponse'] [ 'ResponseInfo'] [ 'ResultCount'])
resultaten
"
foreach ($ xml [ 'Body'] [ 'LibrarySearchResponse'] [ 'ResponseInfo'] [ 'item'] AS & $ item)
(
echo "($ item [ 'title']) door ($ item [ 'author'])
"
)

Met nuSOAP wordt de interne gegevens veel toegankelijk is voor het op dezelfde manier als een associatieve array, dus in plaats van de OO methode van het gebruik van -> kind elementen om toegang te krijgen, verder array informatie is opgenomen. Dit element zal de uitgang identiek aan het vorige voorbeeld.

SOAP is een effectieve methode van bevragen API wanneer de extra overhead is toegestaan. De inkapseling van alle elementen zorgt voor gemakkelijk lezen, en de variabele strekking in het verzoek. Het creëren van SOAP-verzoeken kunnen zo eenvoudig zijn als ze uit het schrijven van een keer, dan gewoon ter vervanging van de belangrijkste variabelen. Als alternatief kan ook worden bereikt door het gebruik van een hulpmiddel zoals nuSOAP. Toegang tot de SOAP antwoord kan worden bereikt op vrijwel dezelfde wijze als de rest antwoord wanneer het verzoek is handmatig ingevuld. In het geval van verzoeken aangevuld met nuSOAP, wordt de toegang methode structureel identiek zijn, met slechts een paar kleine wijzigingen in de syntax gebruikt.

een artikel afkomstig van Emanuela Hedrick


Disclaimer: Onze website is niet verantwoordelijk voor de informatie in dit artikel. In dit artikel wordt op geen enkele manier de standpunten, meningen, gedachten of overtuigingen van de artikelen directory personeel.
Vertaling aankondiging: Het artikel "Hoe de uitvoering van het SOAP-technologie" is vertaald met behulp van een geautomatiseerde vertaling dienst. Onze excuses voor eventuele vertaalfouten die heeft plaatsgevonden. Dank u voor uw begrip.


Online: 1783 users browsing the articles directory