Navegar por la estructura de datos de SharePoint representada en el servicio REST

Cuando trabaja con el servicio REST de SharePoint, a menudo comenzará sabiendo la dirección URL de un elemento de SharePoint específico, pero quiere tener acceso a elementos relacionados, como la estructura de carpeta o de biblioteca donde reside el elemento. Por ejemplo, suponga que crea un complemento en el que el usuario escribe una dirección URL de un documento en una biblioteca de SharePoint. Después, el complemento deberá desglosar esa dirección URL para averiguar la dirección URL del sitio de SharePoint real. Una vez conseguido, el complemento puede realizar más solicitudes desde el sitio en nombre del usuario, como crear, actualizar o eliminar elementos o recursos relacionados.

Para ello, el complemento tiene que consultar la siguiente información en SharePoint:

  • Las URL relativas al servidor del sitio y la colección de sitios que contiene el recurso
  • Una síntesis de formulario para que pueda hacer solicitudes que modifiquen el estado del recurso, tales como POST, PUT, MERGE y DELETE.

Proceso básico

  1. Use el operador /contextinfo con la dirección URL especificada para el acceso a las direcciones del sitio y de la colección de sitios, con la síntesis de formulario. Use el operador /contextinfo en el siguiente formato:

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

    Para mayor seguridad contra los intentos de scripting entre sitios, el operador /contextinfo solo acepta solicitudes POST.

  2. Si quiere, use las propiedades del objeto SPContextWebInformation que devuelve el operador /contextinfo para tener acceso a recursos adicionales.

Probarlo

  1. Comenzar con una URL dada para un elemento de SharePoint dado. Por ejemplo: https://{site_url}/doclib/myDocument.docx

  2. Quite el nombre del recurso específico del final de la dirección URL, de forma que la dirección de URL apunte a una biblioteca de documentos, una carpeta o una lista. En este caso: https://{site_url}/doclib/

  3. Anexe el puntero del servicio REST y el operador /contextinfo a la dirección URL:

    POST https://{site_url}/_api/doclib/contextinfo
    Authorization: "Bearer " + accessToken
    Accept: "application/json;odata=verbose"
    
  4. Lea la síntesis de formulario y las propiedades webFullUrl de la respuesta.

  5. Anexe el puntero del servicio REST _api a la dirección URL de la web.

  6. Use la dirección URL resultante y la síntesis de formulario para realizar solicitudes a otros recursos que necesite.

Sugerencia

No tiene que pasar la síntesis de formulario si realiza solicitudes GET o solicitudes con un token OAuth validado.

Cuando se navega por la estructura de un sitio con el modelo de objetos del servidor de SharePoint, se usan las propiedades SPWeb.ParentWeb y SPWeb.Webs para el acceso a objetos que representan sitios primarios y secundarios.

Los recursos de REST correspondientes, web/parentweb y web/webs, no devuelven objetos que representan sitios. Esto se debe a que el servicio REST cumple con los estándares de OData, y la devolución de representaciones de sitios completos haría que dichas solicitudes fueran ineficientes. En su lugar, devuelven un objeto WebInfo que contiene las propiedades escalares del sitio, pero sin los conjuntos de entidades relacionados como las colecciones o las colecciones de campos.

Para navegar a un sitio primario o secundario específico, cree la dirección URL de REST adecuada a dicho sitio mediante la propiedad Id o Title. Desde ahí, podrá acceder a los conjuntos de entidades relacionadas con el sitio.

El servicio REST de SharePoint no permite recorrer la jerarquía de carpetas de un sitio a través de la construcción de la dirección URL. En su lugar, use el equivalente de REST del método Web.GetFolderByServerRelativeUrl. Por ejemplo:

Navegación no compatible con el servicio REST:

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

Navegación compatible con el servicio REST:

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

Propiedades del objeto SPContextWebInformation

Propiedad SPContextWebInformation Descripción
webFullUrl Obtiene la URL relativa al servidor del sitio más próximo.
siteFullUrl Obtiene la dirección URL relativa al servidor de la raíz de la colección de sitios que contiene el sitio.
Si el sitio web más cercano es la raíz de una colección de sitios, el valor de la propiedad webFullUrl es igual al de la propiedad siteFullUrl.
formDigestValue Obtiene la síntesis de formulario de la solicitud del servidor.
LibraryVersion Obtiene la versión actual de la biblioteca REST.
SupportedSchemaVersions Obtiene las versiones admitidas del esquema de la biblioteca REST/CSOM.

Objeto WebInfo

Propiedad WebInfo Descripción
Created Obtiene un valor que especifica cuándo se ha creado el sitio.
Description Obtiene o establece la descripción del sitio.
Id Obtiene un valor que especifica el identificador del sitio.
Language Obtiene un valor que especifica el id. de configuración regional (LCID) del idioma que se usa en el sitio.
LastItemModifiedDate Obtiene un valor que especifica cuándo se modificó por última vez un elemento en el sitio.
Title Obtiene o establece el título del sitio.
WebTemplateId Obtiene el identificador de la plantilla del sitio.

Consulte también