Definición de las cabeceras y códigos de respuestas HTTP para aplicaciones RESTful

Las cabeceras y los códigos de estado HTTP resultan útiles como ayuda para programas intermediarios y clientes a la hora de comprender la información sobre solicitudes y respuestas de aplicaciones. Las cabeceras HTTP contienen información de metadatos. Los códigos de estado HTTP proporcionan información de estado sobre la respuesta.

Antes de comenzar

Consulte la especificación 1.1 de HTTP para familiarizarse con las cabeceras HTTP y los códigos de estado HTTP.

Acerca de esta tarea

Las cabeceras HTTP contienen información de metadatos como, por ejemplo, información de autenticación de seguridad, el agente que se utiliza y los metadatos de control de la memoria caché. En la aplicación HTTP se definen cabeceras HTTP; sin embargo, puede utilizar cabeceras HTTP personalizadas, si fuera necesario.

Puede leer cabeceras HTTP a partir de la solicitud y establecer las cabeceras en la respuesta. Hay un conjunto de cabeceras de solicitud y respuesta comunes, pero también existen cabeceras de solicitud exclusivas y las cabeceras de respuesta exclusivas. JAX-RS proporciona la interfaz inyectable HttpHeaders y la anotación de parámetros @HeaderParam para leer cabeceras HTTP. Si se devuelve un objeto javax.ws.rs.core.Response desde un método de recursos, puede establecer las cabeceras HTTP en la respuesta. Además, puede establecer las cabeceras HTTP cuando se escribe una entidad utilizando la interfaz MessageBodyWriter.

Puede establecer códigos de estado de respuesta HTTP para ayudar a los programas cliente a comprender la respuesta. Mientras que las respuestas pueden contener un código de error en formato XML u otro formato, los programas cliente pueden entender de forma rápida y más fácil un código de estado de respuesta HTTP. La especificación HTTP define diversos códigos de estado que normalmente los clientes entienden.

Procedimiento

  • Para leer una cabecera de solicitud específica, añada un parámetro anotado @javax.ws.rs.HeaderParam.
    @javax.ws.rs.Path("/bookstore/books/{bookID}")
    public class Book {
        @javax.ws.rs.GET
        public String retrieveSpecificBookInformation(@javax.ws.rs.HeaderParam("User-Agent") String theUserAgent) {
            /* The book ID was sent in a HTTP request header with the name "bookID". */
        }
    }
  • Para leer cualquier cabecera de solicitud, utilice el objeto @javax.ws.rs.core.Context javax.ws.rs.core.HttpHeaders inyectado.
    @javax.ws.rs.Path("/bookstore/books/{bookID}")
    public class Book {
        @javax.ws.rs.GET
        public String retrieveSpecificBookInformation(@javax.ws.rs.core.Context HttpHeaders requestHeaders) {
            /* Call methods on "requestHeaders" to get any request header sent by the client. */
            List<String> bookIdValues = requestHeaders.getRequestHeader("User-Agent");
        }
    }
  • Para establecer un código de estado de respuesta o cabecera, devuelva un objeto javax.ws.rs.core.Response y la respuesta con el código de estado y las cabeceras adecuados.
    @javax.ws.rs.Path("/bookstore/books/{bookID}") public class Book {
        @javax.ws.rs.GET public javax.ws.rs.core.Response retrieveSpecificBookInformation() {
            return Response.status(200).header("responseHeaderName", "responseHeaderValue").header("anotherResponseHeaderName", "foo").build();
        }
    }

Resultados

Ha utilizado cabeceras HTTP para leer cabeceras de solicitudes y establecer códigos de estado de respuestas y cabeceras para aplicaciones web JAX-RS.