GraphQL: HTTP 上の REST の代替手段

GraphQL: HTTP 上の REST の代替手段

アプリケーションを構築および配布するためのオープンソース アーキテクチャ標準が多数存在します。 REST (Representational State Transfer)、SOAP (Simple Object Access Protocol)、RPC (Remote Procedural Call)、および GraphQL API が最も人気があります。





RESTful API は、最も使用されている API アーキテクチャの標準です。多くのエンドポイントを持つ複雑な RESTful API を作成したことがある場合は、それらがいかに複雑であるかを認識しているでしょう。これは、エンドポイント間にわずかな違いしかない場合に特に当てはまります。





電話がハッキングされているかどうかを確認するにはどうすればよいですか
今日のメイク動画

RESTful API は特定のデータを選択できるほど柔軟ではないため、データのフェッチで問題が発生する場合もあります。 GraphQL は、RESTful API のこれらの問題を解決します。





GraphQLとは?

GraphQL (Graph Query Language) は、API を構築するためのクエリ言語およびランタイムです。データを消費するための多くのエンドポイントを持つ REST API とは異なり、GraphQL API には 1 つのエントリ ポイントがあります。クエリに記述することで、特定のデータを取得できます。

GraphQL 仕様 クエリ言語と GraphQL サーバーの動作方法を定義します。 Python から Javascript 、および HTTP をサポートする任意の言語。



Meta は、2012 年に HTTP 上で構築するための REST の代替手段として GraphQL を構築しました。彼らは 2015 年にオープンソース標準として GraphQL をリリースしました。現在、GraphQL 財団は GraphQL 仕様の開発を監督しています。

GraphQL はかなり新しく、普及率が低く、使用には隠れたコストがあります。 GraphQL API の構築は、特に少数のエンドポイントを持つ小規模なプロジェクトの場合、不必要に複雑になる可能性があります。





また、すべての GraphQL リクエストは、リクエストの状態に関係なく、最終的にステータス コード 200 を返します。

GraphQL の仕組み

  GraphQL's functions and syntax

ようではない リソース指向のREST 、GraphQL では、データを操作するグラフとしてデータを考える必要があります。データの構造を指定できます。仕様は、HTTP を介して API と対話するための堅牢なクエリ インターフェイスを提供します。使い方次第で様々な機能が使えます GraphQL パッケージまたはライブラリ 使用することを選択します。





GraphQL スキーマには、リクエスト可能なオブジェクトとその使用可能なフィールドを定義するオブジェクト タイプが含まれています。 API クエリとミューテーションでは、GraphQL パッケージがクエリを検証し、指定されたハンドラー関数 (リゾルバー) に基づいてクエリを実行します。

GraphQL を使用する理由

REST は使いやすい標準であり、ほとんどのプログラミング言語には、RESTful API を迅速に構築するためのツールがあります。ただし、RESTful API の構築と使用には多くの問題があります。

開発者が一部のユースケースで GraphQL を好む原因となる REST の問題のいくつかを次に示します。

非効率的なデータ取得

RESTful API は、エンドポイントの仕様に基づいてデータを中継します。それらは、エンドポイントのハンドラー関数でハードコーディングされたものを超えてデータを取得するほど柔軟ではありません.

エンドポイントが呼び出し時にデータのリストを返し、フィールドの値または基準を指定する必要があるとします。その場合、開発者はエンドポイントを作成し、データを返すビジネス ロジックを定義する必要があります。貴重なリソースを手動で解析できますが、最終的には時間がかかります。

GraphQL は、基準と仕様に基づいて柔軟に API を照会してデータを返すことができるため、非効率的なデータ取得の問題を解決します。

GraphQL API はインタラクティブです。取得する必要があるデータを、簡単で読みやすい構文で指定できます。

{ 
user(where: {age: {_eq: "89"}}) {
name
school(where: {alive: {_eq: true}}) {
bio
nationality
}
}
}

上記の GraphQL クエリは、 ユーザー エントリのスキーマ フィールドは 89 です。クエリには、エントリのクエリが埋め込まれています。 生きている フィールドが評価する 真実 .スキーマから名前、経歴、および国籍フィールドを返します。

スピーディーな開発

特にプロジェクトのサイズが大きくなると、REST を使用するよりも GraphQL API を構築して使用する方が簡単です。開発段階では、RESTful API を開発するときほど多くのルートとハンドラー関数を開発する必要はありません。 GraphQL API の使用は、RESTful API ほど退屈ではありません。

REST では、単一のエンドポイントがある GraphQL とは異なり、さまざまなエンドポイントがさまざまなリソースへのアクセスを提供します。これにより、柔軟性とパフォーマンスが向上し、クエリでさまざまなリゾルバー関数を呼び出すことができます。

GraphQL スキーマ定義言語

GraphQL スキーマ定義言語 (SDL) は、GraphQL サービスのスキーマを指定します。

GraphQL SDL 構文は、読みやすく理解しやすいものです。スキーマの構造をファイルで指定します。 .graphql また .graphqls 拡大。

type Human { 
name: String!
age: Int!
}

input AddHuman {
name: String!
age: Int!
}

type Mutation {
CreateHuman(input: AddHuman!): Human!
DeleteHuman(id: Int!): String!
UpdateHuman(id: Int!): String!
}

type Query {
GetHuman(id: Int!): Human!
GetHumans: [Human!]!
}

上記の GraphQL コードは、リクエスト用の API の構造を定義する GraphQL API のスキーマです。スキーマは、API の CRUD 機能を定義します。

クライアント側では、スキーマの構造とクライアントのデータまたは操作に基づいて、クライアントは クエリ (REST での GET または DELETE) または 突然変異 (PUT または POST)。

クエリの例を次に示します。 人間 スキーマ。

query Human { 
name
age
}

上記のクエリは、人間のスキーマの 名前 フィールドデータ。

GraphQL ミューテーションの構文は、クエリとはかなり異なります。これは、 人間 スキーマ。

mutation { 
CreateHuman(input:{ name:"man", age:1000000000000000,}) {
name
age
}
}

突然変異コード入力 名前 フィールドをクライアントに送信し、フィールドからデータを返します。

GraphQL API を構築するときは、永続化のためのデータ ストアが必要です。 REST やほとんどの HTTP ベースの Web アーキテクチャと同様に、GraphQL はステートレスであり、アプリに任意のデータ ストアまたはデータベースを使用できます。

GraphQL API の構築

  GraphQL でサポートされている言語

GraphQL は仕様であり、最も一般的なサーバー側言語で GraphQL を構築できます。プロジェクトに必要な機能を備えたライブラリを見つける必要があります。

GraphQL ライブラリを選択するときは、GraphQL のすべての型と操作をサポートする機能豊富なライブラリを使用する必要があります。ほとんどのライブラリは、スキーマ ファーストまたはコード ファーストのアプローチを採用しています。前者では、GraphQL スキーマを定義すると、ライブラリがリゾルバーとボイラープレート コードを生成します。後者の場合、スキーマを定義せずにリゾルバーをハードコーディングします。

GraphQL が採用されつつある

GraphQL の開始以来、開発者や企業はその使用を簡素化するツールをリリースしてきました。これらは、小規模および中規模のプロジェクトの開発時間を短縮できます。

詳細については、オープンソースの GraphQL クライアント、GraphQL のドキュメント、およびその仕様を参照してください。

音楽をダウンロードするのに最適なアプリは何ですか