Можно ли построить RESTful сервис, использующий только HTTP метод DELETE?

«Можно ли построить RESTful сервис, использующий только HTTP метод DELETE?» — вопрос из категории Сети, который задают на 10% собеседований Java Разработчик. Ниже — развёрнутый ответ с разбором ключевых моментов.

Ответ

Нет, это противоречит принципам REST. REST (Representational State Transfer) опирается на использование семантики стандартных HTTP-методов для выполнения различных операций с ресурсами. Использование только DELETE сделает API нефункциональным и неидиоматичным.

Почему это плохая практика:

  • Нарушение конвенций: Каждый HTTP-метод имеет четкое назначение.
  • Потеря семантики: Клиенты (браузеры, библиотеки) ожидают определенного поведения от методов.
  • Сложность реализации: Вам придется передавать intent (действие "создать", "прочитать") в теле запроса или URL, что усложняет дизайн.
Стандартное соответствие HTTP-методов и операций CRUD в REST: HTTP Метод Операция CRUD Назначение в REST
GET Read Получение ресурса(ов)
POST Create Создание нового ресурса
PUT/PATCH Update Полное/частичное обновление ресурса
DELETE Delete Удаление ресурса

Пример корректного REST-контроллера (Spring):

@RestController
@RequestMapping("/api/books")
public class BookController {
    @GetMapping
    public List<Book> getAll() { /* ... */ }

    @PostMapping
    public Book create(@RequestBody Book book) { /* ... */ }

    @PutMapping("/{id}")
    public Book update(@PathVariable Long id, @RequestBody Book book) { /* ... */ }

    @DeleteMapping("/{id}")  
    public ResponseEntity<Void> delete(@PathVariable Long id) {  
        // Логика удаления
        return ResponseEntity.noContent().build();  
    }  
}