疑問
- 以下の用語を区別して例を含めて書く
冪等
- 冪等性とは、ある操作を1回行っても複数回行っても結果が同じということ
- よく例にあげられるのは、i = 0 と i = i + 1 である。
var i = 0; // i は必ず 0 になる:冪等性が保たれる
// 実行する度に i が 1 足される。(実行回数によって、 i の値が変わってしまう)
// :冪等性が保たれない
i = i + 1
- 他に例を挙げるなら、 copy も同様である。
copy a.txt b.txt # copy できた
copy a.txt b.txt # 既に b.txt があるため、copy できない overwrite b.txt? (y/n [n])
- なぜこの動作が大切?GET, DELETEが冪等であるべき。
注: ハンドラをべき等にするかどうか検討する必要があります。Cloud Tasks は「少なくとも 1 回」処理を行うように設計されています。つまり、タスクが正常に追加された場合、キューはそれを少なくとも 1 回配信します。まれに複数のタスクが実行されることもあるので、繰り返し実行されても有害な副作用が生じないように注意してください。←これはまじで重要な制約
APIライブラリごとの制約
- Pythonでは答えがlease_tasks_responseが32MBを超えないようにって書いてある
- オプション明示するとどう?
URLFetch
- URLFetchはHTTPリクエストを送るためのライブラリ。GAE, GASの両方で提供されていて便利
- URLFetchをあえて使う利点はほとんどないが、URLFetchのFetchAsync()だったら使う価値あり。
- このメソッドは非同期で各URLにアクセスできるので、GETメソッドでのアクセスを大量に行う場合はとても高速です。
- FetchAsync()の解説ページはこちら [[『非同期URLFetchの使い方』 >http://www.synaesthesia.jp/googleAppEngine/URLFetchAsync.php ]]
ソケット通信
- socket通信は主に外部DBがHTTPよりも低いインターフェースしか持っていない場合に使う
- HTTPリクエストももとを正せばソケット通信だが、DBはなぜかそれより下位の仕組みを使っている
HTTP2
OpenAPI
- =Swagger
- OpenAPIはRESTふl APIを記述するためのフォーマット
- SwaggerはOpenAPIを用いてREST APIを作るためのツールセット。
- https://qiita.com/disc99/items/37228f5d687ad2969aa2
gRPC
- 多言語型
- protoはプロトコルバッファでインターフェースを定義する。入出力の型と、どのような関数があるかを定義することができる。これによって、どんな言語で実装しても大丈夫になるのでいろいろと楽
- gRPCのもちべ
- もともとはStubbyというRPCを使っていたけど同等以上の機能が標準で出てきたので新しく作ろうという感じ
- gRPCの特徴は
- ローカル関数呼び出すような感じ
Cloud Endpoints
- デプロイすると、「API とサービス」一覧に表示されます
- Googleで発行したApiKey認証をバックエンド(アプリ側)に実装せずに可能になります
- アクセス制限が必要なAPIの場合「API とサービス」からAPIキーを発行してopenapi.yamlで定義すれば、アクセス制限が可能です
- モニタリングやログの確認が画面上からできます
- リクエスト数、レイテンシ、5xxエラー率など確認が可能です
- デベロッパーポータルでopenapi.yamlをもとに作成されたAPIドキュメント自動作成機能