
Dmitry
21.09.2016
17:08:45
просто до этого когда я писал там все было так: при обращении к урлу дергался обработчик вида:
void hello(HTTPServerRequest req, HTTPServerResponse res)

Oleg
21.09.2016
17:13:46
у него нет параметров в url
параметры передаются в теле запроса

Google

Dmitry
21.09.2016
17:14:30
а...

Oleg
21.09.2016
17:14:34
запрос к int getSum(int a, int b) будет выглядеть почти как написал
только первый знак ? будет
/sum?a=1&b=3

Dmitry
21.09.2016
17:15:11
понял, спасибо

Oleg
21.09.2016
17:15:16
обязательно должны совпадать имена параметров в запросе и в методе

Dmitry
21.09.2016
17:15:53
а само тело это не Form Body случаем?
или как оно там называется

Oleg
21.09.2016
17:16:20
а просто body не подходит?
да и у кого ты это смотришь?

Dmitry
21.09.2016
17:16:49
я про: "параметры передаются в теле запроса"
тело запросо как понимаю может быть разным — просто текст, json, form body и тд

Grigirii
21.09.2016
17:17:35
тело запроса в http это всегда просто строка

Google

Grigirii
21.09.2016
17:17:43
да, там можно json

Oleg
21.09.2016
17:17:44
это content-type вроде разный может быть

Grigirii
21.09.2016
17:18:07
но в случае post там обычно query строка

Oleg
21.09.2016
17:18:10
а пока не ввели повсеместно http2 везде текст

Grigirii
21.09.2016
17:18:27
?a=1&b=3

Oleg
21.09.2016
17:18:44

Grigirii
21.09.2016
17:18:55
это для пост, то что идёт в тело

Dmitry
21.09.2016
17:19:38
string getInfo(Json x)
{
writeln(x["foo"]);
return (тут-ответ-в-формате-json)
}
Вот так будет обработка JSON входящего выглядеть?

Grigirii
21.09.2016
17:19:42
да и ничто не мешает query параметры отдавать в post запрос. так тоже можно, но редко нужно

Oleg
21.09.2016
17:19:59

Grigirii
21.09.2016
17:20:32
а, ну для Rest API в vibe, да. что-то я совсем в общую теорию ушёл
тогда тело запроса просто {"a"=1, "b"=3}

Dmitry
21.09.2016
17:21:30
Grigirii код выше это для int postSum(int a, int b) ?
когда ты говорил про автоматическую сереализацю ты именно это имел ввиду? что vibed вытащит аргументы в порядке их очередности так?

Grigirii
21.09.2016
17:23:50
не в порядке очерёдности, а по имени

Dmitry
21.09.2016
17:24:40
а vibed любые типы сможет так сереализовать входящих данных?

Oleg
21.09.2016
17:24:54
Почти

Grigirii
21.09.2016
17:25:02
все базовые типа строк и чисел

Dmitry
21.09.2016
17:25:04
вот если я ему все пришлю просто как строку, а не json он ее сможет сереализовать?

Oleg
21.09.2016
17:25:16
И структуры простые

Google

Dmitry
21.09.2016
17:25:21
с content-type string

Grigirii
21.09.2016
17:25:36
json в http это всегда строка

Dmitry
21.09.2016
17:26:01
а... а content-type влияет?

Grigirii
21.09.2016
17:26:22
не уверен, но вообще не должен

Dmitry
21.09.2016
17:30:10
получается явное указания типа ответа string или Json особой роли не играет если и то и другое как текст передается. Просто правильнее указывать корректные типы так? Это для http и http2 верно?
string getInfo(Json x)

Grigirii
21.09.2016
17:31:27
в json есть типы. число, строка, bool
как минимум это должно быть правильно
от версии http не зависит

Sergey
21.09.2016
17:43:50
content-type бывает text, но не string)

Dmitry
21.09.2016
17:46:31
пробую отправить Json из curl:
echo {"aa" : "bb"} | curl -X POST —data-binary @- —dump - http://127.0.0.1/info
но vibed ругается:
The request body must contain a JSON object with an entry for each parameter.
Код такой:
string postInfo(Json x)
{
writeln(x["foo"]);
return `{"aa":"bb"}`;
}

Sergey
21.09.2016
17:49:08
а где json, который отправляете?

Dmitry
21.09.2016
17:49:37
сразу за echo идет

Sergey
21.09.2016
17:50:36
кстати, есть очень удобный апплет для хрома. postman - рекомендую

Dmitry
21.09.2016
17:50:46
а хорошо пасибо

Sergey
21.09.2016
17:51:32
что касается curl
curl -H "Content-Type: application/json" -X POST -d '{"aa":"bb"}' http://127.0.0.1/info
попробуйте

Dmitry
21.09.2016
17:52:16
я вот так сделал:
curl -H "Content-Type: application/json" -X POST http://127.0.0.1:8080/info -d "{\"Name\":\"Test Value\"}"
Пример взял из ответов на SO
только ошибка та же осталась
сейчас твой вариант попробую

Sergey
21.09.2016
17:53:26
это то же самое по сути

Dmitry
21.09.2016
17:54:07
ошибка осталась та же. значит в коде что-то не то. сейчас покажу его

Google

Dmitry
21.09.2016
17:54:44
http://codepad.org/tsVRP6qN
шлю запрос на к урлу: http://127.0.0.1:8080/info
так ему видимо кавычки не нравятся в запрсе который я в curl отправляю
щас попробую браузерный плагин

Sergey
21.09.2016
17:57:37
в коде не то

Dmitry
21.09.2016
17:58:36
да? и в чем я косячу?

Sergey
21.09.2016
17:59:34
я рекомендую начать вот отсюда
http://vibed.org/docs#rest-interface-generator
и с постманом
будет проще

Dmitry
21.09.2016
18:01:48
хотя бы намекни, а то я так буду долго пытаться угадать в чем я не прав

Admin
ERROR: S client not available

Sergey
21.09.2016
18:07:51
не, это я тупанул про код. поздно у меня уже тут)
может и есть что-то но, не то, что я сначала подумал. сейчас запущу, гляну постманом. а то голова уже не соображает
точно в vibe такое слоглашение есть для методов с подобной сигнатурой
string postInfo(Json x)?
для string getInfo() не работает
а не. извиняюсь. чет я вообще не в адеквате. надо идти спать)
и все-таки моя первая доглака, кажется, была правльной
vibe уже распарсил json, а вы, насколько понимаю, птыаетесь получить сырой да еще из объекта x
да еще и объект foo, который не передаете
вот с таким вот документом работает
{"x":{"foo":"test"}, "aa":"bb"}

Google

Sergey
21.09.2016
18:32:01
ой, "aa":"bb" там лишние
прошу прощения за неадекват, пойду отсыпаться

Oleg
21.09.2016
19:13:11
читал про этот недочёт где-то
rest api не может принимать просто json
вроде как
и там делали хук, что сначала принимается строка, а потом парсится в json
я не помню где это было и когда эти сообщения писались, да и точно ли этот вопрос был... =)
но вроде как он)

Dmitry
21.09.2016
20:22:23
вот эту фразу не понял: "vibe уже распарсил json, а вы, насколько понимаю, птыаетесь получить сырой да еще из объекта x"
что он мог распарсить если я отправляю в него:
{"foo":"test"}

Oleg
21.09.2016
20:25:44
это строка
а json это структура данных в vibe

Dmitry
21.09.2016
20:27:11
и был хук для того, чтобы строку обрабатывать как json?
кстати почему-то предложенный post man мне POST запрос формирует в виде get запроса. Как я понимаю только get запрос в виде урла идет, а POST передается в теле

Oleg
21.09.2016
20:29:54
а ты где это пишешь?
сервис какой-то?
так...
давай сначала
вообще с самого начала
1 сек

Dmitry
21.09.2016
20:30:24
Сергей предложил плагин для браузера Post Man называется

Pavel
21.09.2016
20:30:39
POST запрос тоже может иметь get параметры в строке
+ еще он имеет тело

Oleg
21.09.2016
20:30:45
https://habrahabr.ru/post/215117/