# JAX-RS

JAX-RS: Java API for RESTful Web Services es una API del lenguaje de programación Java que proporciona soporte en la creación de servicios web de acuerdo con el estilo arquitectónico Representational State Transfer (REST). JAX-RS usa anotaciones, introducidas en Java SE 5, para simplificar el desarrollo y despliegue de los clientes y puntos finales de los servicios web.
A partir de la versión 1.1 en adelante, JAX-RS es una parte oficial de Java EE 6. Una característica notable de ser parte oficial de Java EE es que no se requiere configuración para comenzar a usar JAX-RS. Para los entornos que no son Java EE 6 se requiere una (pequeña) entrada en el descriptor de despliegue web.xml.

## Especificación

JAX-RS proporciona algunas anotaciones para ayudar a mapear una clase recurso (un POJO) como un recurso web. Entre estas anotaciones se incluyen:
* @Path especifica la ruta de acceso relativa para una clase recurso o método.
* @GET, @PUT, @POST, @DELETE y @HEAD especifican el tipo de petición HTTP de un recurso.
* @Produces especifica los tipos de medios MIME de respuesta.
* @Consumes especifica los tipos de medios de petición aceptados.
Además, proporciona anotaciones adicionales para los parámetros de método para extraer información de la solicitud. Todas las anotaciones @*Param toman una clave de alguna forma que se utiliza para buscar el valor requerido.
* @PathParam enlaza el parámetro a un segmento de ruta.
* @QueryParam enlaza el parámetro al valor de un parámetro de consulta HTTP.
* @MatrixParam enlaza el parámetro al valor de un parámetro de matriz de HTTP.
* @HeaderParam enlaza el parámetro a un valor de cabecera HTTP.
* @CookieParam enlaza el parámetro a un valor de cookie.
* @FormParam enlaza el parámetro a un valor de formulario.
* @DefaultValue especifica un valor por defecto para los enlaces anteriores cuando la clave no es encontrada.
* @Context devuelve todo el contexto del objeto. (Por ejemplo: @Context HttpServletRequest request)

## JAX-RS 2.0

En enero de 2011, el PCJ formó un grupo de expertos para trabajar en JAX-RS 2.0. Los objetivos principales son (entre otros) una API de cliente común y el apoyo a Hypermedia siguiendo el principio HATEOAS de REST. En mayo de 2013 se publicó la versión final.

## Implementación

Entre las implementaciones de JAX-RS se incluyen:
* Apache CXF, un framework de servicios web de código abierto.
* Jersey, la implementación de referencia de Sun (ahora Oracle).
* RESTeasy, implementación de JBoss.
* Restlet, creado por Jerome Louvel, un pionero en frameworks de REST.
* Apache Wink, proyecto de Apache Software Foundation Incubator, el módulo del servidor implementa JAX-RS.
* JBoss, la librería org.jboss.resteasy da soporte de JAX-RS sobre la plataforma JBoss.

### Jersey

De acuerdo con el Tutorial de Java EE 6, Volumen 1: Jersey es la implementación de referencia de calidad de producción de Sun para JSR 311: JAX-RS: The Java API for RESTful Web Services. Jersey implementa soporte para las anotaciones definidas en la JSR-311, lo que facilita a los desarrolladores crear servicios web RESTful con Java y la JVM de Java. Jersey también añade características adicionales no especificadas por la JSR.