Http delete with REST
В настоящее время я использую Jersey Framework (реализация JAX-RS) для создания веб-служб RESTful. Классы ресурсов в проекте реализовали стандартные HTTP-операции - GET, POST и DELETE. Я пытаюсь выяснить, как отправить параметры запроса от клиента к этим методам.
Для GET это будет в строке запроса (извлечение с использованием @QueryParam
), а POST будет списком пары имя/значение (извлечение с помощью @FormParam
), отправленное с телом запроса. Я тестировал их с помощью HTTPClient и работал нормально. Для операции DELETE я не нахожу окончательных ответов на тип параметра/формат. Выполняет ли операция DELETE параметры в строке запроса (извлечение с использованием @QueryParam
) или в теле (извлечение с помощью @FormParam
)?
В большинстве примеров DELETE в Интернете я наблюдаю использование аннотации @PathParam
для извлечения параметров (это было бы снова из строки запроса).
Является ли это правильным способом передачи параметров методу DELETE? Я просто хочу быть осторожным здесь, чтобы не нарушать никаких принципов REST.
Ответы
Ответ 1
Да, это зависит от вас, но по мере того как я получаю идеологию REST, URL DELETE должен удалить что-то, возвращаемое запросом URL-адреса GET. Например, если
GET http://server/app/item/45678
возвращает элемент с идентификатором 45678,
DELETE http://server/app/item/45678
должен удалить его.
Таким образом, я думаю, что лучше использовать PathParam, чем QueryParam, когда QueryParam может использоваться для управления некоторыми аспектами работы.
DELETE http://server/app/item/45678?wipeData=true
Ответ 2
Метод DELETE должен использовать URL для идентификации ресурса для удаления. Это означает, что вы можете использовать параметры пути или параметры запроса.
Кроме того, нет правильного и неправильного способа создания URL-адреса в отношении REST.
Ответ 3
Вы можете использовать это как
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();
}
Ответ 4
@QueryParam
будет правильным. @PathParam
предназначен только для вещей перед любыми параметрами url (материал после "?" ). И @FormParam
предназначен только для представленных веб-форм, имеющих тип содержимого формы.