标准化的方式来序列化JSON查询string?
我试图build立一个restful的API
,我正在努力如何序列化JSON
数据到HTTP query string
。
在请求中需要传递一些强制参数和可选参数,例如(在下面表示为JSON对象):
{ "-columns" : [ "name", "column" ], "-where" : { "-or" : { "customer_id" : 1, "services" : "schedule" } }, "-limit" : 5, "return" : "table" }
我需要支持各种不同的客户端,所以我正在寻找一个标准化的方式来转换这个JSON对象的查询string。 有一个,它看起来如何?
另一种select是允许用户在消息正文中传递json对象,但是我读到应该避免它( 带请求体的HTTP GET )。
有什么想法吗?
编辑澄清:
列出一些不同的语言如何编码上面给定的json对象:
-
jQuery
使用$.param
.param:-columns [] =名称和 – 列[] =列& – 地方[ – 或] [客户ID] = 1和 – 地方[ – 或] [服务] =计划和限制= 5&返回=列 - 使用
http_build_query
PHP
:-columns [0] = name&-columns [1] = column&-where [-or] [customer_id] = 1&-where [-or] [services] = schedule&-limit = 5&return = column -
Perl
使用URI::query_form
:-columns = name&-columns = column&-where = HASH(0x59d6eb8)& – limit = 5&return = column - 使用
complex_to_query
Perl
:-columns:0 = name&-columns:1 = column&-limit = 5&-where.-or.customer_id = 1&-where.-or.services = schedule&return = column
jQuery和PHP非常相似。 使用complex_to_query的Perl也非常类似于它们。 但没有一个看起来完全一样。
URL编码( https://en.wikipedia.org/wiki/Percent-encoding )您的JSON文本,并将其放入一个单一的查询string参数。 例如,如果你想通过{"val": 1}
:
mysite.com/path?json=%7B%22val%22%3A%201%7D
请注意,如果您的JSON时间太长,则会遇到URL长度限制问题。 在这种情况下,我会使用POST
与一个正文(是的,我知道,发送一个POST
当你想要获取的东西是不是“纯”,不适合到REST范例,但也不是你的域特定的基于JSON的查询语言)。
另一个选项可能是node-querystring 。 它也使用了类似的scheme,以你迄今列出的。
它在npm
和bower
都可用,这就是为什么我一直在使用它。
你怎么试试这个发送他们如下:
http://example.com/api/wtf? [-columns][]=name& [-columns][]=column& [-where][-or][customer_id]=1& [-where][-or][services]=schedule& [-limit]=5& [return]=table&
我尝试了一个REST客户端
而在服务器端(Ruby与Sinatra),我检查了参数,它给了我你想要的。 🙂