Как создать Json Object в Erlang и передать использовать его в Rest Api - PullRequest
0 голосов
/ 23 апреля 2019

Я новичок в Erlang, и я сомневаюсь, как создать объект JSON в Erlang и передать этот объект в Rest API Call.Я прочитал так много сообщений, но не получил удовлетворительного ответа.

Редактировать

здесь я звоню API

offline_message(From, To, #message{type = Type, body = Body}) ->
Type = xml:get_text(Type),
Body = xml:get_text(Body),
Token = gen_mod:get_module_opt(To#jid.lserver, ?MODULE, auth_token, fun(S) -> iolist_to_binary(S) end, list_to_binary("")),
PostUrl = gen_mod:get_module_opt(To#jid.lserver, ?MODULE, post_url, fun(S) -> iolist_to_binary(S) end, list_to_binary("")),
to = To#jid.luser
from = From#jid.luser
if
    (Type == <<"chat">>) and (Body /= <<"">>) ->
        Sep = "&",
        Post = {
            "token":binary_to_list(Token),
            "from":binary_to_list(from),
            "to":binary_to_list(to),
            "body":binary_to_list(Body)
        },
        ?INFO_MSG("Sending post request to ~s with body \"~s\"", [PostUrl, Post]),
        httpc:request(post, {binary_to_list(PostUrl), [], "application/json", binary_to_list(Post)},[],[]),
        ok;
    true ->
        ok
end.

Isвсе в порядке здесь относительно JSON String.Я пытаюсь изменить этот модуль

1 Ответ

2 голосов
/ 23 апреля 2019

Как создать объект JSON в Erlang

В эрланге нет таких вещей, как объекты, поэтому простой ответ: вы не можете. Тем не менее, вещи, которые вы отправляете через wire , являются просто строками, и вы, безусловно, можете создавать строки, используя erlang.

Чтобы упростить задачу, вы можете использовать модуль erlang, например jsx , для создания строк в формате json, которые вы хотите отправить в своем запросе. Однако, чтобы использовать модули erlang, вам нужно немного узнать о rebar3, который является установщиком пакетов erlang (см. Какой самый простой способ для начинающих установить модуль? ).

Помните, что http-запрос - это просто строка, отформатированная определенным образом. HTTP-запрос начинается со строки вроде:

POST /some/path HTTP/1.1

Тогда есть несколько строк текста, которые называются headers и выглядят так:

User-Agent: Mozilla-yah-yah-bah
Content-Type: application/json
Content-Length: 103

Затем следует пара новых строк, за которыми следует дополнительный текст, который называется post body, , который может быть в нескольких различных форматах (формат должен быть объявлен в заголовке Content-Type):

    Format                 Content-Type
    ------                 -----------
   "x=1&y=2"               application/x-www-form-urlencoded
   "{x:1, y:2}"            application/json
   "more complex string"   multipart/form-data

Чтобы упростить сбор http-запроса и его отправку на сервер, в erlang есть встроенный http-клиент , называемый inets, о котором вы можете прочитать в документации здесь . Для примера, который использует inets, см. здесь . Поскольку inets немного громоздко в использовании, в качестве альтернативы вы можете использовать сторонний http-клиент, такой как hackney . Тем не менее, вам снова нужно будет установить hackney с rebar3.

После того, как вы отправите запрос, сервер должен расшифровать запрос и предпринять необходимые действия.

...