Поделиться через


Настройка ответов Microsoft Graph с помощью параметров запроса

Параметры запроса помогают оптимизировать ответы Microsoft API Graph путем точного управления возвращаемыми данными. Вместо получения всех доступных свойств и данных можно использовать параметры запроса, чтобы:

  • Фильтрация результатов для получения только необходимых записей
  • Выбор определенных свойств для уменьшения размера ответа и повышения производительности
  • Сортировка и разбивка данных на страницы для улучшения взаимодействия с пользователем
  • Развертывание связанных ресурсов для получения подключенных данных в одном запросе

В этой статье объясняется, как эффективно использовать параметры системных запросов OData и другие параметры запроса Microsoft Graph. Вы изучите синтаксис, ознакомьтесь с практическими примерами и рекомендациями по созданию эффективных запросов, повышающих производительность приложения.

Поддержка конкретных параметров запроса зависит от операций API и может отличаться для конечных точек версии 1.0 и бета-версии .

Совет

В бета-версии конечной $ точки префикс необязателен. Например, вы можете использовать filter вместо $filter. В конечной точке $версии 1.0 префикс необязателен только для подмножества API. Для простоты всегда включается $ во всех версиях.

Системные параметры запроса OData

API Microsoft Graph может поддерживать один или несколько из указанных ниже системных параметров запроса OData. Эти параметры запроса совместимы с языком запросов OData версии 4 и поддерживаются только в операциях GET .

Выберите примеры, чтобы попробовать их в Graph Обозреватель.

Имя Описание Пример
$count Возвращает общее количество соответствующих ресурсов. /me/messages?$top=2&$count=true
$expand Возвращает связанные ресурсы. /groups?$expand=members
$filter Фильтрует результаты (строки). /users?$filter=startswith(givenName,'J')
$format Возвращает результаты в указанном формате мультимедиа. /users?$format=json
$orderby Упорядочивает результаты. /users?$orderby=displayName desc
$search Возвращает результаты на основании условий поиска. /me/messages?$search=pizza
$select Фильтрует свойства (столбцы). /users?$select=givenName,surname
$skip Пропускает элементы в результирующем наборе. Также используется некоторыми API для реализации разбиения на страницы и может использоваться с $top для страницы результатов вручную. /me/messages?$skip=11
$top Задает размер страницы результатов. /users?$top=2

Чтобы найти параметры системных запросов OData, поддерживаемые API и его свойствами, см. таблицу "Свойства" на странице ресурсов и раздел "Необязательные параметры запроса" операций LIST и GET для API.

Другие параметры запроса

Имя Описание Пример
$skipToken Возвращает следующую страницу результатов из результирующих наборов, охватывающих несколько страниц. (Вместо этого используются $skip некоторые API.) /users?$skiptoken=X%274453707402000100000017...

Другие возможности URL-адресов OData

Следующие возможности OData 4.0 являются сегментами URL-адресов, а не параметрами запросов.

Имя Описание Пример
$count Возвращает целочисленный итог коллекции. GET /users/$count
GET /groups/{id}/members/$count

Получение количества пользователей
$ref Обновляет принадлежность объектов к коллекции. POST /groups/{id}/members/$ref

Добавление участника в группу
$value Возвращает или обновляет двоичное значение элемента. GET /me/photo/$value

Получение фотографии пользователя, группы или команды
$batch Объединяет несколько HTTP-запросов в пакетный запрос. POST /$batch

Пакетная обработка JSON

Кодирование параметров запроса

Значения параметров запроса в процентах в соответствии с RFC 3986. Все зарезервированные символы в строках запроса должны быть закодированы в процентах. Многие HTTP-клиенты, браузеры и средства (например, Обозреватель Graph) обрабатывают эту кодировку автоматически. Если запрос завершается сбоем, возможная причина заключается в том, что не удалось правильно закодировать значения параметров запроса. Иногда требуется двойная кодировка значений.

Примечание.

Существует известная проблема с кодировкой символов амперсанда (&) в $search выражениях в конечной точке версии 1.0 . Дополнительные сведения о проблеме и рекомендуемое решение см. в статье Известная проблема: $search для объектов каталога завершается сбоем для символа закодированного амперсанда (&).

Например, незакодированный URL-адрес выглядит следующим образом:

GET https://graph.microsoft.com/v1.0/users?$filter=startswith(givenName, 'J')

Правильно закодированный в процентах URL-адрес выглядит следующим образом:

GET https://graph.microsoft.com/v1.0/users?$filter=startswith(givenName%2C+'J')

URL-адрес в двух кодировке выглядит следующим образом:

GET https://graph.microsoft.com/v1.0/users?$filter=startswith%28givenName%2C%20%27J%27%29

Экранирование одинарных кавычек

Для запросов, использующих одинарные кавычки, если какие-либо значения параметров также содержат одинарные кавычки, они должны быть экранированы в двойном виде; В противном случае запрос завершается ошибкой из-за недопустимого синтаксиса. В приведенном примере строковое значение let''s meet for lunch? содержит пропускаемую одинарную кавычку.

GET https://graph.microsoft.com/v1.0/me/messages?$filter=subject eq 'let''s meet for lunch?'

Count

$count Используйте параметр запроса для получения общего числа элементов в коллекции или сопоставления выражения. Использовать можно $count следующими способами:

  1. В качестве параметра строки запроса с синтаксисом $count=true , включающем общее количество элементов в коллекции вместе со страницей значений данных, возвращенных из Microsoft Graph. Например, users?$count=true.
  2. В качестве сегмента URL-адреса можно получить только целочисленный итог коллекции. Например, users/$count.
  3. $filter В выражении с операторами равенства для получения коллекции данных, где отфильтрованное свойство является пустой коллекцией. См . раздел Использование параметра запроса $filter для фильтрации коллекции объектов.

Примечание.

  1. Для ресурсов, производных от directoryObject, $count это поддерживается только в расширенных запросах. См . дополнительные возможности запросов к объектам каталога.
  2. $count Использование не поддерживается в Azure AD клиентах B2C.

Например, следующий запрос возвращает коллекцию контактов текущего пользователя и количество элементов в коллекции контактов в свойстве @odata.count .

GET  https://graph.microsoft.com/v1.0/me/contacts?$count=true

Для объектов каталога, то есть ресурсов, производных от directoryObject, $count параметр запроса поддерживается только в расширенных запросах.

Развернуть

Многие ресурсы Microsoft Graph отображают как объявленные свойства ресурса, так и его связи с другими ресурсами. Эти связи также называются свойствами ссылки или навигации и могут ссылаться как на один ресурс, так и на коллекцию ресурсов. Например, папки почты, руководитель и подчиненные пользователя выводятся как связи.

С помощью строкового параметра запроса $expand в результаты можно включить расширенный ресурс или коллекцию, на которые ссылается одно отношение (свойство навигации). Для некоторых API можно развернуть только одну связь в одном запросе.

В приведенном ниже примере возвращаются сведения о корневом каталоге, а также дочерние элементы верхнего уровня на диске.

GET https://graph.microsoft.com/v1.0/me/drive/root?$expand=children

В некоторых коллекциях ресурсов можно также указать свойства, возвращаемые в расширенных ресурсах, добавив $select параметр . В следующем примере выполняется тот же запрос, что и в предыдущем примере, но используется $select оператор , чтобы ограничить свойства, возвращаемые для расширенных дочерних элементов, свойствами идентификатора и имени .

GET https://graph.microsoft.com/v1.0/me/drive/root?$expand=children($select=id,name)

Примечание.

  • Не все отношения и ресурсы поддерживают параметр запроса $expand. Например, можно развернуть отношения directReports, manager и memberOf для пользователя, но нельзя развернуть его события, сообщения или связи с фотографиями . Не все ресурсы и отношения поддерживают использование параметра $select для развернутых элементов.

  • При использовании Microsoft Entra ресурсов, производных от directoryObject, таких как пользователь и группа, $expand обычно возвращается не более 20 элементов для расширенной связи и не имеет @odata.nextLink. Дополнительные сведения см. в разделе Ограничения параметров запроса.

  • $expand В настоящее время не поддерживается с расширенными запросами.

Filter

$filter Используйте параметр запроса, чтобы получить только подмножество коллекции. Инструкции по использованию $filterсм. в разделе Использование параметра запроса $filter для фильтрации коллекции объектов.

Формат

Параметр запроса $format позволяет указать формат мультимедиа для элементов, возвращаемых из Microsoft Graph.

Например, следующий запрос возвращает пользователей в организации в формате JSON:

GET https://graph.microsoft.com/v1.0/users?$format=json

Примечание.

Параметр $format запроса поддерживает множество форматов (например, atom, xmlи json), но результаты могут возвращаться не во всех форматах.

OrderBy

Параметр запроса $orderby позволяет указать порядок сортировки элементов, возвращаемых из Microsoft Graph. Порядок по умолчанию — по возрастанию.

Например, следующий запрос возвращает пользователей в организации, упорядоченных по отображаемой имени в порядке возрастания:

GET https://graph.microsoft.com/v1.0/users?$orderby=displayName

Некоторые API поддерживают сортировку по сущностям сложных типов. Следующий запрос получает сообщения и сортирует их по поле адреса свойства from , которое имеет сложный тип emailAddress:

GET https://graph.microsoft.com/v1.0/me/messages?$orderby=from/emailAddress/address

Чтобы отсортировать результаты по возрастанию или убыванию, добавьте или ascdesc к имени поля, разделенное пробелом, ?$orderby=name desc например (без кода), ?$orderby=name%20desc (в кодировке URL-адреса). Если порядок сортировки не указан, будет выведен порядок по возрастанию.

Некоторые API позволяют упорядочивать результаты по нескольким свойствам. Например, приведенный ниже запрос позволяет упорядочить сообщения в папке "Входящие" пользователя сначала по имени отправителей по убыванию (от Я до А), а затем — по возрастанию (по умолчанию).

GET https://graph.microsoft.com/v1.0/me/mailFolders/Inbox/messages?$orderby=from/emailAddress/name desc,subject

Примечание.

При указании $filterслужба определяет порядок сортировки результатов. Если вы одновременно используете $orderby и $filter для получения сообщений, так как сервер всегда определяет порядок сортировки результатов $filter, необходимо задать свойства определенным образом.

В приведенном ниже примере показан запрос, отфильтрованный по свойствам subject и importance, а затем отсортированный по свойствам subject, importance и receivedDateTime в порядке убывания.

GET https://graph.microsoft.com/v1.0/me/messages?$filter=Subject eq 'welcome' and importance eq 'normal'&$orderby=subject,importance,receivedDateTime desc

Примечание.

Для объектов каталога поддерживаются параметры запросов $orderby и $filter. См . дополнительные возможности запросов к объектам каталога.

Используйте параметр запроса, $search чтобы ограничить результаты запроса в соответствии с условием поиска. Его синтаксис и поведение различаются в разных ресурсах. Дополнительные сведения см. в статье Использование параметра запроса $search в соответствии с условием поиска.

Выбор

$select Используйте параметр запроса, чтобы вернуть подмножество свойств для ресурса. С помощью $select можно указать подмножество или надмножество свойств по умолчанию.

При выполнении запроса GET без использования $select ограничения данных свойства Microsoft Graph включает свойство @microsoft.graph.tips , которое предоставляет рекомендации по использованию $select , аналогичное следующему сообщению:

"@microsoft.graph.tips": "Use $select to choose only the properties your app needs, as this can lead to performance improvements. For example: GET groups?$select=appMetadata,assignedLabels",

Например, при получении сообщений пользователя, выполнившего вход, можно указать, что возвращаются только свойства from и subject :

GET https://graph.microsoft.com/v1.0/me/messages?$select=from,subject

Важно!

Рекомендуется использовать $select , чтобы ограничить свойства, возвращаемые запросом, теми, которые требуются вашему приложению. Это особенно актуально для запросов, которые потенциально могут возвращать большой результирующий набор. Ограничение свойств, возвращаемых в каждой строке, снижает сетевую нагрузку и повышает производительность приложения.

В версии 1.0 некоторые Microsoft Entra ресурсы, производные от directoryObject, например user и group, возвращают ограниченное подмножество свойств по умолчанию для операций чтения. Для этих ресурсов необходимо использовать $select для возврата свойств за пределами набора по умолчанию.

Пропустить

$skip Используйте параметр запроса, чтобы задать количество элементов, которые необходимо пропустить в начале коллекции. Например, следующий запрос возвращает события для пользователя, отсортированного по дате создания, начиная с 21-го события в коллекции:

GET  https://graph.microsoft.com/v1.0/me/events?$orderby=createdDateTime&$skip=20

Некоторые API Microsoft Graph, такие как Почта и календари Outlook (сообщение, событие и календарь), используют $skip для реализации разбиения по страницам. Когда результаты запроса охватывают несколько страниц, эти API возвращают свойство @odata.nextLink с URL-адресом $skip , содержащим параметр. Этот URL-адрес можно использовать для возврата следующей страницы результатов. Подробнее…

Объекты каталога , такие как пользователь, группа и приложение , не поддерживают $skip.

SkipToken

Некоторые запросы возвращают несколько страниц данных либо из-за разбиения на страницы на стороне сервера, либо из-за использования $top параметра для ограничения размера страницы ответа. Многие API Microsoft Graph используют параметр запроса skipToken для ссылки на следующие страницы результатов.
Этот параметр содержит непрозрачный маркер, который ссылается на следующую страницу результатов и возвращается в URL-адресе, указанном в свойстве @odata.nextLink в ответе. Подробнее…

Примечание.

Если вы используете OData Count (добавляя $count=true в строку запроса) для запросов к объектам каталога, свойство @odata.count присутствует только на первой странице.

Заголовок ConsistencyLevel , необходимый для расширенных запросов к объектам каталога, по умолчанию не включается в последующие запросы страницы. Его необходимо явным образом задавать на последующих страницах.

В начало

$top Используйте параметр запроса, чтобы указать количество элементов, которые будут включены в результат.

Если в результирующем наборе остается больше элементов, текст ответа содержит параметр @odata.nextLink . Этот параметр содержит URL-адрес, с помощью которого можно получить следующую страницу результатов. Дополнительные сведения см. в статье о разбиении по страницам.

Минимальное значение $top является 1, а максимальное зависит от соответствующего API.

Например, следующий запрос сообщений списка возвращает первые пять сообщений в почтовом ящике пользователя:

GET https://graph.microsoft.com/v1.0/me/messages?$top=5

Примечание.

Заголовок ConsistencyLevel , необходимый для расширенных запросов к объектам каталога, по умолчанию не включается в последующие запросы страницы. Его необходимо явным образом задавать на последующих страницах.

Обработка ошибок параметров запроса

Если указанный параметр запроса не поддерживается, некоторые запросы возвращают сообщение об ошибке. Например, нельзя использовать $expand для user/photo связи.

https://graph.microsoft.com/v1.0/me?$expand=photo
{
    "error":{
        "code":"ExpandNotSupported",
        "message":"Expand is not allowed for property 'Photo' according to the entity schema.",
        "innerError":{
            "request-id":"1653fefd-bc31-484b-bb10-8dc33cb853ec",
            "date":"2017-07-31T20:55:01"
        }
    }
}

Однако иногда параметры запроса, указанные в запросе, завершаются сбоем автоматически. Например, для неподдерживаемых параметров запроса и для неподдерживаемых сочетаний параметров запроса. В таких случаях проверьте данные, возвращаемые запросом, чтобы определить, оказали ли указанные параметры запроса желаемое действие.