Получение доступа к сервисам Яндекса

Яндекс предоставляет доступ к своим сервисам по протоколу OAuth. Доступ к защищенным данным предоставляется только зарегистрированным приложениям.

OAuth — открытый протокол авторизации, который позволяет предоставить третьей стороне ограниченный доступ к защищённым ресурсам пользователя без необходимости передавать ей (третьей стороне) логин и пароль.

Получение доступа можно разделить на 2 этапа:

  1. Регистрация приложения;
  2. Получение разрешения на доступ к данным.

OAuth Сервер Яндекса доступен по адресу oauth.yandex.ru. Управление доступом к ресурсам пользователя настраивается именно на нем. В этой статье будет рассмотрен процесс регистрации приложения, которому разрешен доступ к Яндекс Диску с помощью REST API.

Регистрация приложения

Для регистрации приложения необходимо пройти по ссылке https://oauth.yandex.ru и нажать на кнопку "Зарегистрировать новое приложение": oauth.yandex.ru В открывшейся форме заполнить:

  • Название приложения;
  • Указать право доступа "Яндекс.Диск REST API" и отметить галочкой "Доступ к папке приложения на Диске";
  • Указать Callback URL, кликнув на ссылке "Подставить URL для разработки".

После этого нажать на кнопку "Сохранить":

oauth.yandex.ru/new

Cервер зарегистрирует приложение и отобразит присвоенные ему идентификационные данные:

  • ID;
  • Пароль;
  • Callback URL.

oauth.yandex.ru/registered

На этом регистрация приложения закончена.

Получение разрешения на доступ к диску

Для отправки запроса на доступ требуется сформировать url следующего вида:

https://oauth.yandex.ru/authorize?response_type=token&client_id=APP_ID
#В параметре client_id= укажите ID вашего приложения

После чего перейти по получившейся ссылке и нажать на кнопку "Разрешить".

Permit acces to account

В ответ сервер сгенерирует токен, с помощью которого можно получить доступ к диску.

Granted token

Данный токен действителен в течении года. Через год необходимо будет получить его заного.

Немного подробнее о использовании Yandex.Disk REST API

Сохранение файлов происходит в два этапа:

  1. Зарос URL для загрузки файла;
  2. Загрузка файла на полученный URL.

Давайте рассмотрим их немного подробнее.

Формат запроса URL для загрузки файла

Запрос URL для загрузки следует отправлять с помощью метода GET.

https://cloud-api.yandex.net/v1/disk/resources/upload ?
   path=<путь, по которому следует загрузить файл>
[& overwrite=<признак перезаписи>]
[& fields=<нужные ключи ответа>]

path - путь, по которому следует загрузить файл. Например, %2Fbar%2Fphoto.png

Путь в значении параметра следует кодировать в URL-формате.

overwrite (необязательный) - признак перезаписи файла. Учитывается, если файл загружается в папку, в которой уже есть файл с таким именем.

Допустимые значения: «false» — не перезаписывать файл, отменить загрузку (используется по умолчанию); «true» — удалить файл с совпадающим именем и записать загруженный файл.

fields (необязательный) - список ключей JSON, которые следует включить в ответ. Ключи, не указанные в этом списке, будут отброшены при составлении ответа. Если параметр не указан, ответ возвращается полностью, без сокращений. Имена ключей следует указывать через запятую, а вложенные ключи разделять точками. Например: «name,_embedded.items.path».

Формат ответа

Если запрос был обработан без ошибок, API отвечает кодом 200 OK. В теле ответа, в объекте Link, возвращается сгенерированный URL для загрузки файла. Если в течение 30 минут этот URL не будет запрошен, он перестанет работать, и нужно будет запросить новую ссылку.

Если запрос вызвал ошибку, возвращается подходящий код ответа, а тело ответа содержит описание ошибки.

Пример ответа:

{
  "href": "https://uploader1d.dst.yandex.net:443/upload-target/...",
  "method": "PUT",
  "templated": false
}
Загрузка файла на полученный URL

Файл следует отправить с помощью метода PUT на URL для загрузки, в течение 30 минут после получения этого URL (через 30 минут ссылка перестанет работать и ее нужно будет запросить заново). OAuth-токен для загрузки в хранилище не нужен.

Пример URL для загрузки:

https://uploader1d.dst.yandex.net:443/upload-target/20240424T101447.217.utd.52csloukwvq67nab1yc84a3xw-k1d.6625
Формат ответа

Если запрос был обработан без ошибок, API отвечает кодом 201 Created.

Пример HTTP-ответа:

HTTP/1.1 201 Created
Content-Length: 0