タイトルの通りですが、FastAPIの公式ドキュメントにチュートリアルがあったので、一通りやってみました。
私自身は最近プライベート(Pythonチュートリアルをやってみた)や業務でPythonを触り始めたばかりで、Pythonのフレームワークを扱ったことはありません。
Pythonのフレームワークといえば、DjangoやFlaskというイメージでしたが、「自動ドキュメント生成機能がすごいらしい」と聞いて気になっていたので、FastAPIを触ってみることにしました。
FastAPIとは
Python 製 Web フレームワークを Flask から FastAPI に変えた話
[FastAPI] Python製のASGI Web フレームワーク FastAPIに入門する
私も詳しくないのでこちらのふたつの記事を参考にさせていただいたのですが、Flaskに似たマイクロフレームワークで、Pythonで最近サポートされた機能(型ヒントなど)を生かしてOpenAPI(Swagger)仕様のAPIドキュメントを自動で生成する機能を持っています(APIを実装するだけで下記のドキュメントが自動で生成され、ブラウザでアクセスできるように)
また、ドキュメントが充実していて、チュートリアルとAdvanced User Guideの目次を一覧するだけでも、APIとして必要な機能が網羅されているのがわかります。
さらに、APIの書き方も直感的で、公式の代替ツールから受けたインスピレーションと比較によるとPythonの標準モジュールであるRequestsから影響を受けているとのことです。
使い方はとても簡単です。例えば、GETリクエストを実行するには、このように書けば良いです:
response = requests.get("http://example.com/some/url")
対応するFastAPIのパスオペレーションはこのようになります:
def read_url():
return {"message": "Hello World"}
他にも、Pydanticという型バリデーションライブラリを含んでいて、リクエスト・レスポンスのバリデーションを標準で効かせられたり、StarletteというフレームワークのTestClient
を使うことで、テストの中で簡単にリクエストを再現できます。
from fastapi import FastAPI
from fastapi.testclient import TestClient
app = FastAPI()
@app.get("/")
async def read_main():
return {"msg": "Hello World"}
client = TestClient(app)
def test_read_main():
response = client.get("/")
assert response.status_code == 200
assert response.json() == {"msg": "Hello World"}
チュートリアルをやってみた感想
所要時間は20時間でした。私はPython自体初学者で、本なども読むのが遅い方なので時間がかかった方だと思います。
まずチュートリアルの説明がめちゃくちゃ丁寧です。
チャプターごとにサンプルコードに記載してある内容を一つ一つ説明してくれますし、Pythonの基本用語まで備考として説明されていました。
また、認証に関してはトークンの扱いなど、APIを構築する上で必要な知識を含めて説明されていました。
ドキュメントが充実していて、公式サイトも見やすく、また、FastAPI自体が直感的にAPIを記述できるようになっているので、軽量で扱いやすいフレームワークであるという印象を受けました。
ただ、チュートリアルの半分くらいが日本語の翻訳がされておらず英語のままなので、Dependenciesなどフレームワーク独自の考え方の部分は、さすがに理解度が落ちました😅
翻訳に参加もできるようです
(気になるなぁ。。。)
なんか作ってみようかな!