如何通过单次调用Azure Graph API获取用户详情及全部组信息?
单次调用获取用户详情及全部所属组的解决方案
目前Microsoft Graph API没有直接支持单次调用同时获取用户完整详情+无数量限制的所属组列表的端点——因为用$expand=memberOf时,返回的组最多只有20条,这是Graph API关联查询的固定限制。
不过有几个优化思路,虽然不算严格意义上的单次API调用,但能大幅减少额外开销:
1. 用批量请求合并操作
把两次调用打包成一个HTTP请求发送,Graph API的批量请求允许在一个请求里包含多个独立的API调用,服务器会批量处理并返回所有结果。示例格式如下:
{ "requests": [ { "id": "1", "method": "GET", "url": "/v1.0/users/?$filter=userPrincipalName eq 'MYNAME'&$select=id,givenName" }, { "id": "2", "method": "GET", "url": "/v1.0/users/{user-id}/memberOf/?$select=id" } ] }
还可以用依赖请求自动替换用户ID,不用自己手动处理:
{ "requests": [ { "id": "1", "method": "GET", "url": "/v1.0/users/?$filter=userPrincipalName eq 'MYNAME'&$select=id,givenName" }, { "id": "2", "method": "GET", "url": "/v1.0/users/{$1.id}/memberOf/?$select=id", "dependsOn": ["1"] } ] }
批量请求只需要一次网络握手,比两次独立请求高效得多,而且能拿到无数量限制的组列表。
2. 增量同步用Delta查询(仅适用于定期同步场景)
如果是定期同步用户和组的场景,可以用Delta查询跟踪变化,但这不是为单次获取设计的,只适合增量更新需求。
3. 别碰旧的Azure AD Graph API
旧版的Azure AD Graph API已经被弃用,微软不再维护,而且它同样有类似的关联查询限制,完全没必要用。
总结:最贴合你需求的就是批量请求,它能在单次HTTP请求里完成用户详情和全部组的获取,既规避了两次独立请求的网络开销,又不受memberOf的20条限制。
内容的提问来源于stack exchange,提问作者Brandon Petty
相关产品推荐
相关产品推荐

