如何使用REST API从单个端点更新复杂对象?

时间:2016-12-11 10:55:01

标签: rest

例如,我有一个对象,如

select   a_id, 
         min(id) id,         
         first_value(length) over (partition by a_id order by id) length,
         first_value(date_time) over (partition by a_id order by id) last_time
where    id >= 1074 and id <= 1080
group by a_id
order by 2 asc

如果我想使用新请求更新此对象,将如何处理列表关注者?

例如,如果使用PUT发送此更新请求,是否意味着关注者没有更改,或者关注者不为空?

{
    ID: 1000,
    Type: "Ticket",
    "Followers": [
    {
    "UserID": 1200
    },
    {
    "UserID": 1201
    },
    {
    "UserID": 1202
    }]
}

1 个答案:

答案 0 :(得分:1)

我认为您正在设计API而您并不是指现有的API。

首先,我了解到您在谈论RESTfull API?

因此,大多数情况下,您将拥有专门用于更新特定参数的端点。

例如更新关注者:

PUT/PATCH /api/ticket/1000/followers

为此请求提供空数组或空值意味着您要删除关注者。

或者您也可以实现DELETE HTTP方法。然后,我们的想法是仅将PUT用于更新逻辑 - 如果提供并且为空/ null值,它将返回错误。

在这种情况下,删除关注者的唯一方法是使用DELETE HTTP方法:

DELETE /api/ticket/1000/followers

但是,这又将取决于您希望如何实现它以及对您和最终用户来说最有用和最合理的内容。

修改 您的问题与没有子资源的单个端点/ api / ticket / 1000的使用有关。

因此,在PUT中发送以下对象而不提供&#34;关注者&#34;不会更改/删除关注者。

{
    ID: 1000,
    Type: "Ticket"
}

相反,为&#34;追随者&#34;提供关键。在您的请求中将更新关注者的价值。在这种情况下,它将删除它们:

{
    ID: 1000,
    Type: "Ticket",
    "Followers": []
}