RESTful services are at the core of the Internet. Today, I as a programmer, will tell all my programming peers out there (among my readers, of course!); how RESTful services are so important and effective at the core functioning of the Internet industry.
RESTful services and its origin
When we say RESTful services, REST here means Representational state transfer.
To begin with, let’s find out where it all started. REST was a concept used and mentioned first by Roy Fielding in the year 2000.
REST was coined by Fielding in order to provide more advanced setup and characteristic to web services used during his time. SOAP was the technology used at that time.
There are some differences between SOAP and REST, however, we would not discuss it here.
Let’s see what REST is all about!
As mentioned in the Wikipedia,
The concept was coined based on the following characteristics – Performance, Scalability, Simplicity, Modifiability, Visibility, Portability, and Reliability.
Usually (but not always), RESTful services communicate and work using the HTTP protocol and the HTTP verbs GET, PUT, POST and DELETE. These verbs are the mechanism that web browsers use in order to retrieve web pages and send data to the server.
Representational State Transfer, actually defines the beautiful, systematic and streamlined manner in which users access the WWW by using links (which behave as state transition makers), which fetches the next state or resulting page according to the choice of state transfer made by the user.
RESTful services constraints
Constraints specified by Fielding in his theory, is what separates REST as a unique mechanism. Any service conforming to these constraints can be regarded as RESTful services and vice-versa.
Let’s look into the constraints –
- The client and server are kept absolutely into separate spaces.
- This makes portability of the client much simpler.
- Clients do not worry about data storage at server end.
- Servers are more scalable and independent because they are not worried about client interfaces and UI.
- Both systems can be developed independently without thinking about the other, as long as the mid-interface is not affected.
- The client state or context is never stored at the server end, this further enhances the client server communication.
- Each client request contains all details including session state and details.
- Session states may be transferred to multiple resources for authentication or storage of session state for verification without interference from the server.
- When the client requests for a new state, it uses links to move from one state to another with the help of server provided data.
- Caching is possible but must be mentioned as usable or non-usable
- If mentioned properly, caching can enhance performance and scalability by saving state or session details and providing better client experience.
- Improves cache procedures.
- Client never knows whether intermediaries are linked to it before the main server, thus load balancing and caching is enhanced.
this feature makes the architecture uniform throughout the development tier. This is one of the most fundamental requisites of RESTful services.
How are RESTful services used?
This is an interesting and delightful question. You would love to know that RESTful services are part of the existing WWW itself. You may use it anywhere according to your choice and requirement. The manner in which you could use it, is mentioned as follows –
- You must have a base URI or in simple words a domain name or website name (for example – http://www.yourownblog.com/)
- You must have an Internet media type. An internet media type is what helps RESTful services transfer data. It is the format or the media in which data is sent and received. This must be universal and not dependent on certain platform or OS.
Usually JSON is the most used format. You may also use XML, Atom, microformats, etc.)
- All HTTP methods – GET, PUT, POST, DELETE. GET and POST methods are really common and you might have even used it before.
- Hypertext links (href) to change from one state to another.