GET /books/{bookId}/authors/{authorId}
Retorna un objeto Author asociado a un objeto Book en representación basic.
Parámetros
Nombre | Ubicación | Descripción | Requerido | Esquema |
---|---|---|---|---|
bookId | Path | ID del objeto book a consultar | Sí | Integer |
authorId | Path | ID del objeto author a consultar | Sí | Integer |
Respuesta
Código | Descripción | Cuerpo |
---|---|---|
200 | OK | Objeto author en representaciones basic |
404 | No existe un objeto author con el ID solicitado asociado al objeto book indicado | Mensaje de error |
500 | Error interno | Mensaje de error |
Implementación del servicio rest
Para implementar el servicio GET /books/{bookId}/authors/{authorId}
Una vez el front envía la petición, el servlet de JAX-RS la recibe. Basándose en la URL solicitada (api/books/{bookId}/authors/{authorId}
) y en el método HTTP (GET
), JAX-RS busca una clase con la anotación @Path('books')
y que tenga un método con la anotación @GET
y @Path("{bookId: \\d+}/authors/{authorId: \\d+}")
, el cual será ejecutado para responder a la solicitud.
@Path("books")
@Consumes(MediaType.APPLICATION_JSON)
@Produces(MediaType.APPLICATION_JSON)
public class BookResource {
@Inject
private IBookLogic bookLogic;
// ...
@GET
@Path("{bookId: \\d+}/authors/{authorId: \\d+}")
public AuthorDTO getAuthors(@PathParam("bookId") Long bookId, @PathParam("authorId") Long authorId) {
// Implementación
}
//...
}
El método getAuthors() retorna un objeto de AuthorDTO.
Invocación de API de lógica
Inmediatamente se recibe la petición, el servicio de JAX-RS invoca a la capa lógica. Para esto, se inyectó una instancia de IBookLogic
, cuya inicialización es resuelta por el contenedor. La capa de lógica retorna un objeto AuthorEntity que debe ser convertido a AuthorDTO.
@Path("books")
@Consumes(MediaType.APPLICATION_JSON)
@Produces(MediaType.APPLICATION_JSON)
public class BookResource {
@Inject
private IBookLogic bookLogic; // Inyección del bean de lógica
// ...
@GET
@Path("{bookId: \\d+}/authors/{authorId: \\d+}")
public AuthorDTO getAuthors(@PathParam("bookId") Long bookId, @PathParam("authorId") Long authorId) {
AuthorEntity author = bookLogic.getAuthor(bookId, authorId); // Invocación de la lógica
return AuthorConverter.fullEntity2DTO(author); // Conversión a AuthorDTO
}
//...
}
Cuando el servicio recibe la respuesta, necesita serializarla en formato JSON para poder transmitirla con el protocolo HTTP. Aquí es donde JAX-B entra en acción. Este puede serializar los DTO a JSON, mapeando los atributos del objeto DTO a propiedades del objeto JSON. Así, cada método accesor (getter) es mapeado a una propiedad del JSON. En este caso, book quedaría como un objeto JSON, donde cada propiedad accesible con un get, está disponible como atributo del JSON.
En el front-end, $http
recibe la respuesta y la pone a disposición del promise como argumento. De esta manera el controlador puede usar los datos de la misma para ejecutar tareas de manera asíncrona.
Actualmente este servicio no es utilizado por el frontend