Какой HTTP код ответа должен вернуться при успешной регистрации и при попытке зарегистрировать существующего пользователя
Что проверяют
Знаете ли вы семантику кодов и умеете ли превратить её в проверки. Следом обычно просят набросать тест-кейсы на регистрацию или спрашивают, что делать, если разработчик возвращает 200 на всё.
Как отвечать
Базовый ответ короткий:
- успешная регистрация:
201 Created, в теле созданный пользователь или его id, желательно заголовокLocationс адресом нового ресурса.200 OKтоже встречается и ошибкой не будет, если так записано в контракте; - пользователь уже есть:
409 Conflict, запрос противоречит текущему состоянию данных. Часть команд отдаёт400или422с кодом ошибки в теле, это рабочий вариант, если правило единое для всего API.
Дальше покажите, что для тестировщика источник истины это спецификация, а не личное мнение: OpenAPI, требования, договорённость с командой. Расхождение с контрактом это баг, расхождение с RFC повод для обсуждения.
Упомяните безопасность. Ответ «такой email уже занят» позволяет перебором узнать, кто зарегистрирован. Поэтому некоторые сервисы на оба случая отвечают одинаково, например 202 Accepted и письмом на почту, а о конфликте узнаёт только владелец ящика. Если в требованиях так, 409 ждать не нужно.
Что проверить кроме кода: тело ответа и формат ошибки, отсутствие второй записи в базе, регистр и пробелы в email (User@Mail.ru и user@mail.ru с пробелом в конце), два одновременных запроса с одинаковыми данными: один получает 201, второй 409, дубля быть не должно. Инструменты: Postman, curl, в автотестах pytest с requests или REST Assured.
Где спотыкаются
Проверяют только статус-код. Сервер может вернуть 201 и не сохранить пользователя или вернуть 409 и всё равно создать дубль.
Путают 409 с 403 Forbidden или 401 Unauthorized. Регистрация существующего пользователя не имеет отношения к правам доступа.
Не проверяют повтор с другим регистром email и параллельные запросы. Именно там чаще всего находят дубли, потому что проверка «есть ли такой» и вставка выполняются не атомарно.