GAEを使ったCloud Endpointsについて
https://cloud.google.com/endpoints/?hl=ja
CloudEndpointsを使うことで簡単にGAE(GoogleAppEngine)にAPIサーバを作ることが出来る。
Extensible Service Proxyとうなんかすごいやつが、認証やモニタリング、ロギングなどをやってくれ、AppEngineの画面やEndpointの画面でいろいろ見れる
スタンダード環境とフレキシブル環境があり、スタンダードはJavaとPython2.7
フレキシブルは、Go, PHP, node.js, ruby Python3, .NET等がある(β)
ざっくり説明
Swagger(OpenAPI)ベースのAPI定義をCloudEndpointにデプロイ(上の図だとGoogleServiceManagementって部分)して、
それに対応したサーバーサイドを書き、GAEにデプロイする(上の図のAPIContainer)感じになる。
GAEにデプロイするサーバサイドのフレームワークは、PythonだとFlaskとか、PubyだとSinatraとか、NodeだとExpressとかになる。
サンプルコードはチュートリアルからDL出来るので、動かすには困らないし、そのまま拡張しちゃえばいい。
APIキーはGCPのコンソールで発行できる。
しかし、APIキーだけでは認証が弱いので、組み合わせて認証を利用できる
それが
JWT(json web token) ・・・ アプリケーション同士の認証に有効
GoogleIDAuth、FirebaseAuth、Auth0 ・・・ ユーザの認証に有効
となっている。
JWTもまた、GCPコンソールから発行可能なので、キーの発行にコマンドなども必要ないし、管理もGCP上で出来る
認証はAPIキーと、上記2つのどちらかを組み合わせてやる形になる。
この2つの組み合わせが正しくなければ動かない、というふうに作る。
ここまでこなせば、あとはSwaggerのルールにそいながら設定し、実装していけばできていくんだと思う。
Endpointが問題なく動作すれば、モニタリング画面が自動でできる
APIの仕様書もできる
やってて詰まったポイント
プロジェクト外のCloudSQLにつなごうとする場合
IAMの設定
つなぎに行くがわのCloudSQL APIの有効化
が必要となる。
前者は別プロジェクトにアクセスしに行くためににAppEngineのIDを通しておく、ということ
後者はCloudSqlProxyをうごかすためにある
参考:https://cloud.google.com/sql/docs/app-engine-connect?hl=ja
あと、Swaggerをある程度わかったほうがいい。全く知らずに取り組んで少し困った。
チュートリアルはこちら
https://cloud.google.com/endpoints/docs/openapi/tutorials?hl=ja
沿っていけば動く元は作れるはず。別プロジェクトのCloudSQLにつなぐなら前項 を気をつけること