200 OK或201 Created:两步休息服务

时间:2019-01-21 08:09:54

标签: json rest

我正在为电子商务应用程序编写服务。该服务将允许客户更改现有订单的地址,以便他们可以在其他地址接收。这是一个两步过程:

第1步。GUI将发送一个POST请求,请求正文中的orderNumber为path_variable,AddressId为AddressId。服务将创建一个购物车,并返回一个cartID以及更新的交货日期,更新的税额和其他信息。 有些物品可能不符合送达此新地址的资格。 响应包含每个项目的error [],以将有关该项目的发货问题通知UI。另外,如果任何物品有问题,服务将不允许更改地址。

现在,如果客户接受以下更改:

步骤2。GUI将使用cartId命中另一个端点,然后将Cart提交以进行进一步处理。

  1. Step1应该返回“ 201 Created”(正在创建购物车)还是“ 200 OK”(从客户的角度来看,尚未创建任何东西,这只是“告诉我,如果我更改地址会发生什么变化”) “)

  2. 如果任何项目有任何问题,则“ status”属性将为“ failure”。如果响应为201 Created,我是否应该返回“失败”状态。 “失败”与我们返回4xx或5xx的错误不同。

  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"
}

示例响应:失败(某些项目无法交付,因此填充了error []。)

    {
  "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 :(得分:0)

如果您的服务创建了购物车,则应使用201 Created。如果有问题,则应使用400 Bad Request。 This是设计API端点的好资源。

答案 1 :(得分:0)

任何一种方法都可以,但是,考虑到您实际上在后端进行了 create 的操作,则使用201更合适(尽管通常期望它随请求返回新创建资源的位置)。 / p>

关于失败,这取决于请求的失败方式-如果是请求中缺少参数/无效参数的结果,则400是正确的,因为它向客户端建议他们可以通过进行更改来重复请求,如果故障更明确,即后端客户端无法控制某事,那么将是500。