著作一覧 |
ちょっと迷ってるので考えを整理するためにメモ。
状況:JavaのオブジェクトをバイナリシリアライゼーションしてPOSTする。
問題:サーバは何を返送するのがきれいか。
わかっていること。HTTPのメソッドはGETとPOSTがある(DELETEとかもあるし、HEADもあるが、この場合関係ないので無視)。
GETは、ファイル転送要求なので、パスに対して(それがなんであれ)ファイルが返送される。それはそういうものだとして。
POSTってのは、なんだろう? 投稿と考えれば投稿結果が返ることになる。実体はフォームに対してHTMLが返るとしても、意味的には投稿した文章が反映された文章が返るという処理だろう。
でも、今やPOSTは投稿とは限らない。さらに実装を考えると型を無視するのもなんか気持ちよくない。public T post(T data);
と同じTとしたい。で、String post(String newOpinion);
というのはきれいだが、ここではObjectを送りたいのである。
でも、それはそれとして、POSTはやっぱり投稿だと考えることもできる。その場合、オブジェクトを投稿したら、結果を反映したHTMLが返るのが良いかな。トマトをぶつけたらトマトが返ってくるのではなく説教が返ってくるということだ。なんのことやら。
でも、フォームは文字列で、それに対して文字列が返るという、基本型での型の対称性を考えてしまうと、オブジェクトを送ったらオブジェクトが返るほうがきれいな気もする。でも、そのオブジェクトをデシリアライズしたら文字列になるのだとしたらなんかばかばかしい。
アドホックにやるなら、なんでもできるんだからオブジェクトを返すのが良さそうなのだが。
ジェズイットを見習え |
引数と返り値が同じというのと、対称性ってのは、違う気が。
そうですねぇ。<br>なんとなく壁にボールを投げたらはねかえってくるようなものを思い浮かべちゃったからだなぁ。
イメージとしてはリクエストの反射としてのレスポンスなんだけど(というかフィルターのようにサーバーを見ている時点で妙なんだが)そのあたりでいろいろ考えているうちに引っ張って来たんだろうなぁ。<br>でもまあ、型の対称性があるメソッド(やっぱりフィルターか)――ということで。っていうかタイトルがHTTPのとなってるな。
> 投稿と考えれば投稿結果が返ることになる。(略)意味的には投稿した文章が反映された文章が返るという処理だろう。<br><br>RFC的にはそんなことないと理解してます。でかいもん投げ易いというだけ。<br><br>RMI over HTTP?
いや、だったらPOSTなんてメソッド名を付けるとはちと考えにくい(だってGETときたらPUTとなるのが普通だと思うんだけど。もっとも英語で考えられるわけじゃないから、POSTが普通でしょと言われるとそうかなぁ、とも思うけど)<br>RFCに書かれているのは含意じゃなくて動作の規定だから「そんなことない」は正しいと思うけど。だからバイナリー送ろうとしているわけだし(というか既に送りまくってるし)。
ちなみにRMIというよりは単にエンベロープとしてJavaのクラスを使うってだけの話です。(メソッドを呼ぶというのとは随分感触が違う)