65

安らかなものを構築しようとしていますが、データをAPIにシリアル化する方法に苦労しています。JSONHTTP query string

リクエストで渡す必要がある必須およびオプションの引数が多数あります。たとえば、(以下の JSON オブジェクトとして表されます):

{
   "-columns" : [
      "name",
      "column"
   ],
   "-where" : {
      "-or" : {
         "customer_id" : 1,
         "services" : "schedule"
      }
   },
   "-limit" : 5,
   "return" : "table"
}

さまざまな数の異なるクライアントをサポートする必要があるため、この json オブジェクトをクエリ文字列に変換する標準化された方法を探しています。ありますか、それはどのように見えますか?

もう 1 つの方法は、ユーザーがメッセージ本文で json オブジェクトを渡すことを許可することですが、それを避ける必要があることを読みました ( HTTP GET with request body )。

何かご意見は?

明確にするために編集:

上記の特定の json オブジェクトをいくつかの異なる言語でエンコードする方法をリストします。

  • jQuery使用$.param: -columns[]=name&-columns[]=column&-where[-or][customer_id]=1&-where[-or][services]=schedule&-limit=5&return=column
  • PHP使用http_build_query: -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
  • Perl使用complex_to_query: -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 も、それらにかなり似ています。しかし、まったく同じに見えるものはありません。

4

4 に答える 4

64

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ベースのクエリ言語でもありません) .

于 2013-04-08T07:53:38.267 に答える
5

次のように送信してみてはいかがでしょうか。

http://example.com/api/wtf?
[-columns][]=name&
[-columns][]=column&
[-where][-or][customer_id]=1&
[-where][-or][services]=schedule&
[-limit]=5&
[return]=table&

REST クライアントで試してみました ここに画像の説明を入力

そして、サーバー側 (Ruby with Sinatra) でパラメーターをチェックしたところ、まさにあなたが望むものが得られました。:-)

ここに画像の説明を入力

于 2016-10-20T13:56:18.993 に答える