検索

GraphQL Transforming API Development

はじめに

最新の Web アプリケーションでは、効率的かつ柔軟なデータの取得が求められます。 API 開発に革命をもたらすクエリ言語である GraphQL は、このニーズに応えます。 2015 年に Facebook がデビューして以来、GraphQL の広範な採用は、一時的な傾向を超えたその価値を証明しています。

GraphQL の中核原則を理解する

GraphQL は API クエリ言語およびランタイムです。サーバーが応答構造を指示する従来の REST API とは異なり、GraphQL を使用すると、クライアントは単一のリクエストで正確なデータをリクエストできます。これにより、現代のアプリケーション開発の多くの課題が解決されます。

どんな本でもすぐに見つけてしまう知識豊富な図書館員を想像してみてください。複数のシェルフ (複数の API エンドポイント) を検索する代わりに、詳細なリクエストを提供すると、ライブラリアンは必要なものを正確に返します。それ以上でもそれ以下でもありません。

GraphQL のスキーマ駆動型の性質により、明確なクライアント/サーバー契約が作成されます。 各 GraphQL サービスはデータ型を定義し、予測可能で一貫性のある応答を実行する前にスキーマ検証を可能にします。

技術的基盤

GraphQL は、クエリ (データ取得)、ミューテーション (データ変更)、サブスクリプション (リアルタイム更新) の 3 つの主要な操作を使用します。 堅牢な型システムが各操作を支え、API 機能を定義します。

<code>type User {
  id: ID!
  name: String!
  email: String!
  posts: [Post!]!
  friends: [User!]!
}

type Post {
  id: ID!
  title: String!
  content: String!
  author: User!
  comments: [Comment!]!
  createdAt: String!
}

type Comment {
  id: ID!
  text: String!
  author: User!
  post: Post!
}</code>

スキーマは関係を定義し、単一のクエリでネストされたデータ (ユーザーの投稿や友達など) を取得できるようにします。

リゾルバー: GraphQL の中心

GraphQL の威力はリゾルバー機能にあります。これらの関数は、各スキーマ フィールドのデータを取得します。 リゾルバーは、データベースからデータをフェッチしたり、他の API を呼び出したり、複雑な計算を実行したりすることができ、すべてクライアントに対して透過的です。

リゾルバーの例 (Prisma を使用)

Prisma を使用してユーザーの投稿や友達を取得するためのリゾルバーを実装する方法は次のとおりです。

<code>const resolvers = {
  User: {
    async posts(parent, args, context) {
      const posts = await context.prisma.post.findMany({
        where: { authorId: parent.id },
        orderBy: { createdAt: 'desc' },
      });
      return posts;
    },
    async friends(parent, args, context) {
      const friends = await context.prisma.user.findMany({
        where: {
          id: { in: parent.friendIds },
        },
      });
      return friends;
    },
  },
};</code>

これらのリゾルバーは、要求された場合にのみ効率的にデータを取得します。

API 開発の進化

REST API だけが使われていた時代を覚えていますか?複数のエンドポイントが固定データ構造を返しました。 これは単純なアプリケーションでは機能しましたが、複雑さが増すにつれて扱いにくくなりました。モバイルと Web クライアントは異なるデータを必要としたため、複数の API 呼び出しが発生しました。

N 1 クエリ問題の解決

N 1 クエリの問題 (複数のデータベース クエリを使用して関連データを取得する) は、API の重要な課題です。 DataLoader や同様のツールを使用してクエリをバッチ処理し、最適化する GraphQL の機能は、パフォーマンスを大きく変えます。

実装例(DataLoader):

関連データを取得すると、N 1 問題が発生することがよくあります。 GraphQL は、DataLoader、データベース呼び出しのバッチ処理およびキャッシュなどのツールを使用してこの問題に対処します。

<code>type User {
  id: ID!
  name: String!
  email: String!
  posts: [Post!]!
  friends: [User!]!
}

type Post {
  id: ID!
  title: String!
  content: String!
  author: User!
  comments: [Comment!]!
  createdAt: String!
}

type Comment {
  id: ID!
  text: String!
  author: User!
  post: Post!
}</code>

これにより、リクエストをバッチ処理することでデータベース クエリが最小限に抑えられ、パフォーマンスが大幅に向上します。

実際の成功事例

  • Netflix の動的ユーザー インターフェイス: Netflix は、デバイス間の動的 UI に GraphQL を使用し、コンテキストに基づいて正確な番組情報を取得します。
  • GitHub の API 革命: GitHub の v4 API から GraphQL への切り替えにより、応答ペイロード サイズが削減され、開発者の柔軟性が向上しました。

Node.js と Apollo Server を使用した GraphQL の実装

実際の実装は次のとおりです。

  1. 依存関係をインストールします: npm install @apollo/server graphql

  2. スキーマを定義します:

<code>const resolvers = {
  User: {
    async posts(parent, args, context) {
      const posts = await context.prisma.post.findMany({
        where: { authorId: parent.id },
        orderBy: { createdAt: 'desc' },
      });
      return posts;
    },
    async friends(parent, args, context) {
      const friends = await context.prisma.user.findMany({
        where: {
          id: { in: parent.friendIds },
        },
      });
      return friends;
    },
  },
};</code>
  1. リゾルバーの追加:
<code>const DataLoader = require('dataloader');

const userLoader = new DataLoader(async (userIds) => {
  const users = await prisma.user.findMany({
    where: {
      id: { in: userIds },
    },
  });
  return userIds.map(id => users.find(user => user.id === id));
});

const resolvers = {
  Post: {
    async author(parent) {
      return userLoader.load(parent.authorId);
    },
  },
};</code>
  1. サーバーを起動します:
<code>const typeDefs = `#graphql
type Query {
  hello: String
}`;</code>

フィールド選択によるパフォーマンスの最適化 (Prisma)

GraphQL は、要求されたフィールドに基づいてデータベース クエリを最適化します。

<code>const resolvers = {
  Query: {
    hello: () => "Hello, GraphQL!",
  },
};</code>

これにより、必要なデータのみが取得され、オーバーヘッドが削減されます。

GraphQL の将来

  • Apollo Federation: 統合された API を提示しながら、GraphQL スキーマを複数のサービスに分割できるようにします。
  • サブスクリプションによるリアルタイム機能: ライブ通知と共同アプリケーションのリアルタイム更新を有効にします。 graphql-subscriptions を使用した例:
<code>const { ApolloServer } = require('@apollo/server');

const server = new ApolloServer({ typeDefs, resolvers });
server.listen().then(({ url }) => {
  console.log(`? Server ready at ${url}`);
});</code>

GraphQL 入門

GraphQL の段階的な導入は重要な利点です。 まず、既存の REST API と並行して、おそらくプロキシ層として実装します。これにより、リスクを最小限に抑えながら利点を実現できます。

結論

GraphQL は、データの取得とクライアント/サーバー間の通信におけるパラダイムシフトです。アプリケーションが成長するにつれて、その柔軟性と効率性がますます重要になります。 パフォーマンス、開発者エクスペリエンス、ユーザー満足度を向上させるために、GraphQL を検討してください。小さな実験から始めて、徐々に使用を拡大してください。コミュニティとエコシステムが繁栄している今、GraphQL を開発スタックに統合するのに最適な時期です。

参考文献

  1. GraphQL 公式ドキュメント
  2. Apollo GraphQL プラットフォーム
  3. Netflix エンジニアリング - GraphQL フェデレーション
  4. GitHub GraphQL API ケーススタディ
  5. GraphQL のベストプラクティス

著者について

Ivan Duarte は、Web 開発と AI に情熱を注ぐフリーランスのバックエンド開発者です。

ニュースレターを購読する

ByteUp の記事を受信箱で直接読んでください。今すぐ購読してください!

以上がGraphQL 変換 API 開発の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。

声明
この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、admin@php.cn までご連絡ください。
JavaScriptのデータ型:ブラウザとNodejsに違いはありますか?JavaScriptのデータ型:ブラウザとNodejsに違いはありますか?May 14, 2025 am 12:15 AM

JavaScriptコアデータ型は、ブラウザとnode.jsで一貫していますが、余分なタイプとは異なる方法で処理されます。 1)グローバルオブジェクトはブラウザのウィンドウであり、node.jsのグローバルです2)バイナリデータの処理に使用されるNode.jsの一意のバッファオブジェクト。 3)パフォーマンスと時間の処理にも違いがあり、環境に従ってコードを調整する必要があります。

JavaScriptコメント://および / * *を使用するためのガイドJavaScriptコメント://および / * *を使用するためのガイドMay 13, 2025 pm 03:49 PM

javascriptusestwotypesofcomments:シングルライン(//)およびマルチライン(//)

Python vs. JavaScript:開発者の比較分析Python vs. JavaScript:開発者の比較分析May 09, 2025 am 12:22 AM

PythonとJavaScriptの主な違いは、タイプシステムとアプリケーションシナリオです。 1。Pythonは、科学的コンピューティングとデータ分析に適した動的タイプを使用します。 2。JavaScriptは弱いタイプを採用し、フロントエンドとフルスタックの開発で広く使用されています。この2つは、非同期プログラミングとパフォーマンスの最適化に独自の利点があり、選択する際にプロジェクトの要件に従って決定する必要があります。

Python vs. JavaScript:ジョブに適したツールを選択するPython vs. JavaScript:ジョブに適したツールを選択するMay 08, 2025 am 12:10 AM

PythonまたはJavaScriptを選択するかどうかは、プロジェクトの種類によって異なります。1)データサイエンスおよび自動化タスクのPythonを選択します。 2)フロントエンドとフルスタック開発のためにJavaScriptを選択します。 Pythonは、データ処理と自動化における強力なライブラリに好まれていますが、JavaScriptはWebインタラクションとフルスタック開発の利点に不可欠です。

PythonとJavaScript:それぞれの強みを理解するPythonとJavaScript:それぞれの強みを理解するMay 06, 2025 am 12:15 AM

PythonとJavaScriptにはそれぞれ独自の利点があり、選択はプロジェクトのニーズと個人的な好みに依存します。 1. Pythonは、データサイエンスやバックエンド開発に適した簡潔な構文を備えた学習が簡単ですが、実行速度が遅くなっています。 2。JavaScriptはフロントエンド開発のいたるところにあり、強力な非同期プログラミング機能を備えています。 node.jsはフルスタックの開発に適していますが、構文は複雑でエラーが発生しやすい場合があります。

JavaScriptのコア:CまたはCの上に構築されていますか?JavaScriptのコア:CまたはCの上に構築されていますか?May 05, 2025 am 12:07 AM

javascriptisnotbuiltoncorc;それは、解釈されていることを解釈しました。

JavaScriptアプリケーション:フロントエンドからバックエンドまでJavaScriptアプリケーション:フロントエンドからバックエンドまでMay 04, 2025 am 12:12 AM

JavaScriptは、フロントエンドおよびバックエンド開発に使用できます。フロントエンドは、DOM操作を介してユーザーエクスペリエンスを強化し、バックエンドはnode.jsを介してサーバータスクを処理することを処理します。 1.フロントエンドの例:Webページテキストのコンテンツを変更します。 2。バックエンドの例:node.jsサーバーを作成します。

Python vs. Javascript:どの言語を学ぶべきですか?Python vs. Javascript:どの言語を学ぶべきですか?May 03, 2025 am 12:10 AM

PythonまたはJavaScriptの選択は、キャリア開発、学習曲線、エコシステムに基づいている必要があります。1)キャリア開発:Pythonはデータサイエンスとバックエンド開発に適していますが、JavaScriptはフロントエンドおよびフルスタック開発に適しています。 2)学習曲線:Python構文は簡潔で初心者に適しています。 JavaScriptの構文は柔軟です。 3)エコシステム:Pythonには豊富な科学コンピューティングライブラリがあり、JavaScriptには強力なフロントエンドフレームワークがあります。

See all articles

ホットAIツール

Undresser.AI Undress

Undresser.AI Undress

リアルなヌード写真を作成する AI 搭載アプリ

AI Clothes Remover

AI Clothes Remover

写真から衣服を削除するオンライン AI ツール。

Undress AI Tool

Undress AI Tool

脱衣画像を無料で

Clothoff.io

Clothoff.io

AI衣類リムーバー

Video Face Swap

Video Face Swap

完全無料の AI 顔交換ツールを使用して、あらゆるビデオの顔を簡単に交換できます。

ホットツール

SAP NetWeaver Server Adapter for Eclipse

SAP NetWeaver Server Adapter for Eclipse

Eclipse を SAP NetWeaver アプリケーション サーバーと統合します。

SublimeText3 英語版

SublimeText3 英語版

推奨: Win バージョン、コードプロンプトをサポート!

SecLists

SecLists

SecLists は、セキュリティ テスターの究極の相棒です。これは、セキュリティ評価中に頻繁に使用されるさまざまな種類のリストを 1 か所にまとめたものです。 SecLists は、セキュリティ テスターが必要とする可能性のあるすべてのリストを便利に提供することで、セキュリティ テストをより効率的かつ生産的にするのに役立ちます。リストの種類には、ユーザー名、パスワード、URL、ファジング ペイロード、機密データ パターン、Web シェルなどが含まれます。テスターはこのリポジトリを新しいテスト マシンにプルするだけで、必要なあらゆる種類のリストにアクセスできるようになります。

SublimeText3 Mac版

SublimeText3 Mac版

神レベルのコード編集ソフト(SublimeText3)

Safe Exam Browser

Safe Exam Browser

Safe Exam Browser は、オンライン試験を安全に受験するための安全なブラウザ環境です。このソフトウェアは、あらゆるコンピュータを安全なワークステーションに変えます。あらゆるユーティリティへのアクセスを制御し、学生が無許可のリソースを使用するのを防ぎます。