我正在为电子商务应用程序编写服务。该服务将允许客户更改现有订单的地址,以便他们可以在其他地址接收。这是一个两步过程:
第1步。GUI将发送一个POST请求,请求正文中的orderNumber为path_variable,AddressId为AddressId。服务将创建一个购物车,并返回一个cartID以及更新的交货日期,更新的税额和其他信息。 有些物品可能不符合送达此新地址的资格。 响应包含每个项目的error [],以将有关该项目的发货问题通知UI。另外,如果任何物品有问题,服务将不允许更改地址。
现在,如果客户接受以下更改:
步骤2。GUI将使用cartId命中另一个端点,然后将Cart提交以进行进一步处理。
Step1应该返回“ 201 Created”(正在创建购物车)还是“ 200 OK”(从客户的角度来看,尚未创建任何东西,这只是“告诉我,如果我更改地址会发生什么变化”) “)
如果任何项目有任何问题,则“ status”属性将为“ failure”。如果响应为201 Created,我是否应该返回“失败”状态。 “失败”与我们返回4xx或5xx的错误不同。
关于这种情况的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
}
]
}
答案 0 :(得分:0)
如果您的服务创建了购物车,则应使用201 Created。如果有问题,则应使用400 Bad Request。 This是设计API端点的好资源。
答案 1 :(得分:0)
任何一种方法都可以,但是,考虑到您实际上在后端进行了 create 的操作,则使用201更合适(尽管通常期望它随请求返回新创建资源的位置)。 / p>
关于失败,这取决于请求的失败方式-如果是请求中缺少参数/无效参数的结果,则400是正确的,因为它向客户端建议他们可以通过进行更改来重复请求,如果故障更明确,即后端客户端无法控制某事,那么将是500。