关于使用MS Graph API Delta端点获取OneDrive增量变更的疑问
OneDrive增量变更API相关问题
我尝试使用以下MS Graph API获取OneDrive根目录的增量变更:
https://graph.microsoft.com/v1.0/users/XXXXXXXXXXXXXXXXXXXXXXXXXX/drive/root/delta
得到的JSON响应如下:
{ "@odata.context": "https://graph.microsoft.com/v1.0/$metadata#Collection(driveItem)", "@odata.deltaLink": "https://graph.microsoft.com/v1.0/users/XXXXXXXXXXXXXXXXXXXXXXXXXX/drive/root/delta", "value": [ { "@odata.type": "#microsoft.graph.driveItem", "createdDateTime": "2020-08-24T14:27:07Z", "eTag": "\"{XXXXXXXXXXXXXXXXXXXXXXXX},1\"", "id": "XXXXXXXXXXXXXXXXXXXX", "lastModifiedDateTime": "2020-08-24T14:27:07Z", "name": "XXXXXXXXXXXXXXXXXXXXXXxxxx", "webUrl": "XXXXXXXXXXXXXXXXXXXXXXXXXXXxxxxxxx", "cTag": "\"c:{XXXXXXXXXXXXXXXXXXXXXXXXXXxxxx},0\"", "size": 4500070, "createdBy": { "application": { "displayName": "XXXXXXXXXXXXXXXXXXXXXXXx" }, "user": { "email": "XXXXXXXXXXXXXXXXXXXXX", "id": "XXXXXXXXXXXXXXXXXXXXXXXXXXX", "displayName": "XXXXXXXXXXXXXXXXxx" } }, "lastModifiedBy": { "application": { "displayName": "XXXXXXXXXXXXXXXXXXXXXXXXXX" }, "user": { "email": "XXXXXXXXXXXXXXXXXXXXXXXXXX", "id": "XXXXXXXXXXXXXXXXXXXXXXXXXX", "displayName": "XXXXXXXXXXXXXXXXXXXXXXXXXX" } }, "parentReference": { "driveType": "business", "driveId": "XXXXXXXXXXXXXXXXXXXXXXXXXX", "id": "XXXXXXXXXXXXXXXXXXXXXXXXXX", "path": "/drive/root:", "siteId": "XXXXXXXXXXXXXXXXXXXXXXXXXX" }, "fileSystemInfo": { "createdDateTime": "2020-08-24T14:27:07Z", "lastModifiedDateTime": "2020-08-24T14:27:07Z" }, "folder": { "childCount": 21 } }, { ... }, ... }
根据官方文档说明,该方法支持$select、$expand和$top这几个OData查询参数来定制响应,但不支持$filter,请问这个说法是否正确?
如果正确,基于parentReference/path过滤响应中项目的最佳方法是什么?
另外,是否可以请求OneDrive中除drive/root外的特定文件夹的增量变更?
恳请给出建议。
谢谢,
Gagan
问题解答
1. 查询参数支持情况确认
没错,OneDrive的delta接口确实不支持$filter参数,仅支持$select、$expand、$top三个参数调整返回结果,官方文档的描述是准确的。
2. 基于parentReference/path过滤的最佳方法
由于接口不支持服务端过滤,只能在客户端本地处理,推荐两种方式:
- 直接遍历返回的所有driveItem列表,检查每个项目的
parentReference.path是否匹配目标路径,保留符合条件的条目。 - 如果担心数据量过大,可先用
$select=parentReference只返回路径相关字段,过滤出目标条目后,再单独请求这些条目的完整详情,减少传输的数据量。
3. 请求特定文件夹的增量变更
完全可以针对非根目录的特定文件夹请求增量变更,只需修改API路径中的root部分:
- 用文件夹ID的请求示例:
https://graph.microsoft.com/v1.0/users/{用户ID}/drive/items/{文件夹ID}/delta - 用文件夹路径的请求示例(比如根目录下的"Documents"文件夹):
https://graph.microsoft.com/v1.0/users/{用户ID}/drive/root:/Documents:/delta
这样就能只获取该文件夹及其子目录下的增量变更内容。
内容的提问来源于stack exchange,提问作者Gagan
相关产品推荐
相关产品推荐

