200 OK или 201 Создано: двухэтапный отдых - PullRequest
0 голосов
/ 21 января 2019

Я пишу сервис для приложения электронной коммерции. Услуга позволит клиентам изменить адрес существующего заказа, чтобы они могли получать по другому адресу. Это двухэтапный процесс:

Шаг 1. GUI будет отправлять POST-запрос с orderNumber в качестве path_variable и AddressId в теле запроса. Сервис будет создавать корзину и возвращать cartId и обновленные даты доставки, обновленную сумму налога и другую информацию. Некоторые предметы могут не подходить для доставки по этому новому адресу. Ответ содержит ошибку [] для каждого элемента, чтобы уведомить пользовательский интерфейс о проблеме доставки для этого элемента, если таковой имеется. Кроме того, если есть какие-либо проблемы с любым из пунктов, сервис не позволит изменить адрес.

Теперь, если клиент принимает эти изменения:

Шаг 2. GUI попадет в другую конечную точку с cartId, и тогда корзина будет отправлена ​​для дальнейшей обработки.

  1. Если Step1 возвращает «201 Created» (корзина создается) или «200 OK» (ничего не было создано с точки зрения клиента, это просто «скажите, что изменится, если я изменю адрес» «)

  2. Если есть какие-либо проблемы с любым из элементов, атрибут «status» будет «fail». Должен ли я вернуть статус «сбой», если ответ 201 Создан. «Ошибка» отличается от ошибок, для которых мы возвращаем 4хх или 5хх.

  3. Ваше общее предложение по разработке кода состояния 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
    }
  ]
}

Ответы [ 2 ]

0 голосов
/ 21 января 2019

Впрочем, все в порядке, если вы действительно создаете что-то в бэкэнде, тогда более подходящим является 201 (хотя обычно ожидается возвращение местоположения вновь созданного ресурса с запросом).

С точки зрения сбоев, это зависит от того, как запрос завершается неудачей - если это результат отсутствия / недопустимого параметра в запросе, то 400 является правильным, поскольку предлагает клиенту повторить запрос, внеся изменения, если сбой является более определенным, т. е. что-то на бэкэнде, над которым клиент не имеет контроля, тогда ожидается 500.

0 голосов
/ 21 января 2019

Если ваш сервис создает корзину, вам следует использовать 201 Created. Если есть проблемы, вы должны использовать 400 Bad Request. - хороший ресурс для разработки конечных точек API.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...