1
/
5

森田ドラゴンのインターンシップ ~33日目~ お天気APIが一段落

こんにちは、高知からリモートインターンしている森田ドラゴンです。明日はクラウドお遍路に行くので、今から楽しみです(その前にスライド完成させないとダメですが)。今日は、前回悩みを解消できたこともあって、やっとお天気APIを動かせるところまで持っていくことができました。

Lambdaの改修

新しい機能を一つのLambdaで処理させるためにeventの内容を見る必要があります。api gwからlambdaに送られてくるeventsにはhttp等のデータも含まれています。

"httpMethod": "GET",
"body": null,
"resource": "/get_weather",
"queryStringParameters"{}

上はeventsから抜粋したものです。今回はhttpMethodはGETのみを使用するため、resourceで処理を分岐させます。

queryStringParametersは、GETで送られてきたクエリパラメータを格納しています。以前、「GETリクエストで、複数のデータを送るにはどうすればいいか」と悩んでいましたが、クエリパラメータに入れることで解決しました。

JSONで複数データを送るイメージだったので(おそらくできると思いますが)クエリパラメータのように、一つづつデータを送る方法が思いついていませんでした。

https://hoge.com/foo?bar=1&fuga=

上の形式で送ることができます。この時気をつけたいのは、Stringを表現する"ダブルクォーテーションの扱いです。今回はパラメータとして、天気を表示してくれるAPIのURIを送信しています。なぜそんなことをしているかというと、フロント側からはCORSの問題で、リクエストを送れないからです。

URIの中にURIを含ませるには"ダブルクォーテーションもしくはシングルクォーテションで囲む必要があります。そうると、パラメータはStringとして認識されますが、同時に"ダブルクォーテーションがデータの中に含まれてしまいます。これを取り除く必要がLambdaで必要でした。

詰まったエラー

Lambdaはサクサク進みましたが、テンプレート編集時と、JS編集時に詰まっていました。

2つのAPI GWのイベントをキャッチするために以下のコードを追加しました。

   Events:
        GetWeahterImg:
          Type: Api
          Properties:
            # RestApiId: !Ref ApiGateway
            Path: /list
            Method: get
        GetWeatherList:
          Type: Api
          Properties:
            # RestApiId: !Ref ApiGateways
            Path: /get_weather
            Method: get

RestApiIdをコメントアウトしていますが、これはAPI GW明示的に作成できなかったためです。この部分はSAMがよしなにやってくれていますが、少し気になります。また時間を見つけて試してみたいです。

JSでは、ローカルで叩いていたAPIのURIと、フロントで使用しているURIが違っていたため、いくら試しても通らない状態に陥っていました。反省です。

次のタスク

お天気APIは動かせましたが、課題はまだ終わっていません。以下のことをやる必要があります。

・S3の名前を統一する
・エンドポイントをjsに渡す方法を考える
・テスト項目を書き直す
・レスポンス(例外処理)を書く
・設計を書き直す

途中で設計を変更したので、テストやドキュメントを書き直すのが大変そうですが、綺麗に書き直したいと思っていたので楽しみです。

株式会社サーバーワークスでは一緒に働く仲間を募集しています
1 いいね!
1 いいね!
同じタグの記事
今週のランキング
株式会社サーバーワークスからお誘い
この話題に共感したら、メンバーと話してみませんか?