はじめに
この記事は第3回目です。
前回は【Python+Flask】しりとりAPIを作ろう #2 ~しりとりプログラム作成を参照してください
前回はしりとりプログラムを作成しました
今回はそのしりとりプログラムをFlaskを用いてしりとりAPIにします
環境
Dockerを使います
Docker DesktopもしくはDocker composeを使えるようにしておいてください
実際にやってみよう
最後にGithubリポジトリのURLを貼っているので良かったら参考にどうぞ
フォルダ構成
.
├── app
│ ├── output.txt
│ ├── server.py
│ └── siritori.py
├── docker
│ ├── Dockerfile
│ └── requirements.txt
└── docker-compose.yml
dockerフォルダ内
Dockerfileは安定のマルチステージビルド
FROM python:3.9-buster as builder
ENV PYTHONUNBUFFERED=1
COPY /docker/requirements.txt /
RUN /usr/local/bin/python -m pip install --upgrade pip \
&& pip install -r requirements.txt --no-cache-dir
FROM python:3.9-slim-buster
ENV PYTHONUNBUFFERED=1
COPY --from=builder /usr/local/lib/python3.9/site-packages /usr/local/lib/python3.9/site-packages/
RUN adduser myuser && chown -R myuser home/myuser
USER myuser
WORKDIR /home/myuser/app
CMD ["python", "server.py"]
他のライブラリを追加する場合はrequirements.txt
に追加します
docker compose build
を忘れない
flask
docker-compose.yml
version: "3"
services:
app:
build:
context: .
dockerfile: ./docker/Dockerfile
volumes:
- ./app:/home/myuser/app
tty: true
restart: always
ports:
- 5000:5000
appフォルダ内
output.txtとsiritori.pyは前回作成しました
レスポンスはユースケースに合わせる
from flask import Flask, Response, request
from siritori import Siritori, FlagType
app = Flask(__name__)
siritori = Siritori("output.txt")
@app.route("/siritori", methods=['POST'])
def index():
global siritori
data = request.get_json()
text = data["noun"]
next_noun, type = siritori.return_nextnoun(text)
if type is FlagType.USER_WIN.value:
next_noun + "\nあなたの勝ちです"
elif type is FlagType.USER_LOSE.value:
next_noun + "\nあなたの負けです"
return Response(response=next_noun, status=200)
@app.route("/init", methods=["GET"])
def init():
global siritori
siritori = Siritori("output.txt")
return Response(response="しりとり" ,status=200)
if __name__ == "__main__":
app.debug = True
app.run(host="0.0.0.0", port=5000)
エンドポイント | 概要 |
---|---|
/init | 初期化 |
/siritori | しりとりする |
実際に遊んでみよう!
まずはコンテナを立ち上げます
$ docker compose build
$ docker compose up -d
次にcurl
で試します
流れとしては以下の通りです
- /initを叩く
- ゲーム終了まで/siritoriを叩く
$ curl localhost:5000/init
しりとり
$ curl -X POST -H "Content-Type: application/json" -d '{"noun": "りんご"}' http://localhost:5000/siritori
ごんげん
「ん」がついたのであなたの勝ち
最後に
全3回に分けてしりとりAPIを作成しました
APIなのでさまざまなユースケースに対応しているので実装してはいかがでしょうか
入力がひらがな
のみ対応している
漢字やカタカナを入力したい場合はgooさんが提供しているひらがな化API
を用いた方が良いだろう
1回目
2回目