我尝试创建了一个完善的演示应用程序,其中包含了FastAPI和Strawberry(GraphQL)的功能

首先

    • この記事では、最近 FastAPI と Strawberry(GraphQL) に入門した私が、FastAPI と Strawberry(GraphQL) が動作する諸々整ったデモアプリを使用する(作る)方法をメモとして残します。

 

    • Strawberry に関する記事(特にサンプルコード付き)は未だあまり少ない印象を受けましたので、Strawberry について入門する方の参考になればと思います。

FastAPI と Strawberry(GraphQL) に入門してから数週間なので、アンチパターンを踏んでいるかもしれませんが、サンプルコードの一つとしていただければと思います。 mm

这个演示应用的 GitHub

https://github.com/0machi/FastAPI_Strawberry_strawberry-sqlalchemy_DemoApp

良ければご参照ください。

使用科技

    • せっかくなので色々な技術に触れてみようと思い、下記を使用しました。

FastAPI

Strawberry, strawberry-sqlalchemy

SQLAlchemy 2.0
PostgreSQL, Supabase

Docker
Render

系统配置。

开发环境

    Docker で動くようにしています。

正式环境

    無料であることから、バックエンドは Render にデプロイしています。また、DB には Supabase を使用しています。

演示应用的使用方法

正式环境

获取 JWT

    id と password を指定して、JWT を取得します。
$ curl -Ss \
-X POST \
-H "Content-Type: application/json" \
--data '{ "query": "mutation { login(input: { id: \"fceef692-010b-480f-899c-5a6e8bab23a7\", password: \"admin\" }) { tokenType accessToken severErrors { msg } } }" }' \
https://fastapi-strawberry-strawberry-sqlalchemy.onrender.com/graphql | jq .
    JWT の取得結果の例
{
  "data": {
    "login": {
      "tokenType": "bearer",
      "accessToken": "eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9.eyJzdWIiOiJmY2VlZjY5Mi0wMTBiLTQ4MGYtODk5Yy01YTZlOGJhYjIzYTciLCJleHAiOjE2OTU1NDg0MTh9.YFvZL07ZTFDURfdzaU_Xk096iz2nLdeJ2gBcgmL6xSA",
      "severErrors": []
    }
  }
}

使用JWT进行GraphQL请求

    “Authorization: Bearer XXX” の XXX の部分に JWT を付与します。
curl -Ss \
-X POST \
-H "Content-Type: application/json" \
-H "Authorization: Bearer eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9.eyJzdWIiOiJmY2VlZjY5Mi0wMTBiLTQ4MGYtODk5Yy01YTZlOGJhYjIzYTciLCJleHAiOjE2OTU1NDg0MTh9.YFvZL07ZTFDURfdzaU_Xk096iz2nLdeJ2gBcgmL6xSA" \
--data '{ "query": "query { cities { cities { cityId cityName population } } }" }' \
https://fastapi-strawberry-strawberry-sqlalchemy.onrender.com/graphql | jq .
    取得結果
{
  "data": {
    "cities": {
      "cities": [
        {
          "cityId": 1,
          "cityName": "Los Angeles",
          "population": 3849000
        },
        {
          "cityId": 2,
          "cityName": "Santa Monica",
          "population": 91000
        },
        {
          "cityId": 3,
          "cityName": "Cebu",
          "population": 3000000
        }
      ]
    }
  }
}

开发环境

准备环境变量.

    以下のような内容を記載した dev.env をルートディレクトリに用意します。
ENV="dev"
POSTGRES_DB="fast_api"
POSTGRES_USER="fast_api"
POSTGRES_PASSWORD="fast_api"
POSTGRES_HOST="postgresql"
JWT_SECRET_KEY="m8ik2ZWT/W42g5osrCndxqTGBnDNzbmRvHUc6q0O++dxX406LCr50xKOUitXqMNE285vz7L+5KheK/sya3HelpY/Ky7rIoyZ4GuX92c/zvLAbyM19A4Y0BhBTtQlhu21zugINAAQuKlX7Wo2sYiuWpvwiSCOf9sqwTQ7SoQjdKzIzF271i/AqyPuqAQtYfpgyDOOQH8anJL3kuTWvbodeklZy7zl6cHhV8O68dltRSe056VLxgGGA8wD1zUEdpfsvP4GU9U8U1sO3ZXau18rUxbrpzmltazY/SBVdGdLDWAniAgbjRcBjVUHkhuSuvwlY36571f5BM2+7oDqkfWpLw=="
ACCESS_TOKEN_EXPIRE_MINUTES="30"

启动Docker

    • $ docker compose build –no-cache

 

    $ docker compose up

访问 GraghiQL

    • http://localhost:8000/graphql

 

    • Strawberry では、GraghiQL と呼ばれる Playground を使用できます。

GUI から簡単に GrapqhQL を実行できます。
スキーマが見れたり、補完が効いたり、実行ログが残ったりと諸々便利です。

考试

    • $ task test

taskipy を使用しています。
テスト前に、autoflake, black, isort, pyupgrade によるフォーマット、mypy による型チェックを実施します。

执行 GraphQL

スクリーンショット 2023-09-25 232006.png

最後

    • この記事では、最近 FastAPI と Strawberry(GraphQL) に入門した私が、FastAPI と Strawberry(GraphQL) が動作する諸々整ったデモアプリを使用する(作る)方法をメモとして残しました。

 

    とりあえず FastAPI と Strawberry(GraphQL) を動かしてみたい方の参考になればと思います。
广告
将在 10 秒后关闭
bannerAds