Клуб API Диска

Создание папки REST API

25 апреля 2016, 15:13

Идея была такая. Найти нужную папку по имени и при ее отсуствии создать.

Поиск папки выполняется без проблем. В случае, если папки нет использую PUT /v1/disk/resources?path=newfolder

На полигоне все отработало без проблем. 

Сервер на запрос выдал ответ с кодом ошибки 413.

Так и не понял, почему запрос очень большой.

Url: 

https://cloud-api.yandex.net:443/v1/disk/resources?path=newfolder

Заголовки запроса 

"Content-Type" - "application/json; charset=utf-8"

"Authorization", "OAuth + "Мой токен"

Права для приложения установлены.

Как можно решить данную проблему?

5 комментариев
Подписаться на комментарии к посту
Не знаю почему так выходит с REST API
webdav и команда MKCOL отработала без проблем
Здравствуйте.
Запрос curl-ом отрабатывает без проблем:

$ curl -v -k -XPUT -H 'Authorization: OAuth <MY_TOKEN>' 'https://cloud-api.yandex.net:443/v1/disk/resources?path=newfolder'
...
> PUT /v1/disk/resources?path=newfolder HTTP/1.1
> User-Agent: curl/7.37.1
> Host: cloud-api.yandex.net
> Accept: */*
> Authorization: OAuth <MY_TOKEN>
>
< HTTP/1.1 201 CREATED
...


Убедитесь, что при создании папки вы не отправляете никакой документ в теле запроса.


> Найти нужную папку по имени и при ее отсуствии создать.
Вы можете всегда делать запрос на создании папки и обрабатывать status code 409, если такая папка уже существует.


Точно такая же проблема. Удалось решить?


webdav и команда MKCOL - работают только на обычной платформе 1С, на мобильной платформе выдается ошибка  (использование данной команды запрещено)
noprogrammer,
Удалось, через костыли. 
Сначала создаем папку через MKCOL
Используя метод ВызватьHTTPМетод. В описании метода написано, что в первом параметре допустимо использовать только латинский алфавит. А папку нужно было создать на русском. Из-за этого вываливалась ошибка. На полигоне кстати все работает и с русскими названиями папок. Так что тут сказываются особенности 1С, а вернее стандарта, который они используют.
Затем эту папку переименовываем как хотим уже на русском.
Ранее я использовал для создания метод PUT, но даже если все на латинском, все равно ошибка 413.




 //1. Создаем папку Object1C

Соединение = Новый HTTPСоединение("webdav.yandex.ru",443,,,,,Новый ЗащищенноеСоединениеOpenSSL);
Заголовки = Новый Соответствие;
Заголовки.Вставить("Accept","*/*");
Заголовки.Вставить("Depth", 1);
Заголовки.Вставить("Authorization", "OAuth "+Токен);
Запрос = Новый HTTPЗапрос("",Заголовки);
Команда = "MKCOL /Object1C HTTP/1.1";
Ответ = Соединение.ВызватьHTTPМетод(Команда, Запрос);
Если НЕ Ответ.КодСостояния = 201 Тогда
данные = Ответ.ПолучитьТелоКакСтроку();
ОбщегоНазначенияКлиентСервер.СообщитьПользователю(данные);
Возврат Ложь; //что то пошло не так, и папку не создали
КонецЕсли;

//2. переименовываем папку, так, как хотим.

Соединение = Новый HTTPСоединение("cloud-api.yandex.net",443,,,,,Новый ЗащищенноеСоединениеOpenSSL);
Заголовки = Новый Соответствие;
Заголовки.Вставить("Content-Type","application/json; charset=utf-8");
Заголовки.Вставить("Authorization", "OAuth "+Токен);

//Object1C - имя созданной ранее папки
АдресРесурса = "v1/disk/resources/move?from=Object1C&path="+ИмяПапкиНаРусском;

Запрос = Новый HTTPЗапрос(АдресРесурса,Заголовки);

Ответ = Соединение.ОтправитьДляОбработки(Запрос);
Если Ответ.КодСостояния = 201 ИЛИ Ответ.КодСостояния = 202 Тогда //202 - ок, выполняется асинхронно
Возврат Истина;
Иначе
данные = Ответ.ПолучитьТелоКакСтроку();
ОбщегоНазначенияКлиентСервер.СообщитьПользователю(данные);
КонецЕсли;  


HTTPСоединение (HTTPConnection)
Синтаксис:
ВызватьHTTPМетод(<HTTPМетод>, <HTTPЗапрос>, <ИмяВыходногоФайла>)
Параметры:
<HTTPМетод> (обязательный)
Тип: Строка.
Строка, содержащая имя HTTP-метода для запроса.
Согласно стандарту RFC2616 (http://www.w3.org/Protocols/rfc2616/rfc2616), строка должна содержать только латинские символы.
 
Доступность:
Тонкий клиент, сервер, толстый клиент, внешнее соединение, мобильное приложение(клиент), мобильное приложение(сервер). 



pto.ssm,
Рано обрадовался...На компе действительно работает а вот на мобильной платформе нет...ошибка та же самая осталась. (видимо придется ждать обновление мобильной платформы и надеяться, что данную ошибку исправят).
В любом случае спасибо за код (про кирилицу даже не подумал)