Я пишу сервис для приложения электронной коммерции. Услуга позволит клиентам изменить адрес существующего заказа, чтобы они могли получать по другому адресу. Это двухэтапный процесс:
Шаг 1. GUI будет отправлять POST-запрос с orderNumber в качестве path_variable и AddressId в теле запроса. Сервис будет создавать корзину и возвращать cartId и обновленные даты доставки, обновленную сумму налога и другую информацию.
Некоторые предметы могут не подходить для доставки по этому новому адресу.
Ответ содержит ошибку [] для каждого элемента, чтобы уведомить пользовательский интерфейс о проблеме доставки для этого элемента, если таковой имеется. Кроме того, если есть какие-либо проблемы с любым из пунктов, сервис не позволит изменить адрес.
Теперь, если клиент принимает эти изменения:
Шаг 2. GUI попадет в другую конечную точку с cartId, и тогда корзина будет отправлена для дальнейшей обработки.
Если Step1 возвращает «201 Created» (корзина создается) или «200 OK» (ничего не было создано с точки зрения клиента, это просто «скажите, что изменится, если я изменю адрес» «)
Если есть какие-либо проблемы с любым из элементов, атрибут «status» будет «fail». Должен ли я вернуть статус «сбой», если ответ 201 Создан. «Ошибка» отличается от ошибок, для которых мы возвращаем 4хх или 5хх.
Ваше общее предложение по разработке кода состояния HTTP, связанного с этим сценарием.
Пример ответа: успех (все предметы могут быть доставлены)
{
"message": {
"cart_id": "9fc91100-1a49-11e9-90da-ebd9192fcf6e",
"items": [
{
"estimated_arrival_date": "2018-07-03T23:00:00",
"item_id": "52194346",
"quantity": 1,
"sales_tax": 20.65,
"errors": []
}
],
"shipping_amount": "0.0",
},
"status": "success"
}
Пример ответа: сбой (некоторые элементы не доставляются, поэтому заполняется ошибка [].)
{
"message": {
"cart_id": "63ae8530-1984-11e9-9c05-1510ebea203a",
"items": [
{
"estimated_arrival_start_date": "2018-09-21T23:00:00",
"item_id": "14704191",
"quantity": 1,
"sales_tax": 0.33,
"errors": [
{
"error_key": "EXPRESS_SHIPPING_UNAVAILABLE",
"error_code": "2000",
"error_option": "SHIPPING"
}
]
},
{
"estimated_arrival_date": "2018-09-24T23:59:00",
"item_id": "50426683",
"quantity": 1,
"sales_tax": 0.0,
"errors": []
},
],
"shipping_amount": "0.0",
},
"status": "failure"
}
Пример ответа: ошибка:
{
"errors": [
{
"error_key": "_ERROR_INVALID_ORDER_NUMBER_PATTERN",
"error_code": 2000
}
]
}