http удалить с REST - PullRequest
       1

http удалить с REST

12 голосов
/ 28 октября 2010

В настоящее время я использую Jersey Framework (реализацию JAX-RS) для создания веб-сервисов RESTful. Ресурсные классы в проекте реализовали стандартные операции HTTP - GET, POST & DELETE. Я пытаюсь выяснить, как отправить параметры запроса от клиента этим методам.

Для GET это будет в строке запроса (извлечение с использованием @QueryParam), а POST будет список пар имя / значение (извлечение с использованием @FormParam), отправленный вместе с телом запроса. Я проверил их с помощью HTTPClient и работал нормально. Для операции УДАЛИТЬ я не нахожу никаких окончательных ответов относительно типа / формата параметра. Получает ли операция DELETE параметры в строке запроса (извлечение с использованием @QueryParam) или в теле (извлечение с использованием @FormParam)?

В большинстве примеров DELETE в Интернете я наблюдаю использование аннотации @PathParam для извлечения параметров (это снова будет из строки запроса).

Это правильный способ передачи параметров в метод DELETE? Я просто хочу быть осторожным, чтобы не нарушать принципы REST.

Ответы [ 4 ]

18 голосов
/ 24 ноября 2010

Да, все зависит от вас, но когда я получаю идеологию REST, DELETE URL должен удалить что-то, что возвращается запросом GET URL. Например, если

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

возвращает товар с идентификатором 45678,

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

должен удалить его.

Таким образом, я думаю, что лучше использовать PathParam, чем QueryParam, когда QueryParam можно использовать для управления некоторыми аспектами работы.

DELETE http://server/app/item/45678?wipeData=true
12 голосов
/ 29 октября 2010

Метод DELETE должен использовать URL-адрес для определения ресурса, который нужно удалить. Это означает, что вы можете использовать либо параметры пути, либо параметры запроса. Кроме того, не существует правильного и неправильного способа создания URL в отношении REST.

3 голосов
/ 10 февраля 2016

Вы можете использовать как это

URL-адрес 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();
}
0 голосов
/ 28 октября 2010

@QueryParam будет правильным способом.@PathParam только для вещей перед любыми параметрами URL (вещи после '?').И @FormParam только для отправленных веб-форм, которые имеют тип содержимого формы.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...