このリポジトリは、Pythonを使用したAPIサーバー開発の効率化を目的としたテンプレートリポジトリです。以下の特徴を持っています:
- OpenAPIによるAPI定義の自動生成
- DevContainerによる開発環境のDockerコンテナ化
- 依存パッケージの厳密なバージョン管理
- Python標準ライブラリの
unittest
ですぐにテストを始められる環境 flake8
、black
、isort
によるコード品質の自動チェックと整形- GitHub Actionsによる継続的インテグレーション(CI)の整備
このテンプレートを使用することで、各案件に向けたAPIサーバー開発を迅速に開始し、一貫した開発スタイルを維持することができます。
Important
VSCode による開発を推奨します。
- VSCodeの拡張機能Visual Studio Code Remote Containersをインストールします。
- コマンドパレットを開き、
Remote-Containers: Reopen in Container
を選択します。
functions-framework --target=example --debug
http://localhost:8080 に対してリクエストを送ることができるようになります。
python -m unittest
JSONリクエスト
curl -X POST -H "Content-Type: application/json" localhost:8080 -d '{"api_name": "Solver", "name": "Taro"}'
JSON Linesリクエスト
DATA='
{"api_name": "Solver", "name": "Taro"}
{"api_name": "Solver", "name": "Jiro"}
{"api_name": "Solver", "name": "Siro"}
'
curl -X POST -H "Content-Type: application/jsonl" localhost:8080 -d "$DATA"
OpenAPIを使用してAPIを定義します。schema.yaml
にOpenAPIの定義を記述し、以下のコマンドでPythonの dataclass に変換します:
./scripts/convert_open_api_to_dataclass.sh
生成されたコードは src/models/ に配置されます。自動生成されたコードは直接編集せず、schema.yaml
を更新して再生成してください。
- 必ず手動で更新すること
- 直接依存しているパッケージのみを書くこと
- PyPIで利用可能なパッケージのみを書くこと
例) flake8 の バージョンを 1.2.X にしたい場合: flake8~=1.2.3
参考: https://www.python.org/dev/peps/pep-0440/#version-specifiers
以下のコマンドによる更新は禁止します。
pip freeze > requirements.in
pip freeze >> requirements.in
以下のコマンドを実行します。
./scripts/generate_lockfile.sh
-
コンテナが起動しない
- Dockerが正しくインストールされているか確認します。
- VSCodeのRemote Containers拡張機能が最新版か確認します。
-
依存パッケージのインストールに失敗
requirements.in
のバージョン指定が正しいか確認します。- インターネット接続を確認します。
-
APIの自動生成が失敗
schema.yaml
の構文が正しいか確認します。- Dockerコンテナ内で実行しているか確認します。
このテンプレートリポジトリの保守運用に関する詳細はCONTRIBUTING.mdを参照してください。リリース手順についても同ファイルに記載されています。