REST stands for REpresentational State Transfer. REST is an
architectural style. HTTP is a protocol which contains the set of REST
architectural constraints.
Fundamentals:
·
Everything in REST is considered as a resource.
·
Every resource is identified by an URI.
·
Uses uniform interfaces. Resources are handled
using POST, GET, PUT, DELETE operations which are similar to create, read,
update and delete (CRUD) operations.
·
Be stateless. Every request is an independent
request. Each request from client to server must contain all the information
necessary to understand the request.
·
Communications are done via representations.
E.g. XML, JSON
Implementations:
Jersey framework is the reference implementation JAX-RS API.
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.
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).
Important annotations in
JAX-RS:
Annotations
|
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])
|
Defines
which MIME type is delivered by a method annotated with @GET. Like
“text/plain”, “application/xml”, “application/json”
|
@Consumes(type[, more-types])
|
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.
|
@QueryParam
|
Used to inject query parameters into method parameter
|
@Provider
|
The @Provider annotation is used for anything that is of interest to the JAX-RS
runtime, such as MessageBodyReader and MessageBodyWriter. For HTTP requests, the MessageBodyReader is used to map an HTTP request entity body to method parameters. On the response side, a return value is mapped to an HTTP response entity body by using a MessageBodyWriter. |
@DefaultValue
|
To give default value for a method path or query parameter if it is not present in URI
|
@MatrixParam, @HeaderParam, @CookieParam, and @FormParam
|
Cookie parameters, indicated by decorating the parameter with javax.ws.rs.CookieParam,
extract information from the cookies declared in cookie-related HTTP headers.Header parameters, indicated by decorating the parameter with javax.ws.rs.HeaderParam, extract information from the HTTP headers.Matrix parameters, indicated by decorating the parameter with javax.ws.rs.MatrixParam, extract information from URL path segments. Form parameters, indicated by decorating the parameter with javax.ws.rs.FormParam, extract information from a request representation that is of the MIME media type application/x-www-form-urlencoded |
@Encoded
|
The @javax.ws.rs.Encoded annotation can be used on a class, method, or param. By default,
inject @PathParam and @QueryParams are decoded. By additionally adding the @Encoded annotation, the value of these params will be provided in encoded form. public String get(@PathParam("param") @Encoded String param) {...} |
@HEAD
|
The HEAD verb is used to issue a request for a resource
without actually retrieving it. It is a way for a client to check for the existence of a resource and possibly discover metadata about it. |
@OPTIONS
|
The OPTIONS verb is also used to interrogate a server
about a resource by asking what other verbs are applicable to the resource. |
- Apache cxf
- Restlet
- Resteasy
Comments
Post a Comment