class: title, smokescreen, shelf, no-footer # Web API <div class=footnote> <small><small> もう少し詳細な説明は、 システム構築ガイドの付録 <A HREF="http://sysbuild-entrance.fml.org/ja/900_appendix/www/api/"> Web API </A> を参照 </small></small> </div> --- name: web-api class: compact # Web API <small>- (たぶん)HTTPを使う仕事の依頼なら何でもWeb API -</small> <div class=footnote> <small><small> (脚注1) RESTとCRUDは同じだよね?という説明をされれば、 腑に落ちる人が続出するらしいです。 システム構築ガイドの <A HREF="http://sysbuild-entrance.fml.org/ja/900_appendix/www/api/rest-api/"> 付録 </A> を参照 <br> (脚注2) リモートで関数実行と言えば、 RPC (Remote Procedure Call)という概念もあるんですけども、 授業でやってないですな <br> もちろん概念としてはWeb APIもRPCの一種になります </small></small> </div> <small> - 商用インターネットが流行し、 24時間365日ネットワークとサーバが動いているのが当たり前になると - HTTPを使い、他のサーバへ仕事を依頼し、処理結果をもらうこともできますよね?ね? - 考え方は関数呼び出しと同じです。 ただ、 今まで授業でやった**関数呼び出しは、同じプログラムの中での呼び出し方** (一つのプログラムの中で閉じた方法;もちろん、そのPC限定)だけでした - HTTPを使えば、ネットワークごしに仕事を依頼できますよね? ``` main() --(関数呼び出し)--> janken() ブラウザ --HTTP--> WWWサーバ --(関数呼び出し)--> janken() ブラウザ --HTTP--> WWWサーバ --(Web API,HTTP)--> janken APIサーバ ``` <small> 注: ちなみに中央が今回の課題、 最下段は次回(ただしジャンケンではなく書誌情報検索でやってもらいます) </small> </small> --- class: compact # Web APIの鉄板コンビ <div class=footnote> <small><small> (脚注1) システム構築ガイドの <A HREF="http://sysbuild-entrance.fml.org/ja/900_appendix/www/api/"> Web API </A> も参照 <br> (脚注2) <B> JavaScript(JS)のオブジェクト </B>は、他の言語の連想配列やハッシュのことです。 オブジェクト指向プログラミングのオブジェクトではありません。 ただ、 JSオブジェクトを使い、 プロトタイプベースのオブジェクト指向っぽい書き方がJSでも出来ます </small></small> </div> <small> - わりと何でもWeb APIと言えてしまいますが、鉄板の構成(組み合わせ)があります - **REST(ful) API** - **JSON** (JavaScript Object Notification) - RESTは事実上HTTPを使うことで、 JSONはJSの連想配列(Pythonの辞書型に相当)を使うと考えてOK - データのやりとりには 「JSの連想配列の形式をもつ文字列 = **JSON**」 を使います ``` [実行例] (これは何度もやりましたね?) $ curl http://api.fml.org/api/janken/v1 {"aite":0} ``` この `{"aite":0}`の形式がJSONです (`{キー:値}`形式) </small> --- name: json class: compact # JSON <div class=footnote> <small><small> </small></small> </div> <small> `{ キー: 値 }`形式です。 **値の部分**には、 **どんな型の変数**でも入ります。 また**dictを要素とする配列もJSON** ``` { キー: 数値 } { キー: 文字列 } { キー: 配列 } { キー: dict } [ dict1, dict2, dict3, ] [例] { "aite": 0 } { "aite": "guu" } { "aite-3tebun": [ 0, 1, 2 ] } { "janken": { "aite": 0 } } [ { "aite": 0 }, { "jibun": 1 }, { "kekka": 2 } ] ``` <small> 空白や改行は無視されます。 Web APIの際は転送サイズを小さくするためにも細密充填がよいのですが、 人間が見るときは適当な空白や改行があるべきです。 見やすくする整形ツールがいろいろあるので使ってください (ちなみにCLIの定番はjqコマンド) <br> なお、正確なJSONフォーマットはJSのオブジェクトより少し厳格です。 詳細な解説は MDNの [JSON](https://developer.mozilla.org/ja/docs/Web/JavaScript/Reference/Global_Objects/JSON) を参照のこと </small> </small>