LoginSignup
12

More than 1 year has passed since last update.

[Python]FastAPIのチュートリアルをやってみた

Posted at

タイトルの通りですが、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のパスオペレーションはこのようになります:
@app.get("/some/url")
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などフレームワーク独自の考え方の部分は、さすがに理解度が落ちました😅

翻訳に参加もできるようです
(気になるなぁ。。。)

なんか作ってみようかな!

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
12