Какие статус коды ожидаются при работе с календарем?
Что проверяют
Знаете ли вы HTTP-коды не списком, а в привязке к операциям над событиями, и умеете ли строить по ним проверки. Следом обычно просят назвать негативные сценарии для создания встречи или объяснить разницу между 401 и 403.
Как отвечать
Идите по операциям и сразу называйте сценарий:
- 200 OK: получили события за период или обновили событие через
PUT/PATCHи получили его в теле; - 201 Created: событие создано через
POST, в ответе ждёмidнового ресурса или заголовокLocation; - 204 No Content: событие удалено, тела нет;
- 400 Bad Request: запрос не разобрать: битый JSON, дата не в ISO 8601;
- 422 Unprocessable Content: запрос разобран, но нарушает правила: конец раньше начала, 31 апреля, кривое правило повторения. Некоторые API отдают тут 400, решает контракт;
- 401 и 403: первый означает, что нет токена или он истёк, второй, что пользователь известен, но прав нет. Например, он правит календарь с доступом только на чтение;
- 404 Not Found: события нет или оно удалено. Иногда 404 отдают и на чужое событие, чтобы не раскрывать его существование;
- 409 Conflict: пересечение с занятым слотом переговорки или конфликт версий при одновременной правке;
- 412 Precondition Failed: запрос с
If-Matchи устаревшимETag; - 429 Too Many Requests: превышен лимит, проверяем заголовок
Retry-After; - 500 и 503: ошибка сервера и временная недоступность. Их не «ожидают», а ловят как дефект.
Добавьте риски именно календаря: часовые пояса и переход на летнее время, 29 февраля, повторяющиеся события и удаление одного экземпляра серии, события через полночь. Если API построен на CalDAV, там встречается 207 Multi-Status.
Где спотыкаются
Проверяют только код. Ответ 201 со сдвинутым на часовой пояс временем в теле остаётся багом, поэтому сверяют тело, заголовки и состояние после повторного GET.
Путают 401 и 403 и принимают любой из них как правильный. Это разные сценарии, и тест должен ждать конкретный код из спецификации.
Считают 500 нормальным ответом на кривые данные. Невалидный ввод должен давать 4xx, а 500 на нём означает, что сервер не валидирует запрос.