用于修改集合的REST API

时间:2019-06-29 14:38:54

标签: rest api

我正在尝试设计一种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%'吗?如果是这样,我怎么允许 他使以前的用户有所作为 尊重过滤器和新添加的过滤器?

  • 或者,也许我应该使用一种完全不同的方法?

我已经查看了许多有关如何实现此目标的指南,似乎没有人尝试这样做,或者也许我在错误的地方寻找目标。

谢谢。

0 个答案:

没有答案