5
9

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

More than 3 years have passed since last update.

Python FastAPIの入門

Last updated at Posted at 2020-08-24

はじめに

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するおまじない

詳しくはここなど

fastAPI_00.png

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

fastAPI_01.png
faseAPI_02.png

5
9
0

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
5
9

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?