FastAPIが「WEB+DB PRESS」の最終号で特集されているのを見て、試してみることにしました。
Flaskについて試したばかりですが、ここで使われているWSGIにかわるASGIというものがFastAPIでは使われているようです。
「WEB+DB PRESS」の記事で、「WSGIの精神を引き継ぎながら非同期処理に対応したASGI」「WSGIと同じ目的をもちつつ非同期処理を活用してより複雑なプロトコルに対応したASGI」とあるように、非同期処理について強化されていることがわかります。
個人的にはサーバサイドのテクノロジーはGoが進んでいた感じをもっていましたが、Pythonもでおくれていないという印象をもちました。
参考) https://aiacademy.jp/media/?p=988
インストール
pip3 install fastapi uvicorn
※ERROR: streamlit 1.12.0 requires gitpython!=3.1.19, which is not installed. がでたがそのままにした。
demo.py
1 2 3 4 5 6 |
from fastapi import FastAPI app = FastAPI() @app.get("/") async def hello(): return {"message" : "FastAPI DEMO"} |
まずは簡単な動作確認でした。
次にGraphQLを使った興味深い実装を見つけましたので、参考にさせていただきました。
https://zenn.dev/nameless_sn/articles/gql_fastapi_tutorial
GraphQLは下記でも以前使ったことがありますが、RESTに比べて表現できることが多いので、一つのエンドポイントでもたくさんの機能が実装できそうです。
http://bitlife.me/bc/2023/01/04/
インストール
pip3 install sqlalchemy strawberry-graphql
複数のレコードをクエリ結果として表示させたかったため、リストを登録してみました。
main.py
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 |
import strawberry from fastapi import FastAPI from strawberry.asgi import GraphQL from typing import List @strawberry.type class User: id: int name: str @strawberry.type class Query: @strawberry.field def user(self) -> List[User]: return [User(id=1, name="user01"), User(id=2, name="user02")] schema = strawberry.Schema(query=Query) graphql_app = GraphQL(schema) app = FastAPI() app.add_route("/graphql", graphql_app) |
またここから掘り下げていきたいです。