質問: {"array": "hoge1, hoge2, hoge3"} function() { $.ajax({ url: xxxxxxxxxx, type: "GET", dataType: "json", data: req }).done(function(res) { }).fail(function(res) { }); ``` いずれもサーバサイドのパース処理次第でどうにでもなるのかなと思いますが、 クエリパラメータの仕様として階層構造を持ったデータの渡し方が定められているのでしょうか? クライアントもサーバもオレオレ仕様でやり取りしているだけでしょうか? RESTFulなAPIを設計した場合、このようにGETで階層構造を持つデータをやり取りする際に、 煩雑だなと感じています。(全てPOSTもありなのではないかと。) これは蛇足ですが、もしご存知でしたら サーバサイド(Java)のクエリパラメータのパース処理ライブラリがあればご教示ください。
回答: この手は、API 実装でのインターフェイスに関する決め事の話ですね。厳密な RESTful の思想を貫く学問としてシステムを構築しているのであれば以下は参考にならないでしょう。ビジネスでゴールを取るのであれば以下の方法が1つの解決策になると思います。 私が過去作ったシステムでは、JavaScript 側が扱っている構造を持つ情報をサーバに渡して、それに応じた結果を JavaScript で反映させる。という流れの情報を得る API の整備が幾つか必要だった事がありますが、JavaScript からは共通的なパラメータとは別に、オブジェクト自体を JSON 形式で POST して、サーバサイドが Java であれば JSONIC などパース用のライブラリを使って解釈させ、結果も JSON で返却しましたね。これを Ajax で都度呼び出す様な処理を行ってブラウザ上の表示内容を更新させました。 GET でも、データをシリアライズなり一手間加えれば渡せるでしょうし、RESTful の万能な解決策がもしあるならば、それに従うべきでしょうが、配列なりの構造を持つを情報を取り扱う機能をユーザが直接 URL を叩いて GET でアクセスするような状況は考えにくいので RESTful にこだわって設計や実装が滞るのは違うと考えてしまいます。あと、POST を使ったのは GET の QueryString では HTTPS の暗号化の対象外になるため(パラメータの用途にもよるでしょうが)セキュリティ的な面を考えて使えなかった。というのもあります。 実装上、JavaScript で渡しやすい形式、書きやすいコードとなると、JSON を使うのが良い落とし所なのではないでしょうか? データを渡す外枠となるコンテナの仕様を JSON なりの整った形に固定できれば、結果としてその後の修正や拡張で影響を受ける箇所は、個別の実装だけになるため、大枠の構造を固めてしまうのは有効な手です。似た系統の API が幾つか存在するのであれば、後々の事を考えて、サーバ、クライアント共にある程度処理を揃えておくのが良いでしょう。 以上、ご参考になれば幸いです。