【これは約 4 分の記事です】
Web APIについて学習する教材やツールの作成を計画中。
当初、PHPを想定していたので、LaravelでAPI作成するレクチャーできないかと考えたのだが、
Laravelは環境づくりが大変で、APIのスクリプトの書き方が難しい
ということで却下。Apache+PHPの場合、URLのパスは、ソース格納フォルダの階層に通常は依存してしまうので、PHPは簡単にAPI作るには向かないような気がした。なのでLaravelのようなURLのパスをルーティングとして定義できるフレームワークが必要なのだが、正直Laravelで記述をするのはかなり重く、API研修というよりLaravel研修になりかねないと感じた。
そこで、PythonのFastAPIを試しに入れてみた。
試しの所要時間
- Docker環境の作成・・・とりあえず試すだけなら15分。自分にとって使いやすいDocker環境にするのに2時間
- API作成・・・5分
こんな簡単にAPIが作れるのか!!!
とちょっとショックを受けた。
Dockerの手順とチュートリアルの手順がかみあっていない
FastAPIのチュートリアルはかなりわかりやすく、ほぼそのまま手順に従えばOKなのだが、Dockerによるデプロイ手順と、チュートリアル手順がかみ合っていない。
この手順では、APIのポートは80
ところが、チュートリアルでのAPIのポートは8000
docker-composeで単純にポート割当変えればいいのかと思ったのだが、それだけだと、
$ uvicorn main:app --reload
としたとき、8000ポートに割り当てられたmain.pyの方を動かしてしまうのか、80ポートでのmain.pyの情報をリロードした状態にならない。
ということで、Dockerファイルの書き方を変更。Dockerのほうを8000ポートを使う手順に。
構成はこんな感じ。
├── app
│ └── main.py
├── docker-compose.yml
└── Dockerfile
Dockerfile
FROM tiangolo/uvicorn-gunicorn-fastapi:python3.7
EXPOSE 8000
CMD ["uvicorn", "main:app", "--reload", "--host", "0.0.0.0", "--port", "8000"]
docker-compose.yaml
version: '3'
services:
app:
container_name: FastAPI
build: .
volumes:
- ./app :/app
ports:
- "8000:8000"
と修正。main.pyはテスト内容によって毎回変わるので割愛。
これで、
- Dockerでデプロイしたものがそのままチュートリアルで使用できる
- main.pyファイルに変更を加えたら、すぐにリロードがかかり変更が反映される
ようになった。
防災SNSアドバイザー。情報処理安全確保支援士第5338号。ネットワークスペシャリスト。ITコーディネータ
東北大学大学情報科学研究科第2期生。1994年からインターネットに携わる。システムベンダーの総務社内SEとして、社内システムの構築運用やBCP策定、従業員教育に関与。2015年情報セキュリティ専門法人「まるおかディジタル株式会社」を福井県坂井市丸岡町に設立し現在に至る。研修では基本的に防災のお話以外では着物でお話させていただいております。
情報セキュリティ・IT関連資格取得・企業防災(BCP)の組織内教育・コンサルティング・支援・取材のお問い合わせなどございましたら、こちらからご連絡ください。
メール・お電話・FAX・Facebook
https://www.maruoka-digital.jp/contact/form/