コンテンツへスキップ

最初のステップ

最もシンプルなFastAPIファイルは次のようになります。

from fastapi import FastAPI

app = FastAPI()


@app.get("/")
async def root():
    return {"message": "Hello World"}

これを main.py ファイルにコピーしてください。

ライブサーバーを実行する

$ <font color="#4E9A06">fastapi</font> dev <u style="text-decoration-style:solid">main.py</u>

  <span style="background-color:#009485"><font color="#D3D7CF"> FastAPI </font></span>  Starting development server 🚀

             Searching for package file structure from directories
             with <font color="#3465A4">__init__.py</font> files
             Importing from <font color="#75507B">/home/user/code/</font><font color="#AD7FA8">awesomeapp</font>

   <span style="background-color:#007166"><font color="#D3D7CF"> module </font></span>  🐍 main.py

     <span style="background-color:#007166"><font color="#D3D7CF"> code </font></span>  Importing the FastAPI app object from the module with
             the following code:

             <u style="text-decoration-style:solid">from </u><u style="text-decoration-style:solid"><b>main</b></u><u style="text-decoration-style:solid"> import </u><u style="text-decoration-style:solid"><b>app</b></u>

      <span style="background-color:#007166"><font color="#D3D7CF"> app </font></span>  Using import string: <font color="#3465A4">main:app</font>

   <span style="background-color:#007166"><font color="#D3D7CF"> server </font></span>  Server started at <font color="#729FCF"><u style="text-decoration-style:solid">http://127.0.0.1:8000</u></font>
   <span style="background-color:#007166"><font color="#D3D7CF"> server </font></span>  Documentation at <font color="#729FCF"><u style="text-decoration-style:solid">http://127.0.0.1:8000/docs</u></font>

      <span style="background-color:#007166"><font color="#D3D7CF"> tip </font></span>  Running in development mode, for production use:
             <b>fastapi run</b>

             Logs:

     <span style="background-color:#007166"><font color="#D3D7CF"> INFO </font></span>  Will watch for changes in these directories:
             <b>[</b><font color="#4E9A06">&apos;/home/user/code/awesomeapp&apos;</font><b>]</b>
     <span style="background-color:#007166"><font color="#D3D7CF"> INFO </font></span>  Uvicorn running on <font color="#729FCF"><u style="text-decoration-style:solid">http://127.0.0.1:8000</u></font> <b>(</b>Press CTRL+C
             to quit<b>)</b>
     <span style="background-color:#007166"><font color="#D3D7CF"> INFO </font></span>  Started reloader process <b>[</b><font color="#34E2E2"><b>383138</b></font><b>]</b> using WatchFiles
     <span style="background-color:#007166"><font color="#D3D7CF"> INFO </font></span>  Started server process <b>[</b><font color="#34E2E2"><b>383153</b></font><b>]</b>
     <span style="background-color:#007166"><font color="#D3D7CF"> INFO </font></span>  Waiting for application startup.
     <span style="background-color:#007166"><font color="#D3D7CF"> INFO </font></span>  Application startup complete.

出力に、次のような行があります。

INFO:     Uvicorn running on http://127.0.0.1:8000 (Press CTRL+C to quit)

その行は、ローカルマシンでアプリが提供されているURLを示しています。

確認

ブラウザで http://127.0.0.1:8000 を開いてください。

JSON レスポンスは次のように表示されます。

{"message": "Hello World"}

インタラクティブ API ドキュメント

次に、http://127.0.0.1:8000/docs にアクセスしてください。

自動インタラクティブ API ドキュメント (Swagger UI が提供) が表示されます。

Swagger UI

代替 API ドキュメント

次に、http://127.0.0.1:8000/redoc にアクセスしてください。

代替の自動ドキュメント (ReDoc が提供) が表示されます。

ReDoc

OpenAPI

FastAPI は、API 定義の標準である OpenAPI を使用して、すべての API の「スキーマ」を生成します。

"スキーマ"

"スキーマ" とは、あるものの定義または説明です。それを実装するコードではなく、単なる抽象的な説明です。

API "スキーマ"

この場合、OpenAPI は、API のスキーマを定義する方法を規定する仕様です。

このスキーマ定義には、API パス、それらが受け取る可能性のあるパラメーターなどが含まれます。

データ "スキーマ"

"スキーマ"という用語は、JSONコンテンツのような、あるデータの形状を指すこともあります。

その場合、JSONの属性やデータ型などを意味します。

OpenAPI と JSON Schema

OpenAPIはAPIのAPIスキーマを定義します。そしてそのスキーマには、JSONデータスキーマの標準であるJSON Schemaを使用して、APIが送受信するデータの定義(または「スキーマ」)が含まれています。

openapi.json を確認

生のOpenAPIスキーマがどのように見えるか興味がある場合は、FastAPIがすべてのAPIの説明を含むJSON(スキーマ)を自動的に生成します。

直接次のURLで確認できます: http://127.0.0.1:8000/openapi.json

JSONは次のようなものから始まります

{
    "openapi": "3.1.0",
    "info": {
        "title": "FastAPI",
        "version": "0.1.0"
    },
    "paths": {
        "/items/": {
            "get": {
                "responses": {
                    "200": {
                        "description": "Successful Response",
                        "content": {
                            "application/json": {



...

OpenAPI の用途

OpenAPIスキーマは、含まれている2つのインタラクティブなドキュメンテーションシステムを動かすものです。

そして、OpenAPIに基づいた代替手段は何十もあります。それらの代替手段のどれでも、FastAPIで構築されたアプリケーションに簡単に追加できます。

また、APIと通信するクライアント(フロントエンド、モバイル、IoTアプリケーションなど)のコードを自動的に生成するためにも使用できます。

ステップごとの要約

ステップ1: FastAPI をインポートする

from fastapi import FastAPI

app = FastAPI()


@app.get("/")
async def root():
    return {"message": "Hello World"}

FastAPI は、API のすべての機能を提供する Python クラスです。

技術的な詳細

FastAPIStarlette を直接継承したクラスです。

FastAPI でも、Starlette のすべての機能を使用できます。

ステップ2: FastAPI "インスタンス" を作成する

from fastapi import FastAPI

app = FastAPI()


@app.get("/")
async def root():
    return {"message": "Hello World"}

ここで、app 変数は FastAPI クラスの「インスタンス」になります。

これは、すべての API を作成するための主要な対話ポイントになります。

ステップ3: パスオペレーション を作成する

パス

「パス」とは、最初の / から始まる URL の最後の部分を指します。

したがって、次のようなURLの場合

https://example.com/items/foo

...パスは次のようになります。

/items/foo

情報

「パス」は一般的に「エンドポイント」または「ルート」とも呼ばれます。

API を構築する際、「パス」は「関心事」や「リソース」を分離する主要な方法です。

操作

ここでの「操作」は、HTTP「メソッド」のいずれかを指します。

次のいずれか

  • POST
  • GET
  • PUT
  • DELETE

...そして、さらに珍しいもの

  • OPTIONS
  • HEAD
  • PATCH
  • TRACE

HTTPプロトコルでは、これらの「メソッド」のいずれか(または複数)を使用して各パスと通信できます。


APIを構築する際には、通常、特定のHTTPメソッドを使用して特定の動作を実行します。

通常は以下のものを使用します

  • POST: データの作成。
  • GET: データの読み取り。
  • PUT: データの更新。
  • DELETE: データの削除。

したがって、OpenAPIでは、各HTTPメソッドは「オペレーション」と呼ばれます。

私たちもそれらを「オペレーション」と呼びます。

パス操作デコレータ を定義する

from fastapi import FastAPI

app = FastAPI()


@app.get("/")
async def root():
    return {"message": "Hello World"}

@app.get("/")FastAPI に、その直下の関数が次の要求を処理する責任があることを伝えます。

  • パス /
  • get 操作 を使用する

@decorator 情報

Pythonのその@something構文は「デコレーター」と呼ばれます。

関数の上に置きます。きれいな飾り帽子のように(おそらくそれが語源でしょう)。

「デコレーター」は下の関数を受け取り、それに対して何かを行います。

私たちの場合、このデコレーターは、下の関数がパス /操作 get で対応することをFastAPIに伝えます。

それは「パスオペレーションデコレーター」です。

他の操作も使用できます

  • @app.post()
  • @app.put()
  • @app.delete()

そして、より珍しいもの

  • @app.options()
  • @app.head()
  • @app.patch()
  • @app.trace()

ヒント

各操作 (HTTP メソッド) は自由に利用できます。

FastAPI は特定の意味を強制しません。

ここでの情報はガイドラインとして提示されており、必須ではありません。

例えば、GraphQLを使用する場合、通常、すべての操作をPOST操作のみで実行します。

ステップ4: パス操作関数 を定義する

これが私たちの「パス操作関数」です。

  • パス: は / です。
  • 操作: は get です。
  • 関数: は「デコレーター」の下の関数(@app.get("/")の下)です。
from fastapi import FastAPI

app = FastAPI()


@app.get("/")
async def root():
    return {"message": "Hello World"}

これはPython関数です。

FastAPI は、GET 操作を使用して URL 「/」へのリクエストを受信するたびに、この関数を呼び出します。

この場合、async 関数です。


async def の代わりに通常の関数として定義することもできます

from fastapi import FastAPI

app = FastAPI()


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

注釈

違いがわからない場合は、Async: "お急ぎですか?" を確認してください。

ステップ5: コンテンツを返す

from fastapi import FastAPI

app = FastAPI()


@app.get("/")
async def root():
    return {"message": "Hello World"}

dictliststrintなどの単一の値を返すことができます。

Pydantic モデルを返すこともできます (これについては後で詳しく説明します)。

他にも多くのオブジェクトやモデルが自動的にJSONに変換されます (ORMなども含む)。お気に入りのものを使ってみてください。すでにサポートされている可能性が高いです。

まとめ

  • FastAPI をインポートする。
  • app インスタンスを作成します。
  • @app.get("/") のようなデコレータを使用して、パスオペレーションデコレータ を記述します。
  • パスオペレーション関数を定義します。例えば、def root(): ...
  • コマンド fastapi dev を使用して開発サーバーを実行します。