Copyright (C) Ken'ichi Fukamachi, 2021-2025. CC BY-NC-SA 4.0
+ - 0:00:00
Notes for current slide
Notes for next slide

Web API

もう少し詳細な説明は、 システム構築ガイドの付録 Web API を参照
1/4

Web API - (たぶん)HTTPを使う仕事の依頼なら何でもWeb API -

(脚注1) RESTとCRUDは同じだよね?という説明をされれば、 腑に落ちる人が続出するらしいです。 システム構築ガイドの 付録 を参照
(脚注2) リモートで関数実行と言えば、 RPC (Remote Procedure Call)という概念もあるんですけども、 授業でやってないですな
もちろん概念としてはWeb APIもRPCの一種になります

  • 商用インターネットが流行し、 24時間365日ネットワークとサーバが動いているのが当たり前になると
  • HTTPを使い、他のサーバへ仕事を依頼し、処理結果をもらうこともできますよね?ね?
    • 考え方は関数呼び出しと同じです。 ただ、 今まで授業でやった関数呼び出しは、同じプログラムの中での呼び出し方 (一つのプログラムの中で閉じた方法;もちろん、そのPC限定)だけでした
    • HTTPを使えば、ネットワークごしに仕事を依頼できますよね?
main() --(関数呼び出し)--> janken()
ブラウザ --HTTP--> WWWサーバ --(関数呼び出し)--> janken()
ブラウザ --HTTP--> WWWサーバ --(Web API,HTTP)--> janken APIサーバ

注: ちなみに中央が今回の課題、 最下段は次回(ただしジャンケンではなく書誌情報検索でやってもらいます)

2/4

Web APIの鉄板コンビ

(脚注1) システム構築ガイドの Web API も参照
(脚注2) JavaScript(JS)のオブジェクト は、他の言語の連想配列やハッシュのことです。 オブジェクト指向プログラミングのオブジェクトではありません。 ただ、 JSオブジェクトを使い、 プロトタイプベースのオブジェクト指向っぽい書き方がJSでも出来ます

  • わりと何でも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です ({キー:値}形式)

3/4

JSON

{ キー: 値 }形式です。 値の部分には、 どんな型の変数でも入ります。 またdictを要素とする配列もJSON

{ キー: 数値 }
{ キー: 文字列 }
{ キー: 配列 }
{ キー: dict }
[ dict1, dict2, dict3, ]
[例]
{ "aite": 0 }
{ "aite": "guu" }
{ "aite-3tebun": [ 0, 1, 2 ] }
{ "janken": { "aite": 0 } }
[ { "aite": 0 }, { "jibun": 1 }, { "kekka": 2 } ]

空白や改行は無視されます。 Web APIの際は転送サイズを小さくするためにも細密充填がよいのですが、 人間が見るときは適当な空白や改行があるべきです。 見やすくする整形ツールがいろいろあるので使ってください (ちなみにCLIの定番はjqコマンド)
なお、正確なJSONフォーマットはJSのオブジェクトより少し厳格です。 詳細な解説は MDNの JSON を参照のこと

4/4

Web API - (たぶん)HTTPを使う仕事の依頼なら何でもWeb API -

(脚注1) RESTとCRUDは同じだよね?という説明をされれば、 腑に落ちる人が続出するらしいです。 システム構築ガイドの 付録 を参照
(脚注2) リモートで関数実行と言えば、 RPC (Remote Procedure Call)という概念もあるんですけども、 授業でやってないですな
もちろん概念としてはWeb APIもRPCの一種になります

  • 商用インターネットが流行し、 24時間365日ネットワークとサーバが動いているのが当たり前になると
  • HTTPを使い、他のサーバへ仕事を依頼し、処理結果をもらうこともできますよね?ね?
    • 考え方は関数呼び出しと同じです。 ただ、 今まで授業でやった関数呼び出しは、同じプログラムの中での呼び出し方 (一つのプログラムの中で閉じた方法;もちろん、そのPC限定)だけでした
    • HTTPを使えば、ネットワークごしに仕事を依頼できますよね?
main() --(関数呼び出し)--> janken()
ブラウザ --HTTP--> WWWサーバ --(関数呼び出し)--> janken()
ブラウザ --HTTP--> WWWサーバ --(Web API,HTTP)--> janken APIサーバ

注: ちなみに中央が今回の課題、 最下段は次回(ただしジャンケンではなく書誌情報検索でやってもらいます)

2/4
Paused

Help

Keyboard shortcuts

↑, ←, Pg Up, k Go to previous slide
↓, →, Pg Dn, Space, j Go to next slide
Home Go to first slide
End Go to last slide
Number + Return Go to specific slide
b / m / f Toggle blackout / mirrored / fullscreen mode
c Clone slideshow
p Toggle presenter mode
t Restart the presentation timer
?, h Toggle this help
Esc Back to slideshow
Copyright (C) 2021-2025 Ken'ichi Fukamachi, All rights reserved. CC BY-NC-SA 4.0. We appreciate AWS Academy Japan for the offer of the learning environment.