ホームページ > バックエンド開発 > Python チュートリアル > FastAPIでOpenAPI仕様を使用してAPIインターフェースを定義する方法

FastAPIでOpenAPI仕様を使用してAPIインターフェースを定義する方法

王林
リリース: 2023-07-28 12:09:13
オリジナル
1797 人が閲覧しました

OpenAPI 仕様を使用して FastAPI で API インターフェイスを定義する方法

はじめに:
Web API を作成する場合、適切な API ドキュメントは非常に重要です。開発者が API をすぐに理解して使用できるように、明確なドキュメントとインターフェイス定義を提供できます。 OpenAPI 仕様は、標準ベースの方法で API ドキュメントを定義および生成できる強力な機能とエコシステム サポートを備えたユニバーサル API 記述言語です。 FastAPI は、OpenAPI 仕様を完全に統合し、強力な自動ドキュメント生成および検証機能を提供する最新の Python Web フレームワークです。この記事では、OpenAPI 仕様を使用して FastAPI で API インターフェイスを定義する方法を紹介し、対応するコード例を示します。

1. FastAPI と pydantic ライブラリをインストールする
始める前に、FastAPI と pydantic ライブラリをインストールする必要があります。これらは次のコマンドでインストールできます:

pip install fastapi
pip install uvicorn[standard]
pip install pydantic
ログイン後にコピー

2. 単純な API インターフェイスの作成
最初に、OpenAPI 仕様の使用方法を示すための単純な API インターフェイスを作成します。 main.py という名前のファイルに、次のコードを記述します。

from fastapi import FastAPI

app = FastAPI()

@app.get("/hello")
def hello():
    return {"message": "Hello, World!"}
ログイン後にコピー

このコードは、/hello の GET リクエスト インターフェイスを作成し、# を含む JSON レスポンスを返します。 ##メッセージフィールド。次に、アプリケーションを実行する必要があります。次のコマンドで実行できます:

uvicorn main:app --reload
ログイン後にコピー

3. OpenAPI ドキュメントの生成

アプリケーションの実行後、ブラウザで
http://localhost:8000/docs を開くことができます。自動生成された API ドキュメントにアクセスします。このページは、OpenAPI 仕様に基づいて FastAPI によって自動生成されたドキュメントです。パス、リクエスト メソッド、リクエスト パラメータ、レスポンスの例など、/hello インターフェイスの詳細を確認できます。さらに、ドキュメント ページでこのインターフェイスをテストすることもできます。

4. パラメーター定義を使用する

実際のアプリケーションでは、通常、ユーザー入力を受け取るためにパラメーターを使用する必要があります。 FastAPI は、パス パラメーター、クエリ パラメーター、リクエスト本文パラメーター、リクエスト ヘッダー パラメーターなどのパラメーターを定義する複数の方法を提供します。以下では、これらのパラメーターの使用方法を説明します。

4.1 パス パラメータ

パス パラメータは URL の一部であり、動的変数を受け取るために使用されます。
{} を通じてパス パラメータを定義できます。以下の例では、ユーザー ID をパス パラメーターとして受け入れるインターフェイスを作成します。

from fastapi import FastAPI

app = FastAPI()

@app.get("/users/{user_id}")
def get_user(user_id: int):
    return {"user_id": user_id}
ログイン後にコピー

アプリを実行し、ブラウザで

http://localhost:8000/users/1 にアクセスすると、JSON 応答 {"user_id": 1 が返されます。 }

4.2 クエリ パラメータ

クエリ パラメータは URL の一部であり、ユーザーから渡されたキーと値のペアを受け取るために使用されます。 FastAPI では、関数パラメータのデフォルト値を通じてクエリ パラメータを定義できます。以下の例では、
limit および offset クエリ パラメーターを受け入れるインターフェイスを作成します。

from fastapi import FastAPI

app = FastAPI()

@app.get("/users/")
def get_users(limit: int = 10, offset: int = 0):
    return {"limit": limit, "offset": offset}
ログイン後にコピー

アプリケーションを実行し、ブラウザで

http://localhost:8000/users/?limit=20&offset=10 にアクセスすると、JSON 応答が得られます{ 「制限」: 20、「オフセット」: 10}

4.3 リクエスト本文パラメータ

リクエスト本文パラメータは、HTTP リクエスト本文を通じて渡されるデータであり、通常はより大きなデータを受信するために使用されます。 FastAPI では、
pydantic ライブラリのモデルを通じてリクエスト本文のパラメーターを定義できます。次の例では、ユーザー情報をリクエスト本文パラメーターとして受け入れるインターフェイスを作成します。

from fastapi import FastAPI
from pydantic import BaseModel

app = FastAPI()

class User(BaseModel):
    name: str
    age: int

@app.post("/users/")
def create_user(user: User):
    return {"user": user}
ログイン後にコピー

アプリケーションを実行した後、

curl などのツールを使用して POST リクエストを送信します。

curl -X POST -H "Content-Type: application/json" -d '{"name":"Alice", "age": 25}' http://localhost:8000/users/
ログイン後にコピー

JSON 応答を取得します

{"user" : {"名前": "アリス"、"年齢": 25}}

4.4 リクエスト ヘッダー パラメーター

リクエスト ヘッダー パラメーターは、HTTP リクエスト ヘッダーを通じて渡されるパラメーターであり、通常、セキュリティ検証情報を渡すために使用されます。 FastAPI では、関数パラメータの
Header() メソッドを使用してリクエスト ヘッダー パラメータを定義できます。以下の例では、api_key リクエスト ヘッダー パラメーターを受け入れるインターフェイスを作成します。

from fastapi import FastAPI, Header

app = FastAPI()

@app.get("/protected/")
def protected(api_key: str = Header(...)):
    return {"api_key": api_key}
ログイン後にコピー
アプリケーションを実行し、ブラウザで

http://localhost:8000/protected/ にアクセスし、カスタム api_key リクエスト ヘッダーを指定すると、次の情報を取得できます。 JSON レスポンス {"api_key": }

結論:

この記事では、OpenAPI 仕様を使用して FastAPI で API インターフェイスを定義する方法を紹介します。 FastAPI が提供するデコレータとパラメータ型アノテーションを使用することで、API インターフェイスを簡単に定義および検証できます。自動的に生成される OpenAPI ドキュメントを通じて、API インターフェイスをすぐに理解して使用でき、他の開発者と簡単に共同作業したり通信したりできます。この記事が、FastAPI での API インターフェイスのより適切な定義と使用に役立つことを願っています。

以上がFastAPIでOpenAPI仕様を使用してAPIインターフェースを定義する方法の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。

ソース:php.cn
このウェブサイトの声明
この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、admin@php.cn までご連絡ください。
人気のチュートリアル
詳細>
最新のダウンロード
詳細>
ウェブエフェクト
公式サイト
サイト素材
フロントエンドテンプレート