SOAP vs REST

20
Dec 7, 2007 Can you read this? If not, please sit closer. Thank you.

description

Dec 7, 2007. SOAP vs REST. Can you read this? If not, please sit closer. Thank you. XML RPC (1998). Request < methodCall > < methodName > doSomeWork < params > < param > < int >40 < param > - PowerPoint PPT Presentation

Transcript of SOAP vs REST

Page 1: SOAP  vs  REST

Dec 7, 2007

Can you read this? If not, please sit closer. Thank you.

Page 2: SOAP  vs  REST

XML RPC (1998)

Page 3: SOAP  vs  REST

<?xml version="1.0"?><soap-env:envelope soap-env:encodingStyle="http://schemas.xmlsoap.org/soap/encoding/" xmlns:soap-env="http://schemas.xmlsoap.org/soap/envelope/" xmlns:soap-enc="http://schemas.xmlsoap.org/soap/encoding/" xmlns:xsd="http://www.w3.org/1999/XMLSchema" xmlns:xsi="http://www.w3.org/1999/XMLSchema-instance">

<soap-env:header>...

</soap-env:header><soap-env:body>

<m:doSomeWork xmlns:m="http://www.lab49.com/"><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="http://schemas.xmlsoap.org/soap/encoding/" xmlns:soap-env="http://schemas.xmlsoap.org/soap/envelope/" xmlns:soap-enc="http://schemas.xmlsoap.org/soap/encoding/" xmlns:xsd="http://www.w3.org/1999/XMLSchema" xmlns:xsi="http://www.w3.org/1999/XMLSchema-instance">

<soap-env:body><m:doSomeWorkResponse xmlns:m="http://www.lab49.com/">

<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>

Early SOAP (2000) “section 5 encoding”

Page 4: SOAP  vs  REST

SOAP fancy encoding rules

<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>mailto:[email protected]</email><web>http://www.henryford.com</web>

</e:Address>

References:

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>

Page 5: SOAP  vs  REST

<?xml version="1.0"?><soap-env:envelope soap-env:encodingStyle="http://schemas.xmlsoap.org/soap/encoding/" xmlns:soap-env="http://schemas.xmlsoap.org/soap/envelope/" xmlns:xsd="http://www.w3.org/1999/XMLSchema" xmlns:xsi="http://www.w3.org/1999/XMLSchema-instance">

<soap-env:header>...

</soap-env:header><soap-env:body>

… your XML Schema compliant document goes here …

</soap-env:body></soap-env:envelope>

Document/literal (2003): Forget all the fancy encoding rules

Page 6: SOAP  vs  REST

<?xml version="1.0"?><soap-env:envelope soap-env:encodingStyle="http://schemas.xmlsoap.org/soap/encoding/" xmlns:soap-env="http://schemas.xmlsoap.org/soap/envelope/" xmlns:soap-enc="http://schemas.xmlsoap.org/soap/encoding/" xmlns:xsd="http://www.w3.org/1999/XMLSchema" xmlns:xsi="http://www.w3.org/1999/XMLSchema-instance">

<soap-env:header>...

</soap-env:header><soap-env:body>

<m:doSomething xmlns:m=“http://lab49.com/”><foo>

… XML Schema compliant value…… XML Schema compliant value……

</foo><bar>

… XML Schema compliant value……

</bar></m:doSomething>

</soap-env:body></soap-env:envelope>

I want my, I want my RPC (rpc/literal)

Namespace does nothave to be the sameas the parameter values

Argument elements don’teven have a namespace

Lets you model procedure calls, but can’t validate SOAP body with an XML Schema

Page 7: SOAP  vs  REST

SOAP encoding convention line-up circa 2003

1. 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?

Page 8: SOAP  vs  REST

Wrapped document literal style (2005)

<?xml version="1.0"?><soap-env:envelope soap-env:encodingStyle="http://schemas.xmlsoap.org/soap/encoding/" xmlns:soap-env="http://schemas.xmlsoap.org/soap/envelope/" xmlns:soap-enc="http://schemas.xmlsoap.org/soap/encoding/" xmlns:xsd="http://www.w3.org/1999/XMLSchema" xmlns:xsi="http://www.w3.org/1999/XMLSchema-instance">

<soap-env:header>...

</soap-env:header><soap-env:body>

<m:doSomething xmlns:m=“http://lab49.com/”><m:foo>

…</m:foo><m:bar>

…</m:bar>

</m:doSomething></soap-env:body>

</soap-env:envelope>

Entire body complies with an XML Schemacontaining element doSomething containinga sequence of elements foo and bar

Page 9: SOAP  vs  REST

Handy summary

SchemeRatin

gWhy?

rpc/encoded

(1998)BAD

Because “encoded” means “section 5 encoding” and that hairy scheme has been displaced by XML Schemas

doc/literal(2003)

BESTSend an XML Schema compliant document, get one back. Awesome.

rpc/literal(2003)

BADFailed attempt to reconcile document style with RPC.

wrapped/literal(2005)

GOODSuccessful attempt to reconcile document style with RPC.

Page 10: SOAP  vs  REST

Web Service Definition Language (WSDL 1.1)

Wrapped style. Notice the operationhas one message part called “parameters”which is an XML sequence of the args

Page 11: SOAP  vs  REST

WSDL IS IMPORTANT

Page 12: SOAP  vs  REST

Code first / WSDL first decision algorithm

Will other projects be using these

services? i.e. is this part of an

SOA?

Will other projects be using these

services? i.e. is this part of an

SOA?

Yes

Write WSDL first.Think through interfaces carefully, planfor backward compatibility, write lots of

comments, and maintain in source control.

No Are you in a great hurry?

Are you in a great hurry?

Yes

Write code first and use

doc/literal style. i.e. Every

method has one arg. Use

annotations to name everything

and reviewWSDL afterward.

No

Write code first inwrapped/literal style, i.e. Use

annotations to name everything and review WSDL

afterward.

Page 13: SOAP  vs  REST

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-*

Page 14: SOAP  vs  REST

The SOAP way of thinking

Page 15: SOAP  vs  REST

In the meantime…

Page 16: SOAP  vs  REST

Will SOAP collapse under its own weight?

Page 17: SOAP  vs  REST

Complexity

Low High

SOAP

REST?

Page 18: SOAP  vs  REST

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

Page 19: SOAP  vs  REST

In conclusion

For enterprise apps, default to SOAP.

But if (like Amazon.com) 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

Page 20: SOAP  vs  REST

Questions?