Successfully reported this slideshow.
We use your LinkedIn profile and activity data to personalize ads and to show you more relevant ads. You can change your ad preferences anytime.

Soap vs-rest


Published on

Published in: Technology
  • Be the first to comment

Soap vs-rest

  1. 1. Dec 7, 2007Can you read this? If not, please sit closer. Thank you.
  2. 2. XML RPC (1998)
  3. 3. Early SOAP (2000) “section 5 encoding”<?xml version="1.0"?><soap-env:envelope soap-env:encodingStyle="" xmlns:soap-env="" xmlns:soap-enc="" xmlns:xsd="" xmlns:xsi=""> <soap-env:header> ... </soap-env:header> <soap-env:body> <m:doSomeWork xmlns:m=""> <foo xsi:type="xsd:int">40</foo> <bar>-12.53</bar> </m:doSomeWork> </soap-env:body></soap-env:envelope><?xml version="1.0"?><soap-env:Envelope soap-env:encodingStyle="" xmlns:soap-env="" xmlns:soap-enc="" xmlns:xsd="" xmlns:xsi=""> <soap-env:body> <m:doSomeWorkResponse xmlns:m=""> <soap-enc:array soap-enc:arrayType="xsd:ur-type[2]"> <baz xsi:type="xsd:int">12345</baz> <quux xsi:type="xsd:string">Something here</quux> </soap-enc:array> </m:doSomeWorkResponse> </soap-env:Body></soap-env:Envelope>
  4. 4. SOAP fancy encoding rulesReferences: <e:Book> <title>My Life and Work</title> <author href="#Person-1"/> </e:Book> <e:Person id="Person-1"> <name>Henry Ford</name> <address href="#Address-2"/> </e:Person> <e:Address id="Address-2"> <email></email> <web></web> </e:Address>Sparse arrays: <SOAP-ENC:Array SOAP-ENC:arrayType="xsd:string[,][4]"> <SOAP-ENC:Array href="#array-1" SOAP-ENC:position="[2]"/> </SOAP-ENC:Array> <SOAP-ENC:Array id="array-1" SOAP-ENC:arrayType="xsd:string[10,10]"> <item SOAP-ENC:position="[2,2]">Third row, third col</item> <item SOAP-ENC:position="[7,2]">Eighth row, third col</item> </SOAP-ENC:Array>
  5. 5. Document/literal (2003): Forget all the fancy encoding rules<?xml version="1.0"?><soap-env:envelope soap-env:encodingStyle="" xmlns:soap-env="" xmlns:xsd="" xmlns:xsi=""> <soap-env:header> ... </soap-env:header> <soap-env:body> … your XML Schema compliant document goes here … </soap-env:body></soap-env:envelope>
  6. 6. I want my, I want my RPC (rpc/literal) <?xml version="1.0"?> <soap-env:envelope soap-env:encodingStyle="" xmlns:soap-env="" xmlns:soap-enc="" xmlns:xsd="" xmlns:xsi=""> <soap-env:header> ... Namespace does not </soap-env:header> have to be the same <soap-env:body> <m:doSomething xmlns:m=“”> as the parameter values <foo> … XML Schema compliant value… … XML Schema compliant value… … </foo> Argument elements don’t <bar> even have a namespace … XML Schema compliant value… … </bar> </m:doSomething> </soap-env:body> </soap-env:envelope>Lets you model procedure calls, but can’t validate SOAP body with an XML Schema
  7. 7. SOAP encoding convention line-up circa 20031. RPC/encoded (the original)2. Document/literal (based on XML Schema, but doesn’t model RPC)3. RPC/literal (adds RPC modeling, breaks XML Schema validation)Can’t we model RPC without breaking Schema validation?
  8. 8. Wrapped document literal style (2005)<?xml version="1.0"?><soap-env:envelope soap-env:encodingStyle="" xmlns:soap-env="" xmlns:soap-enc="" xmlns:xsd="" xmlns:xsi=""> <soap-env:header> ... </soap-env:header> <soap-env:body> <m:doSomething xmlns:m=“”> <m:foo> … Entire body complies with an XML Schema </m:foo> <m:bar> containing element doSomething containing … a sequence of elements foo and bar </m:bar> </m:doSomething> </soap-env:body></soap-env:envelope>
  9. 9. Handy summary Scheme Rating Why? rpc/encoded Because “encoded” means “section 5 encoding” and that hairy BAD (1998) scheme has been displaced by XML Schemas doc/literal Send an XML Schema compliant document, get one back. BEST (2003) Awesome. rpc/literal BAD Failed attempt to reconcile document style with RPC. (2003)wrapped/literal GOOD Successful attempt to reconcile document style with RPC. (2005)
  10. 10. Web Service Definition Language (WSDL 1.1) Wrapped style. Notice the operation has one message part called “parameters” which is an XML sequence of the args
  12. 12. Code first / WSDL first decision algorithm Write code first and use doc/literal style. Will other projects i.e. Every method No Are you in a No be using these has one arg. Use services? i.e. is this great hurry? annotations to name part of an SOA? everything and review WSDL afterward. Yes Yes Write code first in wrapped/literal style, i.e. Use annotations to name everything and review WSDL afterward. Write WSDL first. Think through interfaces carefully, plan for backward compatibility, write lots ofcomments, and maintain in source control.
  13. 13. Goodies• WS-Security (message integrity, confidentiality, and authentication)• WS-ReliableMessaging• WS-Routing (messaging patterns and routes)• WS-Eventing (pub/sub)• Many other incomprehensible extensions, collectively referred to as WS-*
  14. 14. The SOAP way of thinking
  15. 15. In the meantime…
  16. 16. Will SOAP collapse under its own weight?
  17. 17. ComplexityLow High SOAP ? REST
  18. 18. Comparison points• WSDL is a good idea for both SOAP and REST (not a long-term differentiator)• SOAP and REST both allow you to name resources with URIs (also not a long-term differentiator)• REST adds value to the entire web (we don’t care)• REST is easier to program (not for long)• SOAP provides better support for async messaging• SOAP is better if developers and network administrators don’t have a good relationship
  19. 19. In conclusionFor enterprise apps, default to SOAP.But if (like you•are catering to people who are not making a large investment in connecting to your service•have control over your network•are trying to reach a broad audience… then go with REST.Expires: Mon, 31 Mar 2008 20:00:00 GMT
  20. 20. Questions?