Яндекс предоставляет доступ к своим сервисам по протоколу OAuth. Доступ к защищенным данным предоставляется только зарегистрированным приложениям.
OAuth — открытый протокол авторизации, который позволяет предоставить третьей стороне ограниченный доступ к защищённым ресурсам пользователя без необходимости передавать ей (третьей стороне) логин и пароль.
Получение доступа можно разделить на 2 этапа:
OAuth Сервер Яндекса доступен по адресу oauth.yandex.ru. Управление доступом к ресурсам пользователя настраивается именно на нем. В этой статье будет рассмотрен процесс регистрации приложения, которому разрешен доступ к Яндекс Диску с помощью REST API.
Для регистрации приложения необходимо пройти по ссылке https://oauth.yandex.ru и нажать на кнопку "Зарегистрировать новое приложение":
В открывшейся форме заполнить:
После этого нажать на кнопку "Сохранить":
Cервер зарегистрирует приложение и отобразит присвоенные ему идентификационные данные:
На этом регистрация приложения закончена.
Для отправки запроса на доступ требуется сформировать url следующего вида:
https://oauth.yandex.ru/authorize?response_type=token&client_id=APP_ID
#В параметре client_id= укажите ID вашего приложения
После чего перейти по получившейся ссылке и нажать на кнопку "Разрешить".
В ответ сервер сгенерирует токен, с помощью которого можно получить доступ к диску.
Данный токен действителен в течении года. Через год необходимо будет получить его заного.
Сохранение файлов происходит в два этапа:
Давайте рассмотрим их немного подробнее.
Запрос 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
}
Файл следует отправить с помощью метода 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