Python FastAPIの入門


はじめに

Tornadoの紹介記事を書いていて、APIServerとしても良いよ的な私感を述べたのですが
APIServerならこの、FastAPIもとても良いので記事にしてみました

対象

フルスタックエンジニア、フロントエンジニア、これから勉強しようと思っている人、Pythonが好きな人
python3.6以上がインストールされていること

ゴール

インストール〜簡易的なJSONを出力できるまで
Swaggerでの表示

FastAPIとは

後発なWebFrameworkだけあってモダンな機能、パフォーマンスの高さを意識したものとなっている

以下公式
- 高速:NodeJSやGolangと同等のパフォーマンス
- 開発効率UP
- 簡単:使いやすく学習しやすいように設計されている
(ドキュメントを読む時間が短縮・・・英語ですけどね
- 自動インタラクティブドキュメント(Swagger UI)

インストール

FastAPIのインストールはpipのみ

$ pip install fastapi uvicorn

pipってとても優秀なやつだと、毎回思います(コピペ)
今回はASGI Serverになるuvicornもinstall

Hello World

これもまぁ公式なのですが

main.py
from fastapi import FastAPI

app = FastAPI()

@app.get("/")
def read_root():
    return {"Hello": "World"}

起動&閲覧

ターミナルで

$ uvicorn main:app --reload --host 0.0.0.0

reloadオプションはソース変更時自動的にreloadしてくれるもの
hostオプションに0.0.0.0を指定してるのはDockerやVMで起動し、PortForwardするおまじない

詳しくはここなど

simple JSON

さらに、ちょっとコードを加えることで簡易的なAPIっぽくしてみます
localhost:8000/docs にアクセスするだけでSwaggerがみれてしまうんですね

ソース

main.py
from fastapi import FastAPI
from typing import Optional

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}

@app.get("/booklist")
def read_books():
    books = [
        {'name': 'book1', 'price': 1500},
        {'name': 'book2', 'price': 1800},
        {'name': 'book3', 'price': 2300},
    ]
    return books