Обращение к ресурсам объекта drive в OneDrive

API OneDrive позволяет использовать один URL-адрес для обращения к двум аспектам ресурса:

  • ресурс driveItem;
  • свойство, аспект или связь элемента.

Аспект Item представляет элемент ресурса, например метаданные изображения, метаданные папки и т. д.

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

https://graph.microsoft.com/v1.0/me/drive/root:/Documents/MyFile.xlsx:/content

В этом примере URL-адрес содержит указанные ниже компоненты.

  • https://graph.microsoft.com/v1.0 — версия используемого Microsoft Graph.
  • /me — адресуемый ресурс верхнего уровня Microsoft Graph; в данном случае это текущий пользователь.
  • /drive — диск, используемый по умолчанию, для предыдущего ресурса; в данном случае это OneDrive пользователя.
  • /root— корневая папка для диска.
  • :/Documents/MyFile.xlsx:— символы : :, которыми ограничена строка /Documents/MyFile.xlsx, представляют собой переключатель для использования синтаксиса обращения к элементам с использованием пути. Все, что находится между двумя двоеточиями, обрабатывается как путь, относительный для элемента, расположенного перед путем (в данном случае root).
  • /content— представляет двоичный поток, используемый по умолчанию, для файла. Вы также можете адресовать другие свойства или связи для элемента.

Обращение к элементам с использованием идентификаторов

OneDrive поддерживает обращение к элементам с использованием идентификаторов. При создании элементов им назначаются уникальные идентификаторы. Эти идентификаторы остаются неизменными при выполнении действий над элементами. При переименовании или перемещении элемента его идентификатор не изменяется.

Обращение к элементам с использованием идентификаторов — удобный способ отслеживания элементов, которые пользователь может перемещать в различные расположения в OneDrive. Если у вас есть идентификатор существующего элемента, вы сможете найти этот элемент.

Обращение к элементам с использованием пути

OneDrive также поддерживает обращение к элементам с использованием пути. Такой способ позволяет использовать понятный синтаксис URL-адресов для обращения к элементам относительно иерархии элементов, видимой в OneDrive. Если вы знаете иерархию, ведущую к элементу, вы можете напрямую обратиться к нему, не тратя время на выполнение повторяющихся вызовов для обнаружения каждого уровня иерархии.

Так как при обращении к элементу с использованием пути применяется имя элемента, при переименовании элемента или перемещении его в другое расположение путь к элементу изменится.

Обращение к элементу с использованием пути можно применять относительно любого элемента в OneDrive. Это позволяет реализовывать очень удобные сценарии. Например, при работе с общими папками вы можете использовать URL-адрес на основе пути, относительный для идентификатора элемента общей папки, для обращения к каким-либо объектам в общей папке с использованием пути.

Примеры

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

Пример URL-адреса Описание
/drive/root:/Documents/MyFile.xlsx:/content Указан с использованием пути, относительного для корня диска.
/drive/special/documents:/MyFile.xlsx:/content Указан с использованием имени файла в специальной папке documents.
/drive/items/0123456789AB/content Указан с использованием идентификатора элемента.
/drives/AB0987654321/items/0123456789AB/content Указан с использованием идентификатора диска и идентификатора элемента.

Кодировка символов пути

OneDrive поддерживает обращение к файлам и папкам с использованием пути к элементу в OneDrive пользователя. Так как путь содержит указанный пользователем контент, который может содержать символы, небезопасные для использования в URL-адресе, вы должны проверить правильность кодировки всех сегментов пути.

При работе с Microsoft Graph предполагается, что URL-адреса соответствуют требованиям документа RFC 3986. Ниже кратко описано, как правильно кодировать пути для Microsoft Graph.

Символы, зарезервированные в OneDrive

Указанные ниже символы зарезервированы в OneDrive, и не следует использовать их в именах папок и файлов в OneDrive.

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

Примечание. Имена папок не должны заканчиваться точкой (.).

Примечание. Имена файлов и папок в OneDrive для бизнеса не должны начинаться с тильды (~). Дополнительные сведения см. в статье об ограничениях при работе с OneDrive для бизнеса.

Символы, используемые в пути URI

При создании сегмента пути URL-адреса для API OneDrive в именах путей, основанных на RFC URI, можно использовать указанные ниже символы.

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

Для символов в именах элементов, не включенных в группу pchar, например # и (пробел), необходимо применять кодировку с использованием символа процента.

Кодирование символов

В Microsoft Graph применяется стандартная кодировка с использованием символа процента, в которой символы, недопустимые в URL-адресах, кодируются с использованием символа %, за которым следует код символа в таблице символов UTF-8. Например:

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

Распространенные ошибки при кодировании URL-адресов

Вам не удастся закодировать весь URL-адрес с использованием одного вызова, так как для каждого сегмента URL-адреса используются различные правила кодирования. Если закодировать URL-адрес неправильно, не всегда будет понятно, в каком сегменте находится то или иное содержимое. Таким образом, при создании строки URL-адреса вам необходимо закодировать путь URL-адреса.

Например, вместо этого:

string url = url_encode("https://api.onedrive.com/v1.0/drive/root:/" + path + ":/children")

Напишите это:

string url = "https://api.onedrive.com/v1.0/drive/root:/" + url_path_encode(path) + ":/children")

Не во всех библиотеках кодирования URL-адресов соблюдаются все требования стандартного кодирования путей URL-адресов.

.NET, C-Sharp и Visual Basic

Классы .NET для HttpUtility и Uri включают различные методы кодирования URL-адресов. Тем не менее ни один из этих методов не может правильно кодировать все зарезервированные символы для компонента пути URL-адреса (включая HttpUtility.UrlPathEncode).

Вместо этих методов для создания правильного URL-адреса используйте UriBuilder.

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

Objective-C и iOS

При разработке для Objective-C, iOS и Mac OS X для правильного кодирования компонента пути URL-адреса используйте метод stringByAddingPercentEncodingWithAllowedCharacters и [NSCharacterSet URLPathAllowedCharacterSet].

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

Android

Для создания правильно закодированного URL-адреса используйте класс Uri.Builder.

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

JavaScript

Для правильного кодирования компонента пути в JavaScript используйте escape().

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

Примеры

Вот пример пользователя OneDrive (Ryan) с указанной ниже иерархией папок.

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

Для обращения к любым файлам пользователя Ryan необходимо применять кодирование с использованием знака процента, как показано ниже.

Путь Закодированный URL-адрес для пути
\Ryan's Files /root:/Ryan's%20Files
\...\doc (1).docx /root:/Ryan's%20Files/doc%20(1).docx
\...\estimate%.docx /root:/Ryan's%20Files/estimate%25s.docx
\Break#Out /root:/Break%23Out
\...\saved_game[1].bin /root:/Break%23Out/saved_game[1].bin