GraphQL
GraphQLはAPIのためのクエリ言語です。多くの場合、RESTful APIの代替として使用されますが、既存のRESTfulサービスの上に「ゲートウェイ」レイヤーとして追加することもできます。
Prisma ORMを使用すると、データベースに接続するGraphQLサーバーを構築できます。Prisma ORMは、使用するGraphQLツールに完全に依存しません。GraphQLサーバーを構築する際、Prisma ORMは、Apollo Server、GraphQL Yoga、TypeGraphQL、GraphQL.js、またはGraphQLサーバーのセットアップで使用しているほぼすべてのツールやライブラリと組み合わせることができます。
GraphQLサーバーの仕組み
GraphQLサーバーは主に2つのコンポーネントで構成されています
- GraphQLスキーマ(型定義+リゾルバー)
- HTTPサーバー
GraphQLスキーマはコードファーストまたはSDLファーストで記述できることに注意してください。これらの2つのアプローチの詳細については、こちらの記事をご覧ください。SDLファーストのアプローチが好きで、それでもコードを型安全にしたい場合は、GraphQL Code Generatorを使用して、SDLに基づいた様々な型定義を生成してください。
GraphQLスキーマとHTTPサーバーは通常、別々のライブラリで処理されます。現在のGraphQLサーバーツールとその目的の概要を以下に示します
ライブラリ(npmパッケージ) | 目的 | Prisma ORMとの互換性 | Prisma統合 |
---|---|---|---|
graphql | GraphQLスキーマ(コードファースト) | はい | いいえ |
graphql-tools | GraphQLスキーマ(SDLファースト) | はい | いいえ |
type-graphql | GraphQLスキーマ(コードファースト) | はい | typegraphql-prisma |
nexus | GraphQLスキーマ(コードファースト) | はい | nexus-prisma 早期プレビュー |
apollo-server | HTTPサーバー | はい | n/a |
express-graphql | HTTPサーバー | はい | n/a |
fastify-gql | HTTPサーバー | はい | n/a |
graphql-yoga | HTTPサーバー | はい | n/a |
これらのスタンドアロンおよび単一目的のライブラリに加えて、統合されたアプリケーションフレームワークを構築するいくつかのプロジェクトがあります
フレームワーク | スタック | 開発元 | Prisma ORM | 説明 |
---|---|---|---|---|
Redwood.js | フルスタック | Tom Preston-Werner | Prisma ORM上に構築 | JAMstackにフルスタックの概念をもたらす。 |
注: リストにないGraphQLライブラリ/フレームワークにお気づきの場合は、お知らせください。
Prisma ORMとGraphQLの例
以下のセクションでは、上記の表で述べたツールの様々な組み合わせでPrisma ORMを使用する方法を示す、すぐに実行できるいくつかの例を紹介します。
例 | HTTPサーバー | GraphQLスキーマ | 説明 |
---|---|---|---|
GraphQL API (Pothos) | graphql-yoga | pothos | graphql-yoga に基づいたGraphQLサーバー |
GraphQL API (SDLファースト) | graphql-yoga | n/a | SDLファーストのアプローチに基づいたGraphQLサーバー |
GraphQL API -- NestJs | @nestjs/apollo | n/a | NestJSに基づいたGraphQLサーバー |
GraphQL API -- NestJs (SDLファースト) | @nestjs/apollo | n/a | NestJSに基づいたGraphQLサーバー |
GraphQL API (Nexus) | @apollo/server | nexus | @apollo/server に基づいたGraphQLサーバー |
GraphQL API (TypeGraphQL) | apollo-server | type-graphql | TypeGraphQLのコードファーストのアプローチに基づいたGraphQLサーバー |
GraphQL API (認証) | apollo-server | nexus | メールとパスワード認証および権限を持つGraphQLサーバー |
フルスタックアプリ | graphql-yoga | pothos | Next.js (React)、Apollo Client、GraphQL Yoga、Pothosを使用したフルスタックアプリ |
GraphQLサブスクリプション | apollo-server | nexus | リアルタイムGraphQLサブスクリプションを実装するGraphQLサーバー |
GraphQL API -- Hapi | apollo-server-hapi | nexus | Hapiに基づいたGraphQLサーバー |
GraphQL API -- Hapi (SDLファースト) | apollo-server-hapi | graphql-tools | Hapiに基づいたGraphQLサーバー |
GraphQL API -- Fastify | fastify & mercurius | n/a | FastifyとMercuriusに基づいたGraphQLサーバー |
GraphQL API -- Fastify (SDLファースト) | fastify | Nexus | FastifyとMercuriusに基づいたGraphQLサーバー |
よくある質問
GraphQLサーバーにおけるPrisma ORMの役割は何ですか?
上記のどのGraphQLツール/ライブラリを使用しても、Prisma ORMはデータベースに接続するためにGraphQLリゾルバー内で使用されます。これは、他のORMやSQLクエリビルダーがリゾルバー内で果たす役割と同じです。
GraphQLクエリのリゾルバーでは、Prisma ORMは通常、データベースからデータを読み取り、GraphQLレスポンスとして返します。GraphQLミューテーションのリゾルバーでは、Prisma ORMは通常、データベースにデータを書き込みます(例: 新規レコードの作成や既存レコードの更新)。
その他のGraphQLリソース
PrismaはGraphQL Weeklyを厳選しています。これは、GraphQLコミュニティからのリソースと更新をハイライトするニュースレターです。GraphQLの記事、ビデオ、チュートリアル、ライブラリなどの最新情報を得るために購読してください。