12章

内容

今回は,俳句を投稿して,閲覧やいいねができるアプリケーションを作る.
この投稿したり,いいねをする機能をつけるために,REST APIを使って実装する.下の表はAPIでのコマンドと内容だ.


準備

俳句アプリを作るために,以下を入力して,ローカルにダウンロードした.

git clone https://github.com/tomomano/learn-aws-by-coding-source-code.git

デプロイを行う

先程ローカルにダウンロードしたフォルダを利用して進めていく.まずはディレクトリの移動から行う.

cd learn-aws-by-coding-source-code/handson/bashoutter

それから,awsのシークレットキーを設定し,以下を入力

python3 -m venv .env
source .env/bin/activate
pip install -r requirements.txt
cdk deploy

デプロイが完了すると,次の画面が出てくるはずだ.

後に出力された2つの「=」以下のものは使用するため,ひかえておく.

デプロイができ,awsAPI Gatewayをみると,以下の画面のようになっているはずだ.

また,S3→バケットでは,以下の画面のようになっている.


APIリクエストの送信

まず,デプロイの実行時に出力された,Bashoutter.BashoutterApiEndpointの「=」以下をENDPOINT_URLに代入しておく.

export ENDPOINT_URL=「=」以下

では,俳句を投稿する前に一覧を取得する.当たり前だが,何も投稿していないので空の配列が返ってくる.

http GET "${ENDPOINT_URL}/haiku"

これから俳句を投稿して,もう一度一覧を取得してみる.
まず,POSTコマンドで俳句を投稿する.

http POST "${ENDPOINT_URL}/haiku" \username="松尾芭蕉" \first="閑さや" \second="岩にしみ入る" \third="蝉の声"

このコマンドを入力すれば,以下のように出力される.なお,俳句の内容は何でも良い.

追加した俳句を取得するため,もう一度GETコマンドを使い,取得する.

http GET "${ENDPOINT_URL}/haiku"


俳句の追加ができていることが確認できる.


次に,俳句にいいねをつける.いいねしたい俳句のitem_idを使用することで対象の俳句にいいねができる.
先程投稿した,松尾芭蕉の俳句にいいねしたい場合を考える.POSTやGETコマンドでの出力のitem_idを見てみる.
入力は以下のようにする.今回はitem_idをどうしたかの写真も載せておく.

http PATCH "${ENDPOINT_URL}/haiku/haiku_id"

もう一度GETコマンドを入力する.すると出力は以下のようになる.likesが1.0になっているので,いいねができている.

これで一通りやり方はわかったので,最後に俳句を削除する.削除には,削除する俳句のitem_idと,DELETEコマンドを使用する.

http DELETE "${ENDPOINT_URL}/haiku/item_id"

もう一度GETコマンドを打ってみると,空になっているはずだ.


大量のAPIリクエストの送信

大量のAPIリクエストをシミュレートするために用意されているclient.pyを使い,APIを300回実行してみる.

python client.py $ENDPOINT_URL post_many 300

すると以下のような出力が返ってくる.これはAPIリクエストの実行が解決したことを表している.

それがわかれば,データベースが重くならないように削除する.

python client.py $ENDPOINT_URL clear_database

削除が完了した.


GUIを動かしてみる

GUIを動かすために,デプロイしたときに出力されたBashoutter.BucketUrlの「=」以下のリンクにアクセスする.
その後,API Endpoint URLにもデプロイ時出力されたものを入力する.
そして,名前と好きな俳句を投稿する.


日本語にしていて意味は違ってしまったが,真ん中の役職を押すと,投稿できる.また,右の更新で最新の俳句リストに更新でき,俳句の下のハートマークでいいねができる.


後片付け

俳句アプリに満足すれば,今回も以下のコマンドでスタックを削除する.

cdk destroy

cdkのバージョンにより,S3のバケットを空にしてから出ないとスタックの削除ができない.
その場合は以下のコマンドを入力してからスタックを削除する.

aws s3 rm 削除するバケット名 --recursive

おわりに

今回は,俳句アプリを用いてAPIを使ってみた.GETやPOSTの使い方を学び,webとコマンドの対応を見てみたりができるようになった.