Wednesday, September 10, 2014

REST API using Play! Framework in JSON and XML Format

Play Framework 

Play is heavily inspired by Ruby on Rails. Play supports both Scala and Java and enables developers to develop application faster by following convention over configurations.

The following post describes how we can expose REST API Endpoints very quickly supporting multiple format like JSON XML etc using Java with Play Framework.

Rest End Point Example 

Say We want the List of Users to be exposed as a JSON Response with an endpoint.
We will achieve the same with the following steps.
  • Step 1: Define the Routes and Controller Mapping
  • Step 2: Define Entity(Model Object)
  • Step 3: Define the Controller
  • Step 4: Start the Play Application


Step1: Define the  routes (/conf/routes)


Open the /conf/routes file and add the following line(s). 

GET /api/v1/User/details/all   controllers.MyApplicationApiV1.getUserList()
GET /api/v1/User/details/{userId}   controllers.MyApplicationApiV1.getUserDetails(userId: Long)


These entries in the routes file says that map
route /api/v1/User/details/all to controller method MyApplicationApiV1.getUserList
and
/api/v1/User/details/{userId} to controller method getUserDetails(userId: Long)


Step2: Define the Model Object



@Entity
@Table(name="test_users")
public class User extends Model{
 
 private String userName;
 
 private String userEmail;
 
 private Boolean notification;
 
 public String getUserName() {
  return userName;
 }
 public void setUserName(String userName) {
  this.userName = userName;
 }
 
 public String getUserEmail() {
  return userEmail;
 }
 public void setUserEmail(String userEmail) {
  this.userEmail = userEmail;
 }
 public Boolean getNotification() {
  return notification;
 }
 public void setNotification(Boolean notification) {
  this.notification = notification;
 }
 
 @Override
 public String toString() {
  return getUserEmail() + " - " + getUserName();
 }
 
}

This is a User Model Object annotated with JPA Annotations like Entity, Table. Note that This Entity Class Extends the play.db.jpa.Model Class. With Proper Database configurations we should be able to Persist this Entity in Database. The Controller Class will be able to retrieve these Entities and work with them.

Step3: Define the Controller

Now the Controller Section. In Play framework it is easy to expose any rest endpoints, we have to just implement the method(class) as per the routes definition.

This Controller has two methods  getUserList() and getUserDetails(userID) .
As per the routes definitions, Play will map the first endpoint
/api/v1/User/details/all to the method getUserList(). This controller method is loading all the  all the Users Objects and using the renderJSON method to render the response in JSON Format.   Second Method in the Controller getUserDetails(Long userId) maps to URI /api/v1/User/details/{userId} This method is loading only a specific User and Sending the response in JSON format.

Rendering the Response in XML Format.

If we want to render the response in XML Format we can use renderXml(s) rather then renderJSON(s) in the controller methods. Following is the example for rendering the response in XML format for the /api/v1/User/details/all End Point.


Step4: Start the Play Application

Once the Play Application is Started if we access the endpoints then it should render the response in JSON Format.


Note:

Note that Details like configuring Database, and configuring CRUD is not covered here. It is assumed that we already have working Database configured with Play App.

No comments :

Post a Comment