Go で GraphQL API エンドポイントを使用する方法

Go で GraphQL API エンドポイントを使用する方法

Graph Query Language (GraphQL) は、GraphQL API と対話するための言語および仕様です。これは、Web を介した通信のための HTTP ベースのクライアント/サーバー アーキテクチャです。





Facebook は、REST アーキテクチャ標準の代替として GraphQL をリリースしました。 GraphQL は、ステートレスでキャッシュ可能な方法で REST に関するほとんどの問題に対処します。予想される出力または入力を記述するシンプルで直感的な構文を提供し、API は要求に一致するデータを中継します。





今日のメイク動画

GraphQL は仕様であるため、Go を含む任意のサーバー側プログラミング言語で GraphQL API を構築して使用できます。





Go で GraphQL API を使い始める

GraphQL は HTTP アーキテクチャに基づいています 、および Go は組み込みで HTTP 機能を提供します http パッケージ。

を使用できます。 http へのパッケージ Go で RESTful API を使用する 、他の機能の中でも。 GraphQL の場合、GraphQL API サーバーに対してクエリとミューテーションを行うことができます。 http パッケージおよびその他の組み込みパッケージ。



Facebookのフォロワーは何ですか
  Go HTTP パッケージの概要セクション

次のようなGraphQLクライアントパッケージ マシンボックスの また shurCooLの GraphQL API とやり取りするプロセスをさらに簡単にします。

を使用できます。 http GraphQL API と対話するための依存関係のないパッケージ。これらのパッケージを Go ファイルにインポートして開始します。





import ( 
"bytes"
"encoding/json"
"fmt"
"io/ioutil"
"net/http"
"time"
)

を使用します。 バイト リクエスト用の新しいバッファを作成するパッケージと json JSON 要求本文へのマップをマーシャリングするパッケージ。使用できます iutil 応答本文を読み取るため、および 時間 パッケージを使用して、リクエストの時間制限を設定します。

Go を使用した GraphQL API のクエリ

クエリを実行してアプリケーションに統合できる無料のパブリック GraphQL API が多数あります。この記事では、Apollo GraphQL の Countries API をクエリして、世界中の国のデータをクエリします。





すべての GraphQL 操作は通常、ペイロード (リクエスト本文) が必要なため、POST リクエストです。ほとんどの GraphQL API は、JSON リクエスト ボディをコンテンツ タイプとして受け入れます。 Go はマップと構造体を使用して JSON を操作するための機能を提供します .

API をクエリするには、GraphQL スキーマの構造を調べる必要があります。クエリは、操作 (クエリまたはミューテーション) がキーであり、データがマップの値であることを除いて、通常の GraphQL クエリと同じです。

リクエストのために JSON にマーシャリングする JSON マップ インスタンスを宣言する方法を次に示します。

jsonMapInstance := map[string]string { 
"query": `
{
countries {
name,
phone,
currency,
code,
emoji
}
}
`,
}

jsonMapInstance variable は、リクエストの本文のマップ インスタンスです。値は、API から期待されるクエリ データの文字列です。この場合、API から期待されるクエリ データは スキーマは 名前 電話 通貨 コード 、 と 絵文字 田畑。

を使用できます。 元帥 の方法 json パッケージを使用して、マップ インスタンスを JSON にエンコードします。の 元帥 メソッドは、エンコードされた JSON を返し、エンコードに問題がある場合はエラーを返します。

サインアップせずにオンラインで映画を見る
jsonResult, err := json.Marshal(jsonMapInstance) 

if err != nil {
fmt.Printf("There was an error marshaling the JSON instance %v", err)
}

マップを JSON にエンコードしたら、POST リクエストを API に送信できます。を使用して新しいリクエスト インスタンスを作成できます。 新しいリクエスト メソッドで、リクエスト タイプ、URL、および JSON バッファを受け取ります。

新しいリクエスト メソッドはリクエスト インスタンスを返します。 API の仕様に応じて、コンテンツ タイプを設定する必要があります。 HTTP リクエストのコンテンツ タイプを設定するには、 設定 の方法 ヘッダ リクエストインスタンスのメソッド。

newRequest, err := http.NewRequest("POST", "https://countries.trevorblades.com/graphql", bytes.NewBuffer(jsonResult)) 
newRequest.Header.Set("Content-Type", "application/json")

を使用して、リクエスト用の単純な HTTP クライアントを作成できます。 クライアント HTTP パッケージのメソッド。の クライアント メソッドを使用すると、リクエストの時間制限を設定することもできます 時間 パッケージ。

 
client := &http.Client{Timeout: time.Second * 5}
response, err := client.Do(newRequest)

if err != nil {
fmt.Printf("There was an error executing the request%v", err)
}

HTTP クライアントを宣言したら、API リクエストを実行します。 行う 方法。の 行う メソッドはリクエスト インスタンスを受け取り、レスポンスとエラーを返します。

「Windows10」プライバシーインストール

API リクエストのレスポンスは、 iutil パッケージの 読み取りすべて 方法。出力ストリームを受け取り、処理可能なエラーを含むデータのバイト スライスを返します。

responseData, err := ioutil.ReadAll(response.Body) 

if err != nil {
fmt.Printf("Data Read Error%v", err)
}

組み込みの文字列関数を使用すると、バイト スライスの応答を文字列型に変換できます。

fmt.Println(string(responseData)) 

API リクエストの結果を示すレスポンスは次のとおりです。

  GraphQL API クエリからの出力には、国とそのリクエストされたフィールドのリストが表示されます。

RESTful API の使用は、GraphQL API の使用に似ています

REST API と GraphQL API はどちらも HTTP プロトコルを使用するため、それぞれを使用するプロセスは非常に似ています。 http 両方のケースのパッケージ。

クライアントを作成し、インスタンスをリクエストし、同じパッケージでデータを読み取る必要があります。