はじめに
最新の 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 の実装
実際の実装は次のとおりです。
-
依存関係をインストールします:
npm install @apollo/server graphql
-
スキーマを定義します:
<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>
- リゾルバーの追加:
<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>
- サーバーを起動します:
<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 を開発スタックに統合するのに最適な時期です。
参考文献
- GraphQL 公式ドキュメント
- Apollo GraphQL プラットフォーム
- Netflix エンジニアリング - GraphQL フェデレーション
- GitHub GraphQL API ケーススタディ
- GraphQL のベストプラクティス
著者について
Ivan Duarte は、Web 開発と AI に情熱を注ぐフリーランスのバックエンド開発者です。
ニュースレターを購読する
ByteUp の記事を受信箱で直接読んでください。今すぐ購読してください!
以上がGraphQL 変換 API 開発の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。

JavaScript文字列置換法とFAQの詳細な説明 この記事では、javaScriptの文字列文字を置き換える2つの方法について説明します:内部JavaScriptコードとWebページの内部HTML。 JavaScriptコード内の文字列を交換します 最も直接的な方法は、置換()メソッドを使用することです。 str = str.replace( "find"、 "置換"); この方法は、最初の一致のみを置き換えます。すべての一致を置き換えるには、正規表現を使用して、グローバルフラグGを追加します。 str = str.replace(/fi

このチュートリアルでは、カスタムGoogle検索APIをブログまたはWebサイトに統合する方法を示し、標準のWordPressテーマ検索関数よりも洗練された検索エクスペリエンスを提供します。 驚くほど簡単です!検索をyに制限することができます

それで、あなたはここで、Ajaxと呼ばれるこのことについてすべてを学ぶ準備ができています。しかし、それは正確には何ですか? Ajaxという用語は、動的でインタラクティブなWebコンテンツを作成するために使用されるテクノロジーのゆるいグループ化を指します。 Ajaxという用語は、もともとJesse Jによって造られました

この記事シリーズは、2017年半ばに最新の情報と新鮮な例で書き直されました。 このJSONの例では、JSON形式を使用してファイルに単純な値を保存する方法について説明します。 キー価値ペア表記を使用して、あらゆる種類を保存できます

楽なWebページレイアウトのためにjQueryを活用する:8本質的なプラグイン jQueryは、Webページのレイアウトを大幅に簡素化します。 この記事では、プロセスを合理化する8つの強力なjQueryプラグイン、特に手動のウェブサイトの作成に役立ちます

コアポイント これは通常、メソッドを「所有」するオブジェクトを指しますが、関数がどのように呼び出されるかに依存します。 現在のオブジェクトがない場合、これはグローバルオブジェクトを指します。 Webブラウザでは、ウィンドウで表されます。 関数を呼び出すと、これはグローバルオブジェクトを維持しますが、オブジェクトコンストラクターまたはそのメソッドを呼び出すとき、これはオブジェクトのインスタンスを指します。 call()、apply()、bind()などのメソッドを使用して、このコンテキストを変更できます。これらのメソッドは、与えられたこの値とパラメーターを使用して関数を呼び出します。 JavaScriptは優れたプログラミング言語です。数年前、この文はそうでした

jQueryは素晴らしいJavaScriptフレームワークです。ただし、他のライブラリと同様に、何が起こっているのかを発見するためにフードの下に入る必要がある場合があります。おそらく、バグをトレースしているか、jQueryが特定のUIをどのように達成するかに興味があるからです

この投稿は、Android、BlackBerry、およびiPhoneアプリ開発用の有用なチートシート、リファレンスガイド、クイックレシピ、コードスニペットをコンパイルします。 開発者がいないべきではありません! タッチジェスチャーリファレンスガイド(PDF) Desigの貴重なリソース


ホットAIツール

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

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

Undress AI Tool
脱衣画像を無料で

Clothoff.io
AI衣類リムーバー

AI Hentai Generator
AIヘンタイを無料で生成します。

人気の記事

ホットツール

MinGW - Minimalist GNU for Windows
このプロジェクトは osdn.net/projects/mingw に移行中です。引き続きそこでフォローしていただけます。 MinGW: GNU Compiler Collection (GCC) のネイティブ Windows ポートであり、ネイティブ Windows アプリケーションを構築するための自由に配布可能なインポート ライブラリとヘッダー ファイルであり、C99 機能をサポートする MSVC ランタイムの拡張機能が含まれています。すべての MinGW ソフトウェアは 64 ビット Windows プラットフォームで実行できます。

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

MantisBT
Mantis は、製品の欠陥追跡を支援するために設計された、導入が簡単な Web ベースの欠陥追跡ツールです。 PHP、MySQL、Web サーバーが必要です。デモおよびホスティング サービスをチェックしてください。

ドリームウィーバー CS6
ビジュアル Web 開発ツール

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