These questions can pop up in any Web project and must be clarified before the initial implementation. Let's start by understanding the concepts of REST and SOAP and draw comparisons about their differences.
Basic Concepts
Representational State Transfer is an architectural style for distributed hypermedia systems.
REST is a style of architecture with a set of constraints which allows data transfer over a standardized interface, such as HTTP. REST relies on a simple URI to make a request.
REST is resource based, which means that in a REST service we will work with "things" to define the service. The clients can utilize the REST resource to access a unique URI and the resource is then returned back to the caller. REST uses nouns (i.e. user, country, state, etc.) to define what kind of resource the service should provide. The representation of the resources is not tied to the service itself, which means that the representation of the resource has a free format and can be represented by multiple kinds of data formats (i.e. JSON, XML, CVS, etc.). Below we have an example of REST representation:
Resource: users
Service: contact information (GET)
Representation:
- name, address, e-mail
- JSON or XML format
URI: http://rest.org/users
The REST architecture style has six constraints, which are design rules applied to the architecture and which establish the distinct characteristic of REST services. So, in order to define a REST architecture service, it must have the following architectural characteristics that make any web service a true RESTful API:
Simple Object Access Protocol, as the name says, is a standard protocol intended to exchange structured messages in a decentralized, distributed environment.
SOAP is a protocol based on XML to exchange messages across the internet. It has a set of rules which define and describe the messaging format and processing rules for information exchanged between the sender and receiver. SOAP can use two different transfer protocols to exchange the messages: HTTP (Hypertext Transfer Protocol) and SMTP (Simple Mail Transport Protocol), but the most popular protocol used by SOAP services is HTTP. Below we have a SOAP Request message as well as an example of the SOAP message structure:
POST /soap/event HTTP/1.1
Content-Length: 309
SOAPAction: ”getEvent”
Content-Type: text/xml;charset=utf-8
Host: ems-sv258:1774
Connection: Keep-Alive
<?xml version="1.0" ?>
<soapenv:Envelope
xmlns:soapenv="http://schemas.xmlsoap.org/soap/envelope/"
xmlns:xsd="http://www.w3.org/2001/XMLSchema"
xmlns:ns1="http://soap.com/act">
<soapenv:Body>
<ans:getNote xmlns:ans="http://soap.com/act">
<eventID>1000</eventID>
</ans:getNote>
</soapenv:Body>
</soapenv:Envelope>
Since SOAP standards for message exchange are based on XML and usually use HTTP as a transport protocol, it is possible to communicate between different applications with different operational systems.
One specific characteristic of SOAP is the coupling between the service provider (server) and the service consumer (client). There is a rigid contract between the server and client in SOAP and the consumer must know the exact message structure to send to the server. If anything changes on either side, client or server, it will break the communication.
Another important characteristic of SOAP is its association with Web Service Description Language (WSDL). The WSDL has the description of SOAP service and how it works. This makes the client building process easier once IDEs and frameworks can be utilized to automate the implementation based on WSDL.
SOAP also has built-in error handling. When any message has an error or is missing required information, the error response message contains information about what is wrong and can be used by the client to fix the problem. This is very important to consumers when they are not the owner of the service, otherwise, the client won't be able to understand what is wrong with the request.
Comparison
SOAP and REST cannot truly be compared because one is a protocol and the other is an architecture. However, both have the objectives of communication between client and server and data exchange across the internet.
SOAP is the more popular choice for web services when compared to REST due to the restrictive XML messaging format. REST can be used with more lightweight data formats to exchange data. However, SOAP has some key advantages when compared to REST:
On the other hand, there are some advantages of REST when compared to SOAP:
Below we are trying to highlight some characteristics of SOAP and REST, given the similarities and differences of the technologies used by each:
SOAP | REST | |
Basic Definition | Protocol for Web Services | Web Service Architecture Style |
Transport Protocol Supported | HTTP and SMTP | HTTP |
Client/Server Coupling | High | Low |
Cache | Not allowed | Allowed |
Request State | Yes | No |
Input Message Format | XML | XML, JSON, MIME types, etc. |
Output Message Format | XML | XML, JSON, MIME types, etc. |
There are many factors to be considered when we are talking about REST and SOAP with regards to building web services. For any situation, these variables and requirements must be considered before choosing the best approach to adopt. There is no one best solution, but there is a better approach depending on each scenario. It is up to us, IT professionals, to know how to analyze the scenario and collaborate with stakeholders to develop the best solution.