我有一台使用两种资源运行的服务器 - groups
和users
。它们都可以是local
或ldap
。服务器应该能够从外部LDAP服务器获取用户及其成员资格,并将其放入内部存储。它还需要能够从同步中省略一些用户。
我看到两种或多或少的好方法来实现这个:
sync_request
创建资源POST
。它将使用数组ldap_users和flag confirm = false创建。标记所需用户后,发送更新列表并使用PUT
确认= true。 sync_controller
。它包含两个数组:ldap_users和local_users,两者都由GET
检索。每当您想要同步用户时,您可以从列表ldap_users中获取其中的几个并将它们放入local_users,而不是使用PUT
更新控制器。这两种方法的缺点是实际上它们会修改users
和groups
资源。同样,#2中的GET
请求也不是幂等的,因为每次请求都会检索ldap_users,因此每次都会更改列表。
有没有优雅的方法来实现这个功能?如果没有,哪种方法更好?
答案 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']
}