DELETE /books/{bookId}/authors/{authorId}
DELETE /books
Remueve un objeto author de la colección de autores en un objeto book
Parámetros
| Nombre | Ubicación | Descripción | Requerido | Esquema |
|---|---|---|---|---|
| bookId | Path | ID del objeto book asociado al objeto author | Sí | Integer |
| authorId | Path | ID del objeto author a remover | Sí | Integer |
Respuesta
| Código | Descripción | Cuerpo |
|---|---|---|
| 204 | Objeto removido | N/A |
| 500 | Error interno | Mensaje de error |
Implementación del servicio rest
Para implementar el servicio DELETE /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/{id}) y en el método HTTP (DELETE), JAX-RS busca una clase con la anotación @Path('books') y que tenga un método con la anotación @DELETE 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;
// ...
@DELETE
@Path("{bookId: \\d+}/authors/{authorId: \\d+}")
public void removeAuthors(@PathParam("bookId") Long bookId, @PathParam("authorId") Long authorId) {
// Implementación
}
//...
}
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 se encarga de eliminar el objeto de la base de datos.
@Path("books")
@Consumes(MediaType.APPLICATION_JSON)
@Produces(MediaType.APPLICATION_JSON)
public class BookResource {
@Inject
private IBookLogic bookLogic; // Inyección del bean de lógica
// ...
@DELETE
@Path("{bookId: \\d+}/authors/{authorId: \\d+}")
public void removeAuthors(@PathParam("bookId") Long bookId, @PathParam("authorId") Long authorId) {
bookLogic.removeAuthor(bookId, authorId);
}
//...
}
En el front-end, $http crea un promise para definir las tareas a ejecutar cuando se reciba una respuesta:
this.removeAuthor = function (index) {
bookSvc.removeAuthor($scope.refId, $scope.records[ index ].id).then(function () {
$scope.records.splice(index, 1);
}, responseError);
};