今回はこのセクションの和訳です。
機械翻訳をガッツリ使って、一部意訳しているので間違いがあるかもしれません。
SQLModelを使ったFastAPIのレスポンスモデル
それでは、FastAPIのresponse_modelをSQLModelで使用する方法をご紹介します。
インタラクティブなAPIドキュメント¶。
これまで使用してきたコードでは、APIドキュメントはクライアントが送信しなければならないデータを知っています。
インタラクティブな API ドキュメント UI
Swagger UIは、標準のOpenAPIを使用してすべてのデータスキーマ(データ形状)を持つAPIを定義した大きなJSONコンテンツを読み込み、それを美しいUIで表示します。
FastAPIは、Swagger UIがそれを読むためのOpenAPIを自動的に生成します。
そして、APIが扱うデータのスキーマを知るためにPydanticモデル(ここではSQLModelモデル)とタイプアノテーションを使用して、あなたが書いたコードに基づいて生成されます。
レスポンスデータ¶について
しかし、これまでのところ、APIドキュメントのUIは、アプリが送り返すレスポンスのスキーマを知りません。
コード200の「Successful Response」の可能性があることはわかりますが、レスポンスデータがどのようになっているのかはわかりません。
レスポンスデータのスキーマがないAPIドキュメントのUI
今、私たちはFastAPIに受信したいデータを伝えるだけで、送り返したいデータはまだ伝えていません。
今、それをやってみましょう。🤓
response_modelの使用
response_modelを使って、送り返したいデータのスキーマをFastAPIに伝えることができます。
例えば、同じHero SQLModelクラスを渡すことができます(Pydanticモデルでもあるため)。
# Code above omitted 👆
@app.post("/heroes/", response_model=Hero)
def create_hero(hero: Hero):
with Session(engine) as session:
session.add(hero)
session.commit()
session.refresh(hero)
return hero
# Code below omitted 👇
response_model¶のヒーローのリスト
Pydanticのフィールドと同じように、他のタイプアノテーションを使用することもできます。例えば、Herosのリストを渡すことができます。
まず、typingからListをインポートし、List[Hero]でresponse_modelを宣言します。
from typing import List, Optional
# Code here omitted 👈
@app.get("/heroes/", response_model=List[Hero])
def create_hero(hero: Hero):
with Session(engine) as session:
session.add(hero)
session.commit()
session.refresh(hero)
return hero
# Code below omitted 👇
FastAPIとレスポンスモデル¶について
FastAPIは、このresponse_modelを使って、レスポンスのデータ検証とフィルタリングを行います。つまり、これは我々のアプリケーションとクライアントの間の契約のように機能します。
これについては、FastAPIのドキュメントであるresponse_modelを参照してください。
新しいAPIドキュメントのUI
ここでdocs UIに戻ると、受信するレスポンスのスキーマが表示されていることがわかります。
レスポンスデータのスキーマがないAPI Docs UI
クライアントは期待すべきデータを知ることができます。
自動クライアント¶。
response_modelを使うことの最も目に見える利点は、API docs UIに表示されることです。
しかし、FastAPIがこのモデルを使用して応答データの自動データ検証とフィルタリングを行うなど、他の利点もあります。
さらに、スキーマは標準を使用して定義されているため、これを利用できるツールがたくさんあります。例えば、クライアントジェネレータは、多くの言語でAPIと対話するために必要なコードを自動的に作成することができます。
infomation
標準について興味がある場合、FastAPIは内部的にJSON Schemaを使用するOpenAPIを生成します。
これについては、FastAPIドキュメント - ファーストステップですべて読むことができます。
Recap
response_modelを使用して、送り返したいデータのスキーマをFastAPIに伝え、素晴らしいデータAPIを手に入れましょう。😎