Two methods for communication over the network are
Simple Object Access Protocol is a defined protocol used for communication. It is a protocol that defines a set of rules for communication using XML-based messaging. Microsoft developed SOAP as a solution to interact better with the Internet, succeeding its predecessors CORBA(Common Object Request Broker Architecture) and DCOM(Distributed Component Object Model).The reason behind SOAP being successful was that it used XML for communication unlike the binary system used by DCOM and CORBA.
SOAP was then handed over by Microsoft to Internet Engineering Task Force (IETF) that standardized the protocol and also developed it for expansion, which resulted in SOAP being extensible and support a lot of Web Service expansions.
SOAP implementation can be difficult in the sense where writing XML requests and responses can be a complicated task. This is purely because SOAP is intolerant to errors. As most developers understand, SOAP is not meant to be used over HTTP(Hyper Text Transfer Protocol) protocol, SOAP has found its implementation over SMTP and other protocols in programming languages like Python.
REpresentational State Transfer is not based on any protocol but has a standard architecture principle used to send data over standard protocols (HTTP). REST is a web service that is a result of the need of an alternative to the distributed computing based SOAP services.
Choose SOAP or REST?
Selecting the right web service can be one of the most challenging tasks. However, it is not about SOAP or REST but the implementation of the web service that plays an important role. In a particular scenario, SOAP is more dependable and useful whereas in some scenarios it might not be all that useful. Here are a few pointers on SOAP and REST that might help you choose the right web service.
1) SOAP is a heavy weight protocol but a distinct advantage is its language, platform and most importantly it is transport protocol independent.
2) It is highly extensible, supporting a big bunch of extensions from WS-*
3) The SOAP protocol is reliable and also that it is standardized.
4) The major and most important benefit is that it is designed for the distributed computing system.
5) SOAP is used widely for asynchronous processing of information over the internet.
6) SOAP is compatible and secure, this ensures SOAP services are not blocked firewall.
7) Several languages supports automation of SOAP services.
1) REST is light-weight architecture.
2) REST requires no specific tools for writing as it is very easy to implement.
3) REST finds more usage in the device specific service implementation like for mobiles and PDA’s where there are overheads of adding the headers and parameters.
4) REST supports only standard methods. (GET, PUT, POST or DELETE).
5) REST is mostly based on the Application layer for implementation.
6) REST is a stateless protocol.
7) REST is fast and efficient but with a disadvantage of web caching.
Points to be noted –
Implementing REST for complex applications can sometimes be very difficult. This is basically because you need to implement all the major components like security, transaction, and addressing separately. SOAP is always an intelligent choice with increasing complexity. Also, SOAP is the best option when the application is based on internal API’s and the communication between the server-client is minimal. However, if the application is for developing third-party API’s or public API’s REST seems to be a better and efficient option.
These are some common scenarios where SOAP and REST are implemented. Other than these, the decision of using either SOAP or REST is based on the language that will be used, platform on which it will be used and also the requirement of the application.
Syntax and Examples
<?xml version="1.0"?> <soap:Envelope xmlns:soap="http://www.w3.org/2001/12/soap-envelope" soap:encodingStyle="http://www.w3.org/2001/12/soap-encoding"> <soap:Header> ... </soap:Header> <soap:Body> ... <soap:Fault> ... </soap:Fault> </soap:Body> </soap:Envelope>
A SOAP message contains the following elements
- A SOAP Envelope element indicating that the XML message is a SOAP request or response message.
- A SOAP Header element containing all headers and header information.
- A Body element containing the request and response elements.
- A Fault element containing status information including the error information if any.
- A SOAP message MUST be a XML- encoded message.
- A SOAP Envelope namespace MUST be a part of SOAP message.
- A SOAP encoding namespace MUST be used in the SOAP message.
- Any DTD reference or XML Processing Instruction MUST NOT be included in a SOAP message.
POST /InPrice HTTP/1.1 Host: www.bookprice.org Content-Type: application/soap+xml; charset=utf-8 Content-Length: nnn <?xml version="1.0"?> <soap:Envelope xmlns:soap="http://www.w3.org/2001/12/soap-envelope" soap:encodingStyle="http://www.w3.org/2001/12/soap-encoding"> <soap:Body xmlns:n="http://www. bookprice.org/book-price"> <n:GetBookPrice> <n:BookName>Learn SOAP and REST</n:BookName> </n:GetBookPrice> </soap:Body> </soap:Envelope>
HTTP/1.1 200 OK Content-Type: application/soap+xml; charset=utf-8 Content-Length: nnn <?xml version="1.0"?> <soap:Envelope xmlns:soap="http://www.w3.org/2001/12/soap-envelope" soap:encodingStyle="http://www.w3.org/2001/12/soap-encoding"> <soap:Body xmlns:n="http://www.bookprice.org/book-price"> <n:GetBookPriceResponse> <n:Price>$49</n:Price> </n:GetBookPriceResponse> </soap:Body> </soap:Envelope>
This example is basically an example of web service looks for book prices.
The request has four headers denoting that it is an HTTP method with POST, the second header denotes the host, the third header denotes the content-type of the SOAP body and the last header denotes the length of the content.
The SOAP body has the data that has to be sent.
The response has three headers, the first header is the status of the service response, the second header denotes the content type and the third header denotes the length content.
REST has no specific syntax but it has two things that need to be noted. The REST syntax requires a base URI with the hyperlinks to reference state or related resources. The data that has to be sent is an internet data type which can be plain text, XML or JSON (widely-used).