190 likes | 430 Views
Simple Object Access Protocol by Vinubalaji Gopal (Vinu). SOAP. What is SOAP?. W3C Recommendation Simple Object Access Protocol XML based Can use SMTP or HTTP transport Can be used for RPC or Message exchange Works through Firewall Platform Independent. SOAP Participants. SOAP Message.
E N D
Simple Object Access Protocol by Vinubalaji Gopal (Vinu) SOAP
What is SOAP? • W3C Recommendation • Simple Object Access Protocol • XML based • Can use SMTP or HTTP transport • Can be used for RPC or Message exchange • Works through Firewall • Platform Independent
SOAP Message <?xml version='1.0' ?> <env:Envelope xmlns:env="http://www.w3.org/2003/05/soap-envelope"> <env:Header> .... </env:Header> <env:Body> ..... </env:Body> </env:Envelope>
SOAP Message Header is Optional meant for SOAP Intermediary
SOAP Message Example <?xml version='1.0' ?> <env:Envelope xmlns:env= "http://www.w3.org/2003/05/soap-envelope"> <env:Body> <flight xmlns:env=”urns”> list </flight> </env:Body> </env:Envelope> SOAP Sender SOAP Receiver
SOAP Message Example <?xml version='1.0' ?> <env:Envelope xmlns:env= "http://www.w3.org/2003/05/soap-envelope"> <env:Body> <flightresponse xmlns:env=”urns”> <type>Singapore Airlines</type> <type>United Airlines</type> </flightresponse> </env:Body> </env:Envelope> SOAP Sender now SOAP Receiver now
What about RPC? • Messaging model is extensible • SOAP defines additional elements that facilitates RPC • SOAP is very flexible and lets you define any method signature. • A unique URI needs to be passed which identifies the SOAP Node that contains or supports the RPC.
SOAP RPC Example Request <?xml version="1.0"?> <env:Envelope xmlns:env="http://www.w3.org/2003/05/soap-envelope"> <env:Body> <m:GetPrice xmlns:m="http://urwebsite/prices"> <m:Item>Apples</m:Item> </m:GetPrice> </env:Body></env:Envelope>
SOAP RPC Example Reply <?xml version="1.0"?> <env:Envelope xmlns:env="http://www.w3.org/2003/05/soap-envelope"> <env:Body> <m:GetPriceResponse xmlns:m="http://urwebsite/prices"> <m:Price>1.90</m:Price> </m:GetPriceResponse> </env:Body></env:Envelope>
SOAP Fault Message • env:Fault – a Subelement of env:Body • two mandatory sub-elements - env:Code (which mandates env:Value) - env:Reason – Human Readable • Optional env:Detail subelement element • Optional env:Node subelement • Optional env:Role subelement
SOAP RPC Fault Example Envelope and Body headers..... <env:Fault> <env:Code> <env:Value>env:Sender</env:Value> </env:Code> <env:Reason> <env:Text xml:lang="en-US">Processing error</env:Text> </env:Reason> </env:Fault> End of headers
SOAP HTTP Bindings • Relates the HTTP Response codes with SOAP responses. • Provides a mechanism to specify the URI which identifies the SOAP node which “contains” or “supports” RPC.
HTTP Request Example GET/travelcompany.example.org/reservations?code=FT35ZBQ HTTP/1.1 Host: travelcompany.example.org Accept: text/html;q=0.5, application/soap+xml
HTTP Response HTTP/1.1 200 OK Content-Type: application/soap+xml; charset="utf-8" Content-Length: nnnn <?xml version='1.0' ?> <env:Envelope xmlns:env="http://www.w3.org/2003/05/soap-envelope"> <env:Body> <flightresponse xmlns:env=”urns”> <type>Singapore Airlines</type> <type>United Airlines</type> </flightresponse> </env:Body> </env:Envelope>
HTTP SOAP Fault Example Associated with a HTTP Post HTTP/1.1 500 Internal Server Error Content-Type: application/soap+xml; charset="utf-8" Content-Length: nnnn <?xml version='1.0' ?> <env:Envelope......... <env:Body> <env:Fault> ...... ......
Where is it used? • Key component of .Net Architecture • Google services through SOAP • Amazon store SOAP API • Flickr Services • SOAP with AJAX (Eg: W3C validator through Soap)
Alternatives • REST – Representative State Transfer • JSON RPC • XML RPC • WDDX – Web Distributed Data eXchange • LDO – Lightweight Distributed Objects • HTTP EXT (RFC 2744)
Links SOAP Links: • http://www.w3.org/TR/soap/ • http://searchwebservices.techtarget.com/searchWebServices/downloads/what_is_soap.swf • http://www.soaprpc.com/faq.html • http://www.w3schools.com/soap/ Soap Implementations: • Apache SOAP - http://ws.apache.org/soap/ • SOAP:Lite