如何在Erlang中创建Json对象并在Rest Api中传递它

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了如何在Erlang中创建Json对象并在Rest Api中传递它相关的知识,希望对你有一定的参考价值。

我是新手Erlang,我的疑问是如何在Erlang中创建一个JSON对象并在Rest API调用中传递该对象。我有阅读这么多帖子但没有得到任何令人满意的答案。

编辑

我在这里调用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.

这里关于JSON字符串的一切都很好。我正在尝试修改此module

答案

如何在Erlang中创建JSON对象

在erlang中没有对象这样的东西,所以简单的答案是:你做不到。但是,通过线路发送的内容只是字符串,您当然可以使用erlang创建字符串。

为了简化操作,您可以使用jsx之类的erlang模块来创建要在请求中发送的json格式化字符串。但是,为了使用erlang模块,你必须学习一些rebar3,这是erlang的软件包安装程序(参见What is the easiest way for beginners to install a module?)。

请记住,http请求只是以某种方式格式化的字符串。 http请求以如下行开头:

POST /some/path HTTP/1.1

然后有一些文本行称为标题,看起来像:

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有一个名为inets的内置http客户端,您可以在文档here中阅读。有关使用inets的示例,请参阅here。因为使用inets有点麻烦,或者你可以使用像hackney这样的第三方http客户端。但是,你需要再次使用hackney安装rebar3

发送请求后,由服务器解密请求并采取必要的操作。

以上是关于如何在Erlang中创建Json对象并在Rest Api中传递它的主要内容,如果未能解决你的问题,请参考以下文章

如何从 JSON 数组在 DB 中创建表以在 Spring Boot 中创建 REST API

如何使用JSON正文在REST API POST方法中传递多个记录

如何使用 REST API 在 Keycloak 中创建具有密码的用户?

如何使用 mysql 和 mux 在 REST API 中创建课程?

如何在 CouchDB 中创建 Erlang 视图

如何在 Erlang 中创建全局变量