Что нужно сделать в команде, если GET запрос должен создавать нового клиента вместо получения
Что проверяют
Отличаете ли вы дефект от осознанного решения и понимаете ли семантику методов HTTP настолько, чтобы обосновать претензию. Заодно смотрят, как вы разговариваете с разработчиком и аналитиком, когда неправильным выглядит само требование.
Как отвечать
Сначала факты: GET по спецификации безопасный метод, он не должен менять состояние на сервере, и он идемпотентен. Создание ресурса через GET нарушает именно безопасность, и это не стилевое замечание, а дефект с понятными последствиями:
- ответ закэширует браузер, прокси или сеть доставки, и клиент создастся не тогда, когда ожидали, либо не создастся вовсе;
- повтор при обрыве, предзагрузка ссылки, обход ботом и открытие из истории плодят дубли;
- параметры уезжают в адресную строку, а значит в логи, в историю и в заголовок источника перехода;
- запрос выполняется простой ссылкой, и защита от подделки межсайтовых запросов на нём не работает.
Порядок действий такой: воспроизвести и зафиксировать, затем сверить с требованиями и описанием API. Если создание через GET записано и в спецификации, дефект заводится на неё, а не на код. Дальше обсуждение с аналитиком и разработчиком: перевести создание на POST, старый адрес при необходимости оставить на время с планом вывода. После правки проверить заголовки кэширования и добавить в регресс проверку на дубли.
Где спотыкаются
Молча заводят баг на разработчика и уходят. Если требование написано так же, задача вернётся с ответом «работает по спецификации», и время потеряно: сначала выясняют, где источник, в коде или в требованиях.
Путают безопасность и идемпотентность. POST тоже меняет состояние и при этом идемпотентным не является, так что аргумент, построенный на одной идемпотентности, легко разбивается встречным вопросом.
Ограничиваются ссылкой на стандарт и не называют последствий. Решение принимается по риску, поэтому дубли клиентов, кэширование ответа и утечка параметров в логи убеждают команду гораздо лучше, чем слово «неправильно».