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