我正在尝试设计一种REST API,该API支持对实体的集合字段进行更新。
我有两个相关的对象:用户和组(一个组包含用户列表)。 GET API支持过滤和分页,例如:
GET /users?start=0&count=5&filter=name LIKE '%admin%'
上面的API将返回名称中带有“ admin”用户的前5个用户(过滤器类似于vert SQL),响应如下:
{
"start":0,
"count":5,
"total":100,
"data": [
{
"id":"1",
"name":"admin_1"
},
{
"id":"2",
"name":"admin_2"
},
{
"id":"3",
"name":"admin_3"
},
{
"id":"4",
"name":"admin_4"
},
{
"id":"5",
"name":"admin_5"
},
]
}
用于查看用户组详细信息的API将是:
GET /groups/1
响应:
{
"id":1,
"name": "All admins",
"users":{
"start":0,
"count":5,
"total":100,
"data": [
{
"id":"1",
"name":"admin_1"
},
{
"id":"2",
"name":"admin_2"
},
{
"id":"3",
"name":"admin_3"
},
{
"id":"4",
"name":"admin_4"
},
{
"id":"5",
"name":"admin_5"
},
]
}
}
如果一个人希望看到的用户超过该组的前5个用户,他将调用API
GET /groups/1/users?start=5&count=20
响应将类似于/ users API。
现在,我要实现的是一个API,该API将允许调用者在不知道其个人ID的情况下将用户添加到组中。而是使用过滤器将其添加(例如,将名称中带有“ Jon”的所有用户添加到组中)。
这样的API外观如何?
到目前为止,我的建议是拥有类似的东西:
POST /groups/2/users
具有以下正文:
{
"filter":"name LIKE '%JON%'
}
对于这个,我不确定响应主体是什么样子?
我应该返回响应中所有添加的用户(可以返回10k吗? 用户)。
我应该返回响应的“第一”页(添加的前5个)
用户)?在这种情况下,API调用者应如何知道如何检查
已添加用户的下一页?他应该打电话给GET
/groups/2/users?filter=name LIKE '%JON%'
吗?如果是这样,我怎么允许
他使以前的用户有所作为
尊重过滤器和新添加的过滤器?
我已经查看了许多有关如何实现此目标的指南,似乎没有人尝试这样做,或者也许我在错误的地方寻找目标。
谢谢。