REST - Representational State Transfer
REST is an architectural style which is based on
web-standards and the HTTP protocol. REST was first described by Roy Fielding
in 2000. In a REST based architecture everything is a resource. A resource is
accessed via a common interface based on the HTTP standard methods. In a REST
based architecture you typically have a REST server which provides access to
the resources and a REST client which accesses and modifies the REST resources.
Every resource should support the HTTP common
operations. Resources are identified by global IDs (which are typically URIs).
REST allows that resources have different representations, e.g., text, XML,
JSON etc. The REST client can ask for a specific representation via the HTTP
protocol (content negotiation).
The PUT, GET, POST and DELETE methods
are typical used in REST based architectures. The following table gives an
explanation of these operations.
- GET
defines a reading access of the resource without side-effects. The
resource is never changed via a GET request, e.g., the request has no side
effects (idempotent).
- PUT
creates a new resource. It must also be idempotent.
- DELETE
removes the resources. The operations are idempotent. They can get
repeated without leading to different results.
- POST updates an existing resource or creates a new resource.
Features of RESTful web
services:
Resource identification
through URI:Resources are
identified by their URIs (typically links on internet). So, a client can
directly access a RESTful Web Services using the URIs of the resources (same as
you put a website address in the browser’s address bar and get some
representation as response).
Uniform interface:
Resources are manipulated using a fixed set of four create, read, update,
delete operations: PUT, GET, POST, and DELETE.Client-Server: A clear separation concerns is the reason behind this constraint. Separating concerns between the Client and Server helps improve portability in the Client and Scalability of the server components.
Stateless: each request from client to server must contain all the information necessary to understand the request, and cannot take advantage of any stored context on the server.
Cache: to improve network efficiency responses must be capable of being labeled as cacheable or non-cacheable.
Named resources - the system is comprised of resources which are named using a URL.
Interconnected resource representations - the representations of the resources are interconnected using URLs, thereby enabling a client to progress from one state to another.
Layered components - intermediaries, such as proxy servers, cache servers, gateways, etc, can be inserted between clients and resources to support performance, security, etc.
Self-descriptive messages: Resources are decoupled from their representation so that their content can be accessed in a variety of formats, such as HTML, XML, plain text, PDF, JPEG, JSON, and others.
A RESTFul web services are based on HTTP methods and
the concept of REST. A RESTFul web service typically defines the base URI for
the services, the supported MIME-types (XML, text, JSON, user-defined, ...) and
the set of operations (POST, GET, PUT, DELETE) which are supported.
Java defines REST support via the Java
Specification Request (JSR) 311. This specification is called JAX-RS
(The Java API for RESTful Web Services). JAX-RS uses annotations to define the
REST relevance of Java classes.
Jersey is the
reference implementation for the JSR 311 specification.
The Jersey implementation provides a library to
implement Restful webservices in a Java servlet container.
On the server side Jersey provides a servlet
implementation which scans predefined classes to identify RESTful resources. In
your web.xml configuration file your register this servlet for
your web application.
The Jersey implementation also provides a client
library to communicate with a RESTful web service.
The base URL of this servlet is:
http://your_domain:port/display-name/url-pattern/path_from_rest_class
This servlet analyzes the incoming HTTP request and
selects the correct class and method to respond to this request. This selection
is based on annotations in the class and methods.
A REST web application consists, therefore, out of
data classes (resources) and services. These two types are typically maintained
in different packages as the Jersey servlet will be instructed via the web.xml to
scan certain packages for data classes.
JAX-RS supports the creation of XML and JSON via the
Java Architecture for XML Binding (JAXB).
The most important annotations in JAX-RS are listed
in the following table.
Annotation
|
Description
|
@PATH(your_path)
|
Sets the path to base URL + /your_path. The base
URL is based on your application name, the servlet and the URL pattern from
the web.xml configuration file.
|
@POST
|
Indicates that the following method will answer to
an HTTP POST request.
|
@GET
|
Indicates that the following method will answer to
an HTTP GET request.
|
@PUT
|
Indicates that the following method will answer to
an HTTP PUT request.
|
@DELETE
|
Indicates that the following method will answer to
an HTTP DELETE request.
|
@Produces(MediaType.TEXT_PLAIN[, more-types])
|
@Produces defines which MIME type is delivered by
a method annotated with @GET. In the example text ("text/plain") is
produced. Other examples would be "application/xml" or
"application/json".
|
@Consumes(type[, more-types])
|
@Consumes defines which MIME type is consumed by
this method.
|
@PathParam
|
Used to inject values from the URL into a method
parameter. This way you inject, for example, the ID of a resource into the
method to get the correct object.
|
The complete path to a resource is based on the base
URL and the @PATh annotation in your class.
http://your_domain:port/display-name/url-pattern/path_from_rest_class
No comments:
Post a Comment