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 Integer
authorId Path ID del objeto author a consultar 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

results matching ""

    No results matching ""