こんにちは、高知からリモートインターンしている森田ドラゴンです。前回、お天気APIを作成し、webサイトと連携させることができました。ただ、まだドキュメントを書き直したり、といった作業が必要になってきます。残っている作業は
・エンドポイントをjsに渡す方法を考える
・テスト項目を書き直す
・レスポンス(例外処理)を書く
・設計を書き直す
の4つになります。今日作業したのは上の2つです。
エンドポイントをJSに渡す
今の段階では、SAMで作成したApi Gatewayのエンドポイントを、コンソールから確認した後、JSに書き込んでいます。二度手間で面倒だなと思ったので、デプロイ時に渡す方法を色々考えていました。思いついたのは以下の二つで、
- Outputsに出力して、参照する
- S3等の外部ファイルにエンドポイントを出力する
1の方法を試していたんですが、Serverless::Apiを定義していなかったせいでエラーが発生し、詰まっていました。DefinitionBodyを適当に定義すればできそうな気もしますが、OpenAPI周りについての理解が浅いので、手をつけたくないなーと思い、理解できるやり方を調べていました。
調べていく中で、Outputsパラメータはテンプレートが互いにやり取りするためのインターフェースのようなものだと気づきました。テンプレート同士が参照しあえるなら、他のファイルやコマンドを使ってよみだせそうですが、そういった説明の記事には出会えませんでした。今思いついたんですが、aws cliから読み出せそうな気がするので、シェルで組み込んであげればいい感じにできそうな気がします。
テストを書き直す
テストを書くことは慣れていなくて、いまだに混乱します。テストを切り分けると、
・pythonコードのテスト
・AWSリソースのテスト
と2つにわけることができます。コードを見直すと、Api Gatewayから返すべきエラー( 404 無効なアクセス等)と、Lambdaから返すべきエラー( 出力に失敗した等 )の住み分けができていないので、ここも修正する必要がありそうです。HTTPステータスコードの意味を確認しながら進めていますが、Api Gatewayの理解が甘いので、設定方法をまた調べる必要がありそうです。
PythonのテストはPytestを使って関数の動作をテストしていきます。予期したデータを返してくれるかどうかでテストしていますが、正解となるデータをどうやって用意すればいいのか?正解となるデータが正しいと判断するにはどうすればいいのか?と堂々巡りなことを考えてしまいます。
ある程度は、こちらが適当に決めてしまってもいいのだとは思います。@pytest.fixture() という、「テストに使うデータをテストする」という関数を見つけたので、この機能を掘り下げます。ドキュメントを読んでいても、@pytest.fixture() 使い方がいまいちつかめていないので、チュートリアルを別のファイルでやろうと思います。