LoginSignup
0
0

More than 1 year has passed since last update.

SQLModel×FastAPIのチュートリアルのメモ③ SQLModelを使ったFastAPIのレスポンスモデル

Posted at

今回はこのセクションの和訳です。

機械翻訳をガッツリ使って、一部意訳しているので間違いがあるかもしれません。

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を手に入れましょう。😎

0
0
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
0
0