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 (Auth) | 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 サーバー |
FAQ
GraphQL サーバーにおける Prisma ORM の役割は何ですか?
上記のどの GraphQL ツール/ライブラリを使用しても、Prisma ORM はデータベースに接続するために GraphQL リゾルバー内で使用されます。リゾルバー内では、他の ORM や SQL クエリビルダーと同じ役割を果たします。
GraphQL クエリのリゾルバーでは、Prisma ORM は通常、GraphQL レスポンスで返すデータをデータベースから読み取ります。GraphQL ミューテーションのリゾルバーでは、Prisma ORM は通常、データベースにデータを書き込みます (例: 新しいレコードの作成や既存のレコードの更新)。
その他の GraphQL リソース
Prisma は、GraphQL コミュニティのリソースと最新情報をハイライトするニュースレターである GraphQL Weekly をキュレーションしています。GraphQL の記事、ビデオ、チュートリアル、ライブラリなどの最新情報を入手するために購読してください。