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 предназначен только для представленных веб-форм, имеющих тип содержимого формы.