読者です 読者をやめる 読者になる 読者になる

すなばいじり

はてなブログを使って、トンピーを揃えるまで止めないブログ。ふっくらかわいい。


こちらは、水先案内です。
あわせて読みたい 機能 をどうぞご利用ください。
Proxy Hacking Protection を どうぞご利用ください。


Hatena::diary ネタまとめ
Hatena::blog SLview+ 開発日誌
Develop::site Cosmonaut
人気記事表示するやつと、それをTwitterへアナウンスするやつ

100文字から溢れる色々なお話 170121


はい。

アンサーから書き始めると「その例えは、GETとPOSTの考え方の例え」になります。

しかし、100文字で収まるような話ではないので、続きます。(約1700文字あります)

※時間がある時に、もう少し記事を補強します。

 

(ゲーム日記の人が増田だとIDコール飛ばないから、代わりに書いてとスカイプ... - 極端に言ってしまえば、GETという名前の窓口とPOSTという名前の窓口があって、問い合わせた結果の窓口が同じ、という考え方 - psne のコメント / はてなブックマーク - aukusoe - はてなハイク

 

 

まずは、「どの環境で」「何を」「どのように」「どう結果を得たいのか」を整理しないと、何とも言えないやつなのですが、とりあえずWebと書いてあるので、ブラウザ基準で考えると色々資料が出てくるので、それに合わせます。

developer.mozilla.org

 

上記のページは、言い換えると

はてなハイクや匿名ダイアリー(増田)で、何か文字を書いて「投稿」するボタンを押せば、データが送信されて、誰でも読めるようになる

という仕組みの説明です。

 

まずは、データを手元からサーバへ送り出す(送信・リクエスト)部分を図にしてみましょう。

クライアント→サーバ

クライアント(この絵ではブラウザ)からサーバにデータを送る部分ですが、幾つかの方法があります。

  • GET
  • POST
  • PUT
  • DELETE
  • (その他の環境による色々)

MDNの記事本文にもあるGETとPOSTで見てみましょう。

サーバー上で良い感じに扱える

例えば、PHPの場合ではPOSTのみ扱う変数「$_POST」、GETのみ扱う「$_GET」、そして両方(とcookie)を扱う「$_REQUEST」があります。

サーバー側のPHPスクリプトは、

  • GETメソッドで送られてきた場合は「$_GET」と「$_REQUEST」
  • POSTメソッドで送られてきた場合は「$_POST」と「$_REQUEST」

でデータを取り扱う事ができます。「$_REQUEST」が便利そうなので、受け取り側はそのような仕組みを使うと良いかもしれません。

 

という事を約100文字で書いたものがブックマークコメントになります。

 

送信・リクエストについては一旦ここまでにしておき、サーバからの返答(応答・レスポンス)を見てみましょう。

レスポンス

レスポンスの際には、受け取った際のステータス(200や404、500など)と一緒に、人間やブラウザ側のスクリプトが理解できるデータを応答します。

 

データを受け取ったブラウザは、文字列や画像であれば表示し、JSONP等のデータであれば、スクリプト等の適切な相手に渡します。

JSONPデータを渡す

 

受け取ったデータがJSONPであれば、対応する関数へ渡されます。

JSONPデータを受け取った

 

ん?何だか話が飛んでない?
そもそもJSONPってどういう仕組み?

 

例えば、ブラウザ側のJavaScriptでPOSTを使ったリクエストを行うとします。
※一例として、jQueryではAjaxという方法があります。

リクエストを送ると、大抵はレスポンスとして何かが返ってきますので、受け取ります。

受け取ったものがJSONであった場合、対応する関数にJSONの中身となるデータを与える事ができます。
そして、JSONPとする事で、別のドメインでも扱えるようになります。(が、Ajax使うなら別にJSON「P」じゃなくても良いのでは?と感じると思います。)

JSONP - Wikipedia

 

所感

話を戻して。

POSTに統一しておけば、サーバログにクエリ文字列が出てこない等、色々あるかと思います。

 

結論として、POSTでJSONは出来るのでしょうか?

※ハイクはJSONですが、元記事はJSONPなので、そちらに合わせます。

「POSTのJSONP」が正直よく分からないのですが、文章の全体を読んで想像すると、

  • POSTを使ってリクエスト(検索ワード)を送って
  • JSONPで受け取りたい

というお話なのかな?と思ったやつでした。

もし本当に「そうではなくて、リクエストがJSONPのフォーマットなのです」というのなら、方法は多分あるのですがそれは別に何かのクエリとしてJSONフォーマットとして送れば良いのでは?と思ったやつです。Fileとして送っても良いのですが難解になるだけであり、面倒ですよね。

 

やはり、何をどう送って、どう受け取りたいのか。を詰めないとダメそうなお話でした。

 

 

 

人力検索なりスタックオーバーフローなり、みんな大好き知恵袋なり、色々ありますので、15分悩んだ場合は身近なところからパブリックなところまで、色々聞いてみると良いのではないかな と思うやつです。

という事をお伝えください。 id:aukusoe さん

 

くまやつ。

リズムだいすき こぐまのトンピー ぬいぐるみ

リズムだいすき こぐまのトンピー ぬいぐるみ