标准化的方式来序列化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,以你迄今列出的。

它在npmbower都可用,这就是为什么我一直在使用它。

你怎么试试这个发送他们如下:

 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),我检查了参数,它给了我你想要的。 🙂

在这里输入图像描述