12
votes

HTTP Supprimer avec repos

J'utilise actuellement le cadre de Jersey (implémentation JAX-RS) pour la création de services Web reposants. Les classes de ressources du projet ont mis en place les opérations HTTP standard - Get, Post & Supprimer. J'essaie de déterminer comment envoyer des paramètres de demande du client à ces méthodes.

Pour obtenir, il serait dans la chaîne de requête (extraire à l'aide de @queryparam ) et postez une liste de paires nom / valeur (extraire à l'aide de @Formparam ) envoyé avec le corps de la demande. Je les ai testés à l'aide de httpClient et a fonctionné bien. Pour une opération de suppression, je ne trouve aucune réponse concluante sur le type / format de paramètre. Est-ce que la suppression d'opération reçoive des paramètres de la chaîne de requête (extraire à l'aide de @queryparam ) ou dans le corps (extrait à l'aide de @formParam )?

Dans la plupart des exemples de suppression sur le Web, j'observe l'utilisation de @pathparam annotation pour l'extraction de paramètres (ce serait à nouveau de la chaîne de requête).

est-ce la bonne façon de passer des paramètres à la méthode Supprimer? Je veux juste faire attention ici pour que je ne violaise pas de principes de repos.


0 commentaires

4 Réponses :


0
votes

@queryparam serait la bonne voie. @Pathparam est uniquement pour les choses avant tous les paramètres d'URL (trucs après le "?"). Et @formParam est uniquement destiné aux formulaires Web soumis qui ont le type de contenu de formulaire.


0 commentaires

14
votes

La méthode Suppr doit utiliser l'URL pour identifier la ressource à supprimer. Cela signifie que vous pouvez utiliser des paramètres de chemin ou des paramètres de requête. Au-delà, il n'y a pas de bonne et de mauvaise façon de construire une URL autant que le repos est concerné.


0 commentaires

19
votes

Oui, c'est à vous de décider, mais comme je reçois une idéologie de repos, supprimer l'URL devrait supprimer quelque chose qui est renvoyé par une demande d'URL Obtenir. Par exemple, si xxx pré>

renvoie l'élément avec ID 45678, p> xxx pré>

doit le supprimer. P>

Ainsi, je Pensez qu'il est préférable d'utiliser PathParam que QueryParam, lorsque QueryParam peut être utilisé pour contrôler certains aspects du travail. P>

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


1 commentaires

'? WIPEDATA = TRUE' est une mauvaise utilisation de la chaîne de requête. RFC 3986 SECTION 3.4 STATS "Le composant de requête contient des données non hiérarchiques qui, ainsi que des données dans la composante de chemin (section 3.3), sert à identifier une ressource dans le cadre du régime d'URI et de l'autorité de dénomination (le cas échéant)." Légèrement déroutant est RFC 7231 Section 4.2.1 Mention de "Par exemple, il est courant que le logiciel d'édition de contenu Web permet d'utiliser des actions dans des paramètres de requête, telles que" page? Do = supprimer "" que je dirais est également incorrecte.



3
votes

Vous pouvez utiliser comme celui-ci

​​URL est http: // YourApp / personne / personnage P >

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


0 commentaires