Implementación de la negociación de contenido en base a parámetros de solicitud
Las aplicaciones REST (Representational State Transfer) pueden devolver diferentes representaciones de recursos. Puede utilizar la negociación de contenido en base a patrones de solicitud para determinar el formato de contenido que se utiliza para intercambiar datos entre servidores y clientes.
Acerca de esta tarea
Los recursos pueden representar datos en formatos distintos. Puede implementar la negociación de contenido basada en URL, parámetros de solicitudes o cabeceras HTTP. En esta tarea se describe la negociación del contenido en base a los parámetros de solicitud para recibir diferentes formatos de datos.
Puede utilizar parámetros de solicitud, como los parámetros de consulta, para indicar el tipo de contenido del servidor que se debe devolver. Por ejemplo, si el valor del parámetro es xml, el servidor se espera que devuelva contenido XML. De forma similar, si el valor del parámetro es json, el servidor se espera que devuelva contenido JSON.
El uso de parámetros de solicitud reduce el número de URL, frente a la implementación de la negociación de contenido en función de los patrones de URL. Sin embargo, este método requiere el uso y el análisis de un parámetro en la implementación del método de recursos.
Procedimiento
En el ejemplo siguiente, los formatos de datos XML y JSON son aceptables, y el formato se especifica mediante un parámetro de consulta. De forma predeterminada, se devuelve XML. Una solicitud para /resources/resource?format=json provoca que el servidor devuelva el formato JSON; por ejemplo:
@Path("/resources")
public class Resource
{
@Path("{resourceID}")
@GET
public Response getResource(@PathParam("resourceID") String resourceID, @QueryParam("format") String format)
{
if (format == null || "xml".equals(format)) {
return Response.ok(/* entity in XML format */).type(MediaType.APPLICATION_XML).build();
} else if ("json".equals(format)) {
return Response.ok(/* entity in JSON format */).type(MediaType.APPLICATION_JSON).build();
}
return Response.notAcceptable(Variant.mediaTypes(MediaType.APPLICATION_XML_TYPE, MediaType.APPLICATION_JSON_TYPE).add().build()).build();
}
}
Resultados
Ha implementado la negociación de contenido utilizando los parámetros para determinar los formatos para recursos que representan los datos.