ちょっと、そこ! API プロバイダーとして、私は GraphQL が API の世界でいかにゲームチェンジャーになったかを直接見てきました。このブログでは、GraphQL API の作成方法を説明します。
GraphQL の基本を理解する
まず最初に、GraphQL とは何かを理解しましょう。事前定義されたデータ構造を返すエンドポイントの固定セットを持つ REST とは異なり、GraphQL ではクライアントが必要なデータを正確に指定できます。これは、データのオーバーフェッチやアンダーフェッチが少なくなることを意味し、大きな利点となります。
ユーザー情報を必要とするアプリを構築していると想像してください。 REST API を使用すると、次のようなエンドポイントが存在する可能性があります。/ユーザー/:idこれは大量のユーザー データを返しますが、その一部はアプリで使用すらされない可能性があります。しかし、GraphQL を使用すると、クライアントは次のようなクエリを送信できます。
クエリ { ユーザー(id: "123") { 名前 メール } }
そしてそれはただ名前そして電子メールID を持つユーザーのフィールド123。
環境のセットアップ
GraphQL API を作成するには、いくつかのツールが必要です。 GraphQL サーバーを構築するために最も人気のあるのは Apollo Server で、Node.js とうまく連携します。したがって、まだインストールしていない場合は、マシンに Node.js をインストールします。
Node.js を起動して実行したら、プロジェクト用の新しいディレクトリを作成し、ターミナルでそのディレクトリに移動します。次に、次を実行して新しい Node.js プロジェクトを初期化します。
npm init -y
これにより、パッケージ.jsonプロジェクトディレクトリ内のファイル。
次に、Apollo Server と GraphQL をインストールします。
npm install apollo-servergraphql
スキーマの定義
スキーマは GraphQL API の中心です。これは、クライアントがクエリできるデータのタイプとそれらの間の関係を定義します。
単純なライブラリの API を構築しているとします。タイプがあるかもしれません本、著者、 そしてジャンル。 JavaScript で基本的なスキーマを定義する方法は次のとおりです。
const { gql } = require('apollo-server'); const typeDefs = gql` type Book { id: ID!タイトル:紐!著者:著者!ジャンル:ジャンル! } type 著者 { id: ID!名前:ストリング!本: 【予約】! } type ジャンル { id: ID!名前:ストリング!本: 【予約】! } type Query {books: [本!]! book(id: ID!): 本の著者: [著者!]! author(id:ID!): 著者ジャンル: 【ジャンル!】!ジャンル(id: ID!): ジャンル } `; module.exports = typeDefs;
このスキーマでは、3 つのタイプ (本、著者、 そしてジャンル)とクエリクライアントがデータをフェッチできるようにするタイプ。の!記号はフィールドが必須であることを意味します。
リゾルバー
リゾルバーは、スキーマ内の各フィールドのデータを取得する方法を GraphQL に指示する関数です。たとえば、本のフィールドクエリtype はデータベースから書籍のリストを取得する場合があります。
以下は、ライブラリ API の単純なリゾルバーのセットです。
const { 本、著者、ジャンル } = require('./data'); constsolvers = { クエリ: { 本: () => 本, 本: (親, { id }) => 本.find(本 => book.id === id), 著者: () => 著者, 著者: (親, { id }) => authors.find(著者 => 著者.id === id), ジャンル: () => ジャンル, ジャンル: (親, { id }) => ジャンル.find(genre =>ジャンル.id === id) }, 本: { 著者: (本) => authors.find(著者 => author.id === book.authorId), ジャンル: (本) => ジャンル.find(genre => ジャンル.id === 本.genreId) }, 著者: { 本: (著者) => 本.filter(本 => book.authorId === 著者.id) }, ジャンル: { 本: (ジャンル) => Books.filter(book => book.genreId === ジャンル.id) } }; module.exports = リゾルバー;
このコードでは、サンプル データがデータ.jsファイル。のリゾルバークエリ型は適切なデータを返し、他の型のリゾルバーは型間の関係を処理します。
サーバーの作成
スキーマとリゾルバーが完成したので、次は Apollo サーバーを作成します。
const { ApolloServer } = require('apollo-server'); const typeDefs = require('./schema'); constsolvers = require('./resolvers'); const サーバー = new ApolloServer({ typeDefs, リゾルバー }); server.listen().then(({ url }) => { console.log(`${url}` でサーバーの準備ができました); });
このコードを実行すると、ノードインデックス.js(ファイルに名前が付けられていると仮定すると、インデックス.js)、サーバーはローカル ポートで実行を開始し、コンソールに出力された URL で GraphQL プレイグラウンドにアクセスできるようになります。
API のテスト
サーバーが実行されたら、GraphQL プレイグラウンドを使用して API をテストできます。ブラウザで URL を開くと、クエリとミューテーションを作成できるインターフェイスが表示されます。
たとえば、すべての書籍を取得するクエリを作成できます。
クエリ { 本 { タイトル 著者 { 名前 } }
このクエリは、タイトルと著者名を含む本のリストを返します。
セキュリティとパフォーマンス
GraphQL API を作成する場合、セキュリティとパフォーマンスが非常に重要です。クライアントが参照を許可されているデータのみにアクセスできるようにする必要があります。これを行う 1 つの方法は、認証および認可メカニズムを実装することです。
パフォーマンスを向上させるために、キャッシュやバッチ処理などの手法を使用できます。 Apollo Server にはキャッシュのサポートが組み込まれており、次のようなライブラリを使用できます。データローダーデータベースリクエストのバッチ処理用。


既存のシステムとの統合
API プロバイダーとして、GraphQL API をデータベースや他の API などの既存のシステムと統合する必要がある場合があります。コネクタまたはアダプタを使用して、これらのシステムと対話できます。たとえば、PostgreSQL データベースを使用している場合は、ページライブラリに接続してデータを取得します。
結論
GraphQL API の作成は、クライアントに柔軟かつ効率的なデータ アクセスを提供する優れた方法です。このブログで説明されている手順に従うことで、ユーザーのニーズを満たす堅牢な GraphQL API を構築できます。
弊社の API サービスの使用にご興味がある場合、または GraphQL API 開発についてご質問がある場合は、調達についての話し合いのためお気軽にお問い合わせください。私たちはいつでも喜んでチャットし、お客様のビジネスに最適なソリューションを見つけるお手伝いをいたします。
さまざまな業界に関連するAPIも提供しています。たとえば、製薬業界にいる場合は、次のような製品に関連する API に興味があるかもしれません。アナストロゾールそしてグアイフェネシン。についてさらに詳しく確認することもできますアナストロゾール当社のウェブサイトで。
参考文献
- Apollo サーバーのドキュメント
- GraphQL仕様
- Node.js ドキュメント
