Direccionamiento de recursos en una unidad de OneDrive

Obtenga información sobre cómo acceder a los elementos de una unidad en OneDrive con direcciones basadas en id. y basadas en rutas de acceso, y cómo codificar correctamente rutas de acceso para Microsoft Graph.

Direccionamiento basado en el identificador

OneDrive admite el direccionamiento basado en el identificador de los elementos. A los elementos se les asigna un identificador único cuando se crean y el identificador continúa en las acciones que realiza un usuario en el elemento. Cambiar el nombre o mover el elemento no cambiará el identificador de este.

El direccionamiento basado en el identificador es una manera útil de realizar un seguimiento de los elementos que el usuario puede haber movido a diferentes ubicaciones de OneDrive. Siempre que tenga el id. de elemento y el elemento exista, podrá encontrarlo.

Direccionamiento basado en la ruta de acceso

OneDrive también admite el direccionamiento basado en la ruta de acceso. Esto le permite usar una sintaxis de URL descriptiva para direccionar elementos en relación con la jerarquía de elementos visibles en OneDrive. Si conoce la jerarquía de un elemento, puede direccionar directamente ese elemento, sin invertir tiempo en realizar llamadas repetidas para detectar cada nivel de la jerarquía.

En cambio, como el direccionamiento basado en la ruta de acceso se basa en el nombre del elemento, cambiar el nombre o mover el elemento a una nueva ubicación provocará que la ruta del elemento cambie.

Puede usar el direccionamiento basado en ruta de acceso en relación con cualquier elemento de OneDrive. Por ejemplo, al trabajar con carpetas compartidas, puede usar una dirección URL basada en la ruta de acceso en relación con el id. de elemento de la carpeta compartida para direccionar algo de la carpeta compartida mediante la ruta.

Ejemplos

En los ejemplos siguientes se muestran los diferentes formatos de dirección URL disponibles para acceder a los datos. Todas estas direcciones URL son equivalentes de manera lógica y devuelven el contenido de MyFile.xlsx.

Ejemplo de URL Descripción
/drive/root:/Documents/MyFile.xlsx:/content Se especifica mediante la ruta en relación con la raíz de una unidad.
/drive/special/documents:/MyFile.xlsx:/content Se especifica mediante el nombre de archivo en la carpeta especial documents.
/drive/items/0123456789AB/content Se especifica mediante el id. de elemento.
/drives/AB0987654321/items/0123456789AB/content Se especifica mediante el id. de unidad y el id. de elemento.

Codificación de la ruta de acceso

OneDrive admite el direccionamiento de archivos y carpetas con la ruta del elemento en el OneDrive del usuario. Sin embargo, dado que la ruta de acceso contiene contenido especificado por el usuario, que puede contener potencialmente caracteres que no son seguros para direcciones URL, debe asegurarse de la codificación adecuada de los segmentos de ruta de acceso.

Microsoft Graph espera que las direcciones URL cumplan con RFC 3986. A continuación se muestra un resumen de cómo codificar rutas de acceso correctamente en Microsoft Graph.

Caracteres reservados de OneDrive

Los siguientes caracteres son caracteres reservados de OneDrive y no pueden usarse en los nombres de archivo y carpeta de OneDrive.

  onedrive-reserved  = "/" / "\" / "*" / "<" / ">" / "?" / ":" / "|"
  onedrive-business-reserved
                     = "/" / "\" / "*" / "<" / ">" / "?" / ":" / "|" / "#" / "%"

Nota:

  • Los nombres de carpeta no pueden terminar con un punto (.).
  • Los nombres de archivo o carpeta no pueden comenzar con una tilde de la ñ ("~").

Para obtener más información, consulte Restricciones y limitaciones al sincronizar las bibliotecas de SharePoint con el equipo a través de OneDrive para el trabajo o la escuela.

Caracteres de la ruta de acceso de URI

Al crear el segmento de ruta de acceso de una dirección URL para la API de Microsoft Graph, se permiten los siguientes caracteres para los nombres de ruta, basados en las RFC del URI.

  pchar       = unreserved / pct-encoded / sub-delims / ":" / "@"
  pct-encoded = "%" HEXDIG HEXDIG
  unreserved  = ALPHA / DIGIT / "-" / "." / "_" / "~"
  sub-delims  = "!" / "$" / "&" / "'" / "(" / ")"
              / "*" / "+" / "," / ";" / "="

Los caracteres de nombre de elemento, que no se incluyen en el grupo pchar, como # y (espacio), debe ser codificados por porcentaje.

Codificación de caracteres

Microsoft Graph usa la codificación por porcentaje estándar, donde los caracteres de URL no válida se codifican con un % y, después, el código de carácter UTF-8 para el carácter. Por ejemplo:

  • " " ->%20
  • "#" ->%23

Errores comunes de codificación URL

No puede codificar una dirección URL completa en una llamada, porque las reglas de codificación para cada segmento de una dirección URL son diferentes. Sin una codificación correcta, la URL sin codificar será ambigua para los segmentos que contienen contenido. Como tal, necesita codificar la ruta de dirección URL al crear la cadena de URL.

Por ejemplo, en lugar de escribir esto:

string url = url_encode("https://graph.microsoft.com/v1.0/me/drive/root:/" + path + ":/children")

Escriba esto:

string url = "https://graph.microsoft.com/v1.0/me/drive/root:/" + url_path_encode(path) + ":/children")

En cambio, no todas las bibliotecas de codificación URL respetan todos los requisitos de la codificación de la ruta de acceso de URL estándar.

.NET / C-Sharp / Visual Basic

Las clases .NET para HttpUtility y Uri incluyen varios métodos para la codificación URL. En cambio, ninguno de esos métodos codifica correctamente todos los caracteres reservados para el componente de ruta de la dirección URL (incluido HttpUtility.UrlPathEncode).

En lugar de usar esos métodos, debe usar UriBuilder para crear una dirección URL de escape correctamente.

UriBuilder builder = new UriBuilder("https://graph.microsoft.com");
builder.Path = "/v1.0/me/drive/root:/Documents/My Files/#nine.docx";
Uri url = builder.Uri;

Objective-C / iOS

Para el desarrollo de Objective-C, iOS y Mac OS X, use el método stringByAddingPercentEncodingWithAllowedCharacters y [NSCharacterSet URLPathAllowedCharacterSet] para codificar correctamente el componente de la ruta de la dirección URL.

NSString *root = @"https://graph.microsoft.com/v1.0/me/drive/root:/";
NSString *path = @"Documents/My Files/#nine.docx";
NSString *encPath = [path stringByAddingPercentEncodingWithAllowedCharacters:[NSCharacterSet URLPathAllowedCharacterSet]];
NSURL *url = [[NSURL alloc] initWithString:[root stringByAppendingString:encPath]];

Android

Use la clase Uri.Builder para crear una dirección URL codificada correctamente.

Uri.Builder builder = new Uri.Builder();
builder.
  scheme("https").
  authority("graph.microsoft.com").
  appendPath("v1.0").
  appendPath("me").
  appendPath("drive").
  appendPath("root:").
  appendPath("Documents").
  appendPath("My Files").
  appendPath("#nine.docx");
String url = builder.build().toString();

JavaScript

Use escape() en JavaScript para codificar correctamente un componente de ruta.

var root = "https://graph.microsoft.com/v1.0/me/drive/root:";
var path = "/Documents/My Files/#nine.docx";
var url = root + escape(path);

Ejemplos

Aquí se muestra un ejemplo de un usuario de OneDrive (Adele) con la siguiente jerarquía de carpetas:

OneDrive
	\Adele's Files
		\doc (1).docx
    \estimate%s.docx
	\Break#Out
		\saved_game[1].bin

Para tratar cada uno de los archivos de Adele, use la codificación por porcentaje, de la manera siguiente:

Ruta de acceso Dirección URL codificada para la ruta de acceso
\Adele's Files /root:/Adele's%20Files
\...\doc (1).docx /root:/Adele's%20Files/doc%20(1).docx
\...\estimate%.docx /root:/Adele's%20Files/estimate%25s.docx
\Break#Out /root:/Break%23Out
\...\saved_game[1].bin /root:/Break%23Out/saved_game[1].bin