我正在尝试构建一个宁静的API
,而我正在努力将JSON
数据序列化为HTTP query string
。
需要在请求中传递许多强制和可选参数,例如(在下面表示为JSON对象):
{
"-columns" : [
"name",
"column"
],
"-where" : {
"-or" : {
"customer_id" : 1,
"services" : "schedule"
}
},
"-limit" : 5,
"return" : "table"
}
我需要支持不同数量的不同客户端,因此我正在寻找一种将此json对象转换为查询字符串的标准方法。有一个,它看起来怎么样?
另一种选择是允许用户只传递消息体中的json对象,但我读到我应该避免它(HTTP GET with request body)。
有什么想法吗?
编辑以澄清:
列出一些不同的语言如何编码上面给定的json对象:
jQuery
使用$.param
: - column [] = name& -columns [] = column& -where [-or] [customer_id] = 1& -where [-or] [services] =时间表&安培; -limit = 5&安培;返回=柱PHP
使用http_build_query
: - column [0] = name& -columns [1] = column& -where [-or] [customer_id] = 1& -where [-or] [服务] =时间表&安培; -limit = 5&安培;返回=柱Perl
使用URI::query_form
: - column = name& -columns = column& -where = HASH(0x59d6eb8)& -limit = 5& return = column Perl
使用complex_to_query
: - column:0 = name& -columns:1 = column& -limit = 5& -where.-or.customer_id = 1& -where.-或。服务=时间表&安培;返回=柱jQuery和PHP非常相似。使用complex_to_query的Perl也非常类似于它们。但没有一个看起来完全一样。
答案 0 :(得分:48)
对您的JSON文本进行URL编码(https://en.wikipedia.org/wiki/Percent-encoding)并将其放入单个查询字符串参数中。例如,如果您想传递{"val": 1}
:
mysite.com/path?json=%7B%22val%22%3A%201%7D
请注意,如果您的JSON太长,那么您将遇到URL长度限制问题。在这种情况下,我会使用POST
一个正文(是的,我知道,当你想要获取某些内容时发送一个POST
不是“纯粹的”并且不适合REST范例,但是是您的特定于域的基于JSON的查询语言。)
答案 1 :(得分:5)
答案 2 :(得分:4)
另一个选项可能是node-querystring。它也使用了与你目前列出的方案类似的方案。
npm
和bower
都可以使用,这就是我使用它的原因。
答案 3 :(得分:4)