driveItem: delta
Пространство имен: microsoft.graph
Отслеживание изменений в элементе driveItem и его дочерних компонентах с течением времени.
Для начала приложение вызывает delta
без параметров.
Служба начинает перечислять иерархию диска, возвращая страницы элементов и @odata.nextLink
или @odata.deltaLink
, как показано ниже.
Приложению следует выполнять вызовы с использованием @odata.nextLink
, пока не будет возвращен отклик без @odata.nextLink
или с пустым набором изменений.
Завершив получать изменения, вы можете применить их к локальному состоянию.
Для проверки наличия изменений в будущем снова вызовите delta
с использованием @odata.deltaLink
из предыдущего отклика.
Удаленные элементы возвращаются с аспектом deleted
.
Элементы с этим набором свойств следует удалить из локального состояния.
Примечание. Локально удалять папку следует, только если после синхронизации всех изменений она пуста.
Разрешения
Выберите разрешение или разрешения, помеченные как наименее привилегированные для этого API. Используйте более привилегированное разрешение или разрешения только в том случае, если это требуется приложению. Дополнительные сведения о делегированных разрешениях и разрешениях приложений см. в разделе Типы разрешений. Дополнительные сведения об этих разрешениях см. в справочнике по разрешениям.
Тип разрешения | Разрешения с наименьшими привилегиями | Более высокие привилегированные разрешения |
---|---|---|
Делегированные (рабочая или учебная учетная запись) | Files.Read | Files.Read.All, Files.ReadWrite, Files.ReadWrite.All, Sites.Read.All, Sites.ReadWrite.All |
Делегированные (личная учетная запись Майкрософт) | Files.Read | Files.Read.All, Files.ReadWrite, Files.ReadWrite.All |
Приложение | Files.Read.All | Files.ReadWrite.All, Sites.Read.All, Sites.ReadWrite.All |
HTTP-запрос
GET /drives/{drive-id}/root/delta
GET /groups/{groupId}/drive/root/delta
GET /me/drive/root/delta
GET /sites/{siteId}/drive/root/delta
GET /users/{userId}/drive/root/delta
Параметры функции
Параметр | Тип | Описание |
---|---|---|
token | string | Необязательный параметр. Если не указан, перечисляет текущее состояние иерархии. Если используется значение latest , возвращает пустой ответ с последним разностным маркером. Если используется предыдущий разностный маркер, возвращает новое состояние с момента того маркера. |
Необязательные параметры запросов
Этот метод поддерживает $select
параметры запроса ,$expand
и $top
OData для настройки ответа.
Заголовки запросов
Имя | Описание |
---|---|
Авторизация | Bearer {token}. Обязательно. Дополнительные сведения о проверке подлинности и авторизации. |
deltaExcludeParent | Строка. Если этот заголовок запроса включен, ответ включает измененные элементы, а не родительские элементы в иерархии. |
Текст запроса
Не указывайте текст запроса для этого метода.
Отклик
В случае успеха этот метод возвращает код отклика 200 OK
и коллекцию ресурсов DriveItem в теле отклика.
Помимо коллекции ресурсов DriveItem, отклик также включает одно из указанных ниже свойств.
Имя | Значение | Описание |
---|---|---|
@odata.nextLink | url | URL-адрес для получения следующей доступной страницы изменений, если в текущем наборе есть дополнительные изменения. |
@odata.deltaLink | url | URL-адрес, возвращаемый вместо @odata.nextLink после возврата всех текущих изменений. Используется для считывания следующего набора изменений в будущем. |
Примеры
Пример 1. Исходный запрос
Ниже приведен пример вызова этого API для создания локального состояния.
Запрос
Ниже приведен пример начального запроса.
GET https://graph.microsoft.com/v1.0/me/drive/root/delta
Отклик
Ниже показан пример отклика.
HTTP/1.1 200 OK
Content-type: application/json
{
"value": [
{
"id": "0123456789abc",
"name": "folder2",
"folder": { }
},
{
"id": "123010204abac",
"name": "file.txt",
"file": { }
},
{
"id": "2353010204ddgg",
"name": "file5.txt",
"deleted": { }
}
],
"@odata.nextLink": "https://graph.microsoft.com/v1.0/me/drive/delta(token=1230919asd190410jlka)"
}
Этот отклик включает первую страницу изменений, а свойство @odata.nextLink указывает, что в текущем наборе доступны дополнительные элементы. Ваше приложение должно запрашивать значение URL-адреса, указанного в свойстве @odata.nextLink, пока не будут получены все страницы элементов.
Пример 2. Последняя страница в наборе
Ниже приведен пример вызова этого API для обновления локального состояния.
Запрос
Ниже приведен пример запроса после первоначального запроса.
GET https://graph.microsoft.com/v1.0/me/drive/root/delta(token='MzslMjM0OyUyMzE7MzsyM2YwNDVhMS1lNmRmLTQ1N2MtOGQ5NS1hNmViZDVmZWRhNWQ7NjM3OTQzNzQwODQ3NTcwMDAwOzU4NTk2OTY0NDslMjM7JTIzOyUyMzA')
Отклик
Ниже показан пример отклика.
HTTP/1.1 200 OK
Content-type: application/json
{
"value": [
{
"id": "0123456789abc",
"name": "folder2",
"folder": { },
"deleted": { }
},
{
"id": "123010204abac",
"name": "file.txt",
"file": { }
}
],
"@odata.deltaLink": "https://graph.microsoft.com/v1.0/me/drive/root/delta?(token='MzslMjM0OyUyMzE7MzsyM2YwNDVhMS1lNmRmLTQ1N2MtOGQ5NS1hNmViZDVmZWRhNWQ7NjM3OTQzNzQwODQ3NTcwMDAwOzU4NTk2OTY0NDslMjM7JTIzOyUyMzA')"
}
Такой отклик означает, что между отправками первоначального запроса и данного запроса (на обновление локального состояния) был удален элемент folder2
, а элемент file.txt
был добавлен или изменен.
Последняя страница элементов содержит свойство @odata.deltaLink , которое предоставляет URL-адрес, который можно использовать позже для получения изменений с текущего набора элементов.
В некоторых случаях службе не удается предоставить список изменений для определенного маркера (например, если клиент пытается повторно использовать старый маркер после долгого отключения, а также если из-за измененного состояния сервера требуется новый маркер).
В таких случаях служба возвращает ошибку HTTP 410 Gone
с ответом об ошибке, содержащим один из приведенных ниже кодов ошибок, и Location
заголовок, содержащий новый nextLink, который запускает новое разностное перечисление с нуля.
По завершении полного перечисления сравните возвращенные элементы с локальным состоянием и выполните указанные ниже действия.
Тип ошибки | Инструкции |
---|---|
resyncChangesApplyDifferences |
Замените все локальные элементы версией сервера (включая удаление), если вы уверены, что служба была обновлена с локальными изменениями при последней синхронизации. Отправьте все локальные изменения, не загруженные на сервер. |
resyncChangesUploadDifferences |
Отправьте все локальные элементы, которые служба не вернула, и все файлы, отличные от версии сервера (сохраняя обе копии, если вы не уверены, какая из них является более актуальной). |
Пример 3. Получение текущего значения deltaLink
В некоторых случаях может быть удобно запросить текущее значение deltaLink, не перечисляя перед этим все элементы, уже хранящиеся в объекте drive.
Это может быть полезно, если приложению достаточно узнать об изменениях и ему не нужны сведения о существующих элементах.
Чтобы получить последнее значение deltaLink, вызовите функцию delta
с параметром ?token=latest
в строке запроса.
Примечание. Если вы пытаетесь поддерживать полное локальное представление элементов в папке или на диске, необходимо использовать
delta
для исходного перечисления. Другие подходы, например постраничный просмотр коллекцииchildren
для папки, не гарантируют возврата всех элементов, если во время перечисления выполняются операции записи. Только с помощью функцииdelta
можно гарантировать, что считываются все необходимые данные.
Запрос
GET /me/drive/root/delta?token=latest
Отклик
HTTP/1.1 200 OK
Content-type: application/json
{
"value": [ ],
"@odata.deltaLink": "https://graph.microsoft.com/v1.0/me/drive/root/delta?token=1230919asd190410jlka"
}
Пример 4: Получение результатов delta с использованием метки времени
В некоторых сценариях клиент может знать состояние диска до определенного момента времени, но не иметь deltaLink для этого момента времени. В этом случае клиент может вызвать delta
, используя метку времени в кодировке URL-адреса для значения token
параметра строки запроса, например, ?token=2021-09-29T20%3A00%3A00Z
или '?token=2021-09-29T12%3A00%3A00%2B8%3A00'.
Использование метки времени вместо токена поддерживается только в OneDrive для бизнеса и SharePoint.
Примечание. Клиенты должны по возможности использовать deltaLink, что предоставляется запросами
delta
, а не создавать собственный токен. Эту возможность следует использовать, только если элемент deltaLink неизвестен.
Запрос
GET /me/drive/root/delta?token=2021-09-29T20%3A00%3A00Z
Отклик
HTTP/1.1 200 OK
Content-type: application/json
{
"value": [
{
"id": "0123456789abc",
"name": "folder2",
"folder": { },
"deleted": { }
},
{
"id": "123010204abac",
"name": "file.txt",
"file": { }
}
],
"@odata.deltaLink": "https://graph.microsoft.com/v1.0/me/drive/root/delta?(token='1230919asd190410jlka')"
}
Заметки
В разностном канале показано последнее состояние каждого элемента, а не каждое изменение. Если элемент был переименован дважды, он будет указан только один раз, но с последним именем.
По ряду причин один и тот же элемент может отображаться в разностном канале несколько раз. Следует использовать последний представленный вариант.
Свойство
parentReference
элементов не будет содержать значение для пути. Это происходит потому, что переименование папки не приводит к тому, что потомки папки возвращаются из delta. При использовании delta следует всегда отслеживать элементы по идентификатору.Разностный запрос не возвращает некоторые свойства DriveItem в зависимости от операции и типа службы, как показано в следующих таблицах.
OneDrive для бизнеса
Тип операции Свойства, опущенные запросом изменений Создание или изменение ctag
Удаление ctag
,name
OneDrive (для потребителей)
Тип операции Свойства, опущенные запросом изменений Создание или изменение н/д Удаление ctag
,size
Сканирование иерархии разрешений
По умолчанию ответ разностного запроса включает общий доступ ко всем измененным элементам в запросе, даже если они наследуют свои разрешения от родительского элемента и не имеют изменений прямого общего доступа. Обычно это приводит к последующему вызову для получения сведений о разрешениях для каждого элемента, а не только для тех, чьи общие сведения изменены. Чтобы получить более детальные сведения о произошедших изменениях разрешений, добавьте в запрос заголовок Prefer: hierarchicalsharing
.
При указании заголовка Prefer: hierarchicalsharing
возвращаются сведения о совместном доступе для корня иерархии разрешений и элементов, для которых явно изменен общий доступ. В случаях, когда изменение общего доступа заключается в удалении общего доступа из элемента, вы найдете пустой аспект общего доступа, чтобы различать элементы, наследуемые от родительского элемента, и элементы, которые являются уникальными, но не имеют ссылок на общий доступ. Вы также увидите этот пустой аспект общего доступа в корне иерархии разрешений, которая не является общей для установки начальной области.
Во многих сценариях сканирования интерес представляют именно изменения разрешений. Чтобы получить сведения о том, какие изменения являются следствием изменений разрешений, можно использовать в запросе заголовок Prefer: deltashowsharingchanges
. При указании этого заголовка все элементы, которые отображаются в ответе разностного запроса из-за изменения разрешений, имеют заметку @microsoft.graph.sharedChanged":"True"
OData. Эта функция применима к SharePoint и OneDrive для бизнеса, но не к личным учетным записям OneDrive.
Примечание.
Для использования заголовка
Prefer: deltashowsharingchanges
требуется использоватьPrefer: deltashowremovedasdeleted
иPrefer: deltatraversepermissiongaps
. Эти значения заголовка можно объединить в один общий заголовок:Prefer: deltashowremovedasdeleted, deltatraversepermissiongaps, deltashowsharingchanges
.Чтобы правильно обрабатывать разрешения, приложению потребуется запросить разрешения Sites.FullControl.All .
Дополнительные сведения о сценариях сканирования см. в статье Рекомендации по обнаружению файлов и обнаружению изменений в большом масштабе.
Ответы с ошибками
Помимо вышеописанных ошибок повторной синхронизации, в статье Ответы с ошибками представлены сведения о том, как возвращаются ошибки.
Связанные материалы
Использование разностного запроса для отслеживания изменений в данных Microsoft GraphРекомендации по обнаружению файлов и обнаружению изменений в большом масштабе