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