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);
};