如何在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 中创建具有密码的用户?