2010-10-28 23 views
10

Actualmente estoy usando Jersey Framework (implementación de JAX-RS) para construir servicios web RESTful. Las clases de recursos en el proyecto han implementado las operaciones HTTP estándar: GET, POST & DELETE. Estoy tratando de averiguar cómo enviar parámetros de solicitud del cliente a estos métodos.http delete con REST

Para GET estaría en la cadena de consulta (extraer usando @QueryParam) y POST sería la lista de pares nombre/valor (extraer usando @FormParam) enviado con el cuerpo de la solicitud. Los probé usando HTTPClient y funcionó bien. Para la operación DELETE, no encuentro ninguna respuesta concluyente sobre el tipo/formato del parámetro. ¿La operación SUPRIMIR recibe parámetros en la cadena de consulta (extraer usando @QueryParam) o en el cuerpo (extraer usando @FormParam)?

En la mayoría de los ejemplos de DELETE en la web, observo el uso de la anotación @PathParam para la extracción de parámetros (esto sería de nuevo desde la cadena de consulta).

¿Es esta la forma correcta de pasar parámetros al método DELETE? Solo quiero tener cuidado aquí para no estar violando ningún principio de REST.

Respuesta

0

@QueryParam sería la manera correcta. @PathParam es solo para cosas antes de cualquier parámetro de url (cosas después del '?'). Y @FormParam es solo para formularios web enviados que tienen el tipo de contenido del formulario.

10

El método DELETE debe usar la URL para identificar el recurso a eliminar. Esto significa que puede usar parámetros de ruta o parámetros de consulta. Más allá de eso, no hay una forma correcta ni incorrecta de construir una URL en lo que respecta a REST.

18

Sí, depende de usted, pero a medida que obtenga la ideología REST, ELIMINAR URL debería eliminar algo que se devuelve mediante una solicitud GET URL. Por ejemplo, si

GET http://server/app/item/45678 

vuelve elemento con id 45678,

DELETE http://server/app/item/45678 

debe eliminarlo.

Por lo tanto, creo que es mejor usar PathParam que QueryParam, cuando QueryParam se puede utilizar para controlar algunos aspectos del trabajo.

DELETE http://server/app/item/45678?wipeData=true 
+2

'? WipeData = true' es un mal uso de la cadena de consulta. rfc 3986 sección 3.4 establece "El componente de consulta contiene datos no jerárquicos que, junto con los datos en el componente de ruta (Sección 3.3), sirven para identificar un recurso dentro del alcance del esquema de URI y autoridad de denominación (si corresponde)". Un poco confuso es rfc 7231 sección 4.2.1 mencionando "Por ejemplo, es común que el software de edición de contenido basado en web use acciones dentro de los parámetros de consulta, como" page? Do = delete "" Lo que yo diría es también incorrecto – aaaaaa

3

Se puede utilizar como este URL

es http://yourapp/person/personid

@DELETE 
@Path("/person/{id}") 
@Produces(MediaType.APPLICATION_JSON) 
public Response deletePerson(@PathParam("id") String id){ 
    Result result = new Result(); 
    try{ 
     persenService.deletePerson(id); 
     result.setResponce("success"); 
    } 
    catch (Exception e){ 
     result.setResponce("fail"); 
     e.printStackTrace(); 
    } 
    return Response.status(200).entity(result).build(); 
} 
Cuestiones relacionadas