Djangoを勧める回答が多いですが、フルスタックフレームワークはブラックボックスな部分が多くて初学者にはお勧めしません。また、近年ではReactなどのSPAを利用するケースが増えてきていますのでサーバー側はテンプレートエンジンなど使用せずにAPIに徹するというのがいいと思っています。そこで私が一番お勧めするのはFlask
に代わって期待されているFastAPIです。このFastAPIはWSGIに代わる、ASGIという非同期処理のPythonのWebappの仕様に対応していてその名の通りとてもパフォーマンスが高いのですが、そんなことよりも素晴らしいのはPythonの型を存分に活かしている点です。
公式Webのコードを引用します。
- from typing import Optional
- from fastapi import FastAPI
- app = FastAPI()
- @app.get("/")
- def read_root():
- return {"Hello": "World"}
- @app.get("/items/{item_id}")
- def read_item(item_id: int, q: Optional[str] = None):
- return {"item_id": item_id, "q": q}
このように一見Flaskとほとんど同じ書き方なのですが、注目するポイントは関数の引数に型情報を付けてあげると自動的にHTTPリクエストのパラメータのvalidationにも適用されるという点です。例えばこの例では`item_id: int`となっていますので `GET /items/1` は有効ですが `GET /items/item1` というリクエストが来ると自動的に422エラーになってitem_idの型が違うというメッセージがクライアントに返されます。
- GET /items/item1 HTTP/1.1
- HTTP/1.1 422 Unprocessable Entity
- content-length: 104
- content-type: application/json
- date: Wed, 19 May 2021 00:42:29 GMT
- server: uvicorn
- {
- "detail": [
- {
- "loc": [
- "path",
- "item_id"
- ],
- "msg": "value is not a valid integer",
- "type": "type_error.integer"
- }
- ]
- }
この型チェックはpathパラメータだけでなく、query, form, bodyのjsonすべてに対して適用可能です。しかも、なんとこれらの情報を利用して自動でOpenAPIのドキュメントまで生成してくれます。
それ以外にもやはり新しいだけあって非常に設計が良くなされており、まだまだ比較的新しいのですが、すでにWeb上に日本語の記事がいくつも上がっていてその注目度の高さがうかがえます。
脚注