GET /books

Retorna una colección de objetos Book en representación Basic Cada libro en la colección tiene embebida su editorial.

Parámetros

N/A

Respuesta

Código Descripción Cuerpo
200 OK Colección de representaciones Basic
409 La editorial asociada no existe Mensaje de error
500 Error Interno Mensaje de error

Implementación del servicio rest

Para implementar el servicio GET /books Una vez el front envía la petición, el servlet de JAX-RS la recibe. Basándose en la URL solicitada (api/books) 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, 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
    public List<BookDTO> getBooks() {
        logger.info("Se ejecuta método getBooks");
        List<BookEntity> books = bookLogic.getBooks();
        return BookConverter.listEntity2DTO(books);
    }

    //...
}

El método getBooks() retorna una lista de instancias de BookDTO.

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 una lista de instancias de la clase BookEntity que debe ser convertida a BookDTO.

@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
    public List<BookDTO> getBook() {
        logger.info("Se ejecuta método getBooks");
        List<BookEntity> books = bookLogic.getBooks(); // Invocación de la lógica
        return BookConverter.listEntity2DTO(books);
    }

    //...
}

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.

this.fetchRecords = function () {
    return svc.fetchRecords().then(function (response) {
        $scope.records = response.data;
        $scope.currentRecord = {};
        self.editMode = false;
        return response;
    }, responseError);
};

results matching ""

    No results matching ""