2
2

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

More than 1 year has passed since last update.

FastAPI と Strawberry(GraphQL) が動作する諸々整ったデモアプリを作ってみた

Last updated at Posted at 2023-09-26

はじめに

  • この記事では、最近 FastAPI と Strawberry(GraphQL) に入門した私が、FastAPI と Strawberry(GraphQL) が動作する諸々整ったデモアプリを使用する(作る)方法をメモとして残します。
  • Strawberry に関する記事(特にサンプルコード付き)は未だあまり少ない印象を受けましたので、Strawberry について入門する方の参考になればと思います。
    • FastAPI と Strawberry(GraphQL) に入門してから数週間なので、アンチパターンを踏んでいるかもしれませんが、サンプルコードの一つとしていただければと思います。 mm

デモアプリの GitHub

使用技術

システム構成

開発環境

  • 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 による型チェックを実施します。

GrapqhQL を実行

おわりに

  • この記事では、最近 FastAPI と Strawberry(GraphQL) に入門した私が、FastAPI と Strawberry(GraphQL) が動作する諸々整ったデモアプリを使用する(作る)方法をメモとして残しました。
  • とりあえず FastAPI と Strawberry(GraphQL) を動かしてみたい方の参考になればと思います。
2
2
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
2
2

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?