如何以RESTful方式实现动作调用?

时间:2014-07-18 14:00:54

标签: rest

我有一台使用两种资源运行的服务器 - groupsusers。它们都可以是localldap。服务器应该能够从外部LDAP服务器获取用户及其成员资格,并将其放入内部存储。它还需要能够从同步中省略一些用户。

我看到两种或多或少的好方法来实现这个:

  1. sync_request创建资源POST。它将使用数组ldap_users和flag confirm = false创建。标记所需用户后,发送更新列表并使用PUT确认= true。
  2. 创建单例资源sync_controller。它包含两个数组:ldap_users和local_users,两者都由GET检索。每当您想要同步用户时,您可以从列表ldap_users中获取其中的几个并将它们放入local_users,而不是使用PUT更新控制器。
  3. 这两种方法的缺点是实际上它们会修改usersgroups资源。同样,#2中的GET请求也不是幂等的,因为每次请求都会检索ldap_users,因此每次都会更改列表。

    有没有优雅的方法来实现这个功能?如果没有,哪种方法更好?

1 个答案:

答案 0 :(得分:1)

我不认为幂等意味着你认为它意味着什么。它指的是请求的副作用。它不保证资源永远不会改变。如果确实如此,你就永远无法更新任何可以获得的东西。

  

如果使用该方法对服务器的多个相同请求的预期效果与单个此类请求的效果相同,则请求方法被视为“幂等”。
- HTTP RFC 7231

我不确定为什么你需要创建一个不完整的请求。假设没有业务要求,我会考虑像这样解决问题:

GET /users?type=ldap
{
    "count": 3,
    "users": [ 
        { "id": "bob" }, 
        { "id": "mary" }, 
        { "id": "joran" }
    ]
}
POST /sync_requests
{
    "users": ['bob', 'mary']
}

GET /sync_requests/234
{
    "status": "successful",
    "users": ['bob', 'mary']
}