Навигация по структуре данных SharePoint, представленной в службе REST

При работе со службой REST SharePoint часто возникает ситуация, когда вам известен URL-адрес определенного элемента SharePoint, но требуется получить доступ к связанным элементам, например структуре папок и библиотек, в которой находится элемент. Допустим, вы создаете надстройку, в которой пользователь вводит URL-адрес документа в библиотеке SharePoint. После этого надстройка должна разобрать этот URL-адрес и определить фактический URL-адрес сайта SharePoint. После этого надстройка сможет отправлять с сайта дальнейшие запросы от имени пользователя, например на создание, обновление или удаление связанных элементов или ресурсов.

Для этого надстройка должна запросить у SharePoint следующие сведения:

  • Относительные URL-адреса сайта и семейства веб-сайтов, содержащих ресурс.
  • Дайджест формы, позволяющий выполнять запросы, меняющие состояние ресурса, например POST, PUT, MERGE и DELETE.

Простой процесс:

  1. Используйте оператор /contextinfo с заданным URL-адресом для доступа к сайту и семейству веб-сайтов, а также дайджестом формы. Используйте оператор /contextinfo в следующем формате:

    POST https://{site_url}/_api/contextinfo
    Authorization: "Bearer " + accessToken
    Accept: "application/json;odata=verbose"
    

    Чтобы усилить защиту от межсайтовых сценариев, оператор /contextinfo принимает только запросы POST.

  2. Используйте свойства объекта SPContextWebInformation, возвращаемые оператором /contextinfo, для доступа к дополнительным ресурсам по мере необходимости.

Попробуйте

  1. Начните с URL-адреса определенного элемента SharePoint. Например: https://{site_url}/doclib/myDocument.docx

  2. Удалите имя ресурса в конце URL-адреса так, чтобы URL-адрес указывал на библиотеку документа, папку или список. В этом случае: https://{site_url}/doclib/

  3. Добавьте указатель службы REST и оператор /contextinfo к URL-адресу:

    POST https://{site_url}/_api/doclib/contextinfo
    Authorization: "Bearer " + accessToken
    Accept: "application/json;odata=verbose"
    
  4. Прочитайте дайджест формы и свойства webFullUrl из отклика.

  5. Добавьте указатель службы REST _api в конец URL-адреса веб-сайта.

  6. Используйте полученный URL-адрес и дайджест формы для отправки запросов о других нужных ресурсах.

Совет

При отправке запросов GET или отправке запросов с использованием проверенного маркера OAuth передавать дайджест формы не требуется.

При навигации по структуре сайтов с помощью серверной объектной модели SharePoint используются свойства SPWeb.ParentWeb и SPWeb.Webs для доступа к объектам, представляющим родительские и дочерние сайты.

Соответствующие ресурсы REST (web/parentweb и web/webs) не возвращают объекты, представляющие сайты. Это вызвано тем, что служба REST соответствует стандартам OData, а возврат готовых представлений сайтов сделал бы такие запросы неэффективными. Вместо этого они возвращают объект WebInfo, содержащий скалярные свойства сайта, но без связанных наборов сущностей, таких как коллекции или семейства полей.

Чтобы перейти к определенному родительскому или дочернему сайту, составьте подходящий URL-адрес REST этого сайта с помощью свойства Id или Title. После этого вы можете получить доступ к наборам сущностей, связанным с этим сайтом.

Служба REST SharePoint не поддерживает обход иерархии папок сайта путем составления URL-адресов. Вместо этого можно использовать аналог метода Web.GetFolderByServerRelativeUrl в службе REST. Пример:

Навигация, не поддерживаемая в службе REST:

https://{site_url}/_vti_bin/client.svc/web/lists/SharedDocuments/folder1/stuff/things/Recycle

Навигация, поддерживаемая в службе REST:

https://{site_url}/_vti_bin/client.svc/web/GetFolderByServerRelativeUrl('SharedDocuments/folder1/stuff/things')/Recycle

Свойства объекта SPContextWebInformation

Свойство SPContextWebInformation Описание
webFullUrl Возвращает URL-адрес относительно сервера для ближайшего сайта.
siteFullUrl Получает относительный URL-адрес корневого веб-сайта семейства, в котором содержится сайт.
Если ближайшим веб-сайтом является корневой сайт семейства веб-сайтов, значения свойств webFullUrl и siteFullUrl одинаковы.
formDigestValue Возвращает дайджест формы запроса сервера.
LibraryVersion Возвращает текущую версию библиотеки REST.
SupportedSchemaVersions Получает поддерживаемые версии схемы библиотеки REST/CSOM.

Объект WebInfo

Свойство WebInfo Описание
Created Возвращает значение, определяющее, когда был создан сайт.
Description Возвращает или задает описание сайта.
Id Возвращает значение, указывающее идентификатор сайта.
Language Возвращает значение, указывающее код языка, используемого на сайте.
LastItemModifiedDate Возвращает значение, определяющее, когда в последний раз был изменен элемент на сайте.
Title Получает или задает название сайта.
WebTemplateId Получает идентификатор шаблона сайта.

См. также