Я разрабатываю RESTful API, который использует коды состояния и глаголы HTTP в качестве ключевых компонентов при общении.
На религиозном уровне это на стороне ревности RESTafarian.
Правило для определения кодов состояния HTTP было этот график или аналогичные ресурсы.
-
GET /api/documents/1
-401
Пользователь не выполнил вход -
GET /api/documents/1
-200
Пользователь имеет разрешение -
GET /api/documents/1
-403
Пользователь не имеет разрешения -
DELETE /api/documents/1
-204
У пользователей есть разрешение -
DELETE /api/documents/1
-403
Пользователь не имеет разрешения -
GET /api/documents/2
-404
Пользовательское разрешение нерелевантно, ресурс не существует -
DELETE /api/documents/2
-404
Пользовательское разрешение не имеет значения, ресурс не существует -
DELETE /api/documents/1
-404
У пользователей есть разрешение, уже удаленный ресурс -
DELETE /api/documents/1
-404
У пользователей нет разрешения, уже удаленный ресурс
Цель:
- Согласованность использования
- Не предоставлять частную информацию через ошибки
- Правильное использование кодов состояния для кэшей клиента или среднего уровня
- Сбой раньше, продолжайте поиск до минимума
В этой ситуации есть много разных кодов статуса, которые вы выбрали из (404, 403, 410, 405), и в моем случае я пошел с 403 на существующий ресурс, если его не ваш, чтобы не очистить кеш, а 404 на всех несуществующих ресурсах, чтобы сообщить клиентам уничтожить эти данные.
Но мне не нравится переход с 403 на 404 на ресурсы, которые не принадлежат вам.
Мне интересно услышать от других, как вы решили этот прецедент, или вообще какие коды состояния, которые вы считаете нужным отправлять во все недействительные вызовы DELETE, поскольку я считаю это одним из самых сложных, с чем вам следует поговорить.
(Многие обсуждения и ответы в REST в Интернете в целом просто "Бросьте 400 плохих запросов, никого не волнует", у меня нет проблем, требующих быстрого исправления или прагматичного взлома.)