+1
Under review

метод DELETE в AV HTTP не планируется?

Vyacheslav Shorin 5 years ago in Tips and Tricks updated by Vladimir Ovchinnikov (expert) 5 years ago 7

а то в одном API наткнулся. используется для удаления записей

Under review

Добрый день!

Реализации Delete в HTTP драйвере не планировалось, т.к. это первый запрос такого рода. Поставлю идею на голосование.

Сейчас можно обойти через драйвер TCP, посылая в заголовке нужный тип запроса.

Отправка должна устанавливать in_home в true, но не работает, видимо PATCH тоже не поддерживает, как обойти помогите.

IR.GetDevice("SST").SendEx({

Type: "PATCH",

Url: "/houses/31373/",

Data: ['{"in_home":"true"}'],

Headers: {

"Accept": "application/json",

},

cbReceiveText: function(text, code, headers) {IR.Log("cbReceiveText "+text+code+headers);},

cbReceiveData: function(data, code, headers) {IR.Log("cbReceiveData "+data+code+headers);},

cbReceiveCode: function(code) {IR.Log("cbReceiveCode "+code);},

cbReceiveKey: function(key,value) {IR.Log("cbReceiveKey "+key+value);},

cbReceiveStartBody: function(stream) {IR.Log("cbReceiveStartBody "+stream);},

cbReceivePartBody: function(stream) {IR.Log("cbReceivePartBody "+stream);},

cbReceiveEndBody: function(size) {IR.Log("cbReceiveEndBody "+size);},

cbTimeOut: function() {IR.Log("cbTimeOut");},

cbReceiveStream: function(stream, code, headers) {IR.Log("cbReceiveStream "+stream+code+headers);}

});

Добрый день.

В кастомном HTTP драйвере для SendEx доступны только GET, POST и PUT.

DELETE и PATCH не реализованы и работать не будут.

Если запрос единственный, то можно выполнить его через Send, но набор данных для отправки придётся формировать самостоятельно. Результат принимать через идентификатор EVENT_RECEIVE_DATA или EVENT_RECEIVE_TEXT.

Переключил на PUT

IR.GetDevice("SST").SendEx({

Type: "PUT",

Url: "/houses/31373/",

Data: ['{"in_home": false,"name":"Якорь"}'],

Headers: {

"Content-Type": "application/json",

"Accept": "application/json",

},

cbReceiveText: function(text, code, headers) {IR.Log("cbReceiveText "+text+code+headers);},

});


При отправке получаю ответ
[11-07-2019 13:26:05.927] INFO SCRIPT cbReceiveText {"name":["Это поле обязательно."],"detail":"Это поле обязательно."}400[object Object

Тут же отправляю еще раз не перезагружая проект и получаю корректный ответ

При использовании например postman все работает с первого раза


Почему так происходит?

Видимо сервер ждёт от вас каких-то данных в полях name и detail, но PUT на веб-сервере не запрещён, поэтому запрос выполняется.

я посылаю один и тот же запрос 2 раза, с первого раза никогда не отдает корректный ответ,
тут же повторяю запрос и все корректно

Сделайте дамп Wireshark обеих попыток запросов из Иридиум.

Затем дамп отправки из стороннего приложения (мы используем Adbanced REST client, но вы можете использовать любой удобный вам).

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