Исправьте статус HTTP для дублированного документа во внешней службе - PullRequest
0 голосов
/ 10 марта 2020

Я разрабатываю службу шлюза API для унаследованной услуги, клиент отправляет платежные поручения на шлюз, а шлюз отправляет заказ на устаревшую службу. Каждое платежное поручение поставляется с ключом отслеживания, с этим ключом устаревшая служба проверяет, дублирован ли заказ. Если заказ дублируется, устаревшая служба отправляет мне статус 200, и мне нужно найти свойство ответа в ответе, но клиент может изменить ключ отслеживания и повторить попытку, поэтому я подумал об изменении ответа на эту ошибку в шлюзе и не отвечает успешно, но я не совсем уверен, что это правильный путь и какую ошибку выдать клиенту, вначале я думал о BadGatewayException, поскольку ошибка в устаревшей службе.

Ответы [ 2 ]

1 голос
/ 10 марта 2020

Я думаю, что Http код состояния 409 подойдет в этом сценарии, потому что вы пытаетесь создать заказ, который уже существует на сервере. Поскольку изменение идентификатора отслеживания пользователем устраняет конфликт, я бы сказал, верните 409.

Обратитесь в документ за кодом состояния HTTP 409

Запрос не может быть выполнен из-за конфликт с текущим состоянием ресурса. Этот код разрешен только в ситуациях, когда ожидается, что пользователь сможет разрешить конфликт и повторно отправить запрос. Тело ответа ДОЛЖНО содержать достаточно информации, чтобы пользователь мог распознать источник конфликта. В идеале объект ответа должен включать в себя достаточно информации, чтобы пользователь или пользовательский агент мог решить проблему; однако это может быть невозможным и необязательным. Скорее всего, конфликты возникают в ответ на запрос PUT. Например, если использовалось управление версиями, а объект PUT включал изменения в ресурсе, которые конфликтуют с ресурсами, сделанными ранее (сторонним) запросом, сервер может использовать ответ 409, чтобы указать, что он не может выполнить запрос , В этом случае объект ответа, скорее всего, будет содержать список различий между двумя версиями в формате, определяемом типом содержимого ответа.

Ссылка: Определения кода состояния HTTP

0 голосов
/ 10 марта 2020

Я бы подумал, что 412 будет лучше, поскольку это указывает на ошибку клиента, а не 502 плохой шлюз, что указывает на системную / серверную ошибку на принимающей стороне

Коды состояния HTTP

412 (Precondition Failed)
Ответ об ошибке 412 указывает, что клиент указал одно или несколько предварительных условий в своих заголовках запроса, фактически сообщая REST API выполнить свой запрос только при определенных обстоятельствах. условия были выполнены. Ответ 412 указывает, что эти условия не были выполнены, поэтому вместо выполнения запроса API отправляет этот код состояния.

...