Go 言語を使用して API をリクエストするプロセスについて話しましょう

PHPz
リリース: 2023-04-11 14:33:09
オリジナル
1223 人が閲覧しました

現代の Web 開発では、API は不可欠な部分になっています。クライアントからサーバーへのデータ送信と対話を完了するには、HTTP リクエストと応答を送受信する必要があります。今回はGo言語を使用してAPIをリクエストする処理を実装していきます。

Go 言語は、同時実行性が高く、スケーラブルで効率的な Web アプリケーションを構築するのに非常に適したオープンソース プログラミング言語です。この記事では、Go 言語の標準ライブラリまたはサードパーティのライブラリを使用して API をリクエストし、応答データを処理します。

参考文献:

  • https://golang.org/pkg/net/http/
  • https://github.com/go-resty/resty
  • https://golang.org/pkg/encoding/json/
  • https://github.com/bitly/go-simplejson

HTTP を理解するrequest

Go 言語を使用して API をリクエストする方法を理解する前に、まず HTTP リクエストがどのように機能するかを理解する必要があります。 HTTP リクエストは通常​​、リクエスト行、リクエスト ヘッダー、リクエスト本文の 3 つの部分で構成されます。

リクエスト行には、リクエストされたメソッド、URL、HTTP バージョンが含まれます。ここでは、最も一般的に使用されるメソッドである GET メソッドを通常使用します。

リクエスト ヘッダーには、さまざまな種類のメタデータが含まれています。たとえば、リクエスト ヘッダーを使用して、認可トークン、ユーザー エージェント、Cookie などの情報を渡すことができます。

リクエスト本文には通常、サーバーに送信されるデータが含まれます。ただし、GET リクエストを使用する場合、リクエスト本文は通常空です。

Go 標準ライブラリ リクエスト API を使用する

Go 言語の標準ライブラリには、HTTP リクエストの送信と応答の処理のための基本的な機能を提供する HTTP パッケージが含まれています。

以下は、Go 言語標準ライブラリを使用して API をリクエストする例です:

package main

import (
    "fmt"
    "net/http"
)

func main() {
    resp, err := http.Get("https://jsonplaceholder.typicode.com/posts")
    if err != nil {
        fmt.Println("请求错误:", err)
        return
    }
    defer resp.Body.Close()

    fmt.Println("响应状态码:", resp.StatusCode)
    fmt.Println("响应头部:", resp.Header)
}
ログイン後にコピー

この例では、http.Get() を使用して HTTP GET リクエストを送信し、リクエストAPIアドレス。

リクエストが成功すると、resp.Body を通じてレスポンス本文の内容を読み取ることができます。最後に、リソース リークを防ぐために、 resp.Body.Close() を使用して応答本文を閉じます。

この例では、ステータス コードと応答のヘッダー情報のみを出力します。リクエストの本文を処理したい場合は、レスポンスの内容を読み取る必要があります。

応答データの処理

Go 言語の標準ライブラリは、複数の応答本文の処理をサポートしています。たとえば、json パッケージを使用して JSON 形式で応答を処理したり、xml パッケージを使用して XML 形式で応答を処理したりできます。 API によって送信された応答がこれらのデータ形式のいずれでもない場合、io パッケージを使用して応答本文を読み取ることができます。

以下は、Go 標準ライブラリを使用して JSON 形式の応答を処理する例です:

package main

import (
    "encoding/json"
    "fmt"
    "net/http"
)

type Post struct {
    UserId int `json:"userId"`
    Id     int `json:"id"`
    Title  string `json:"title"`
    Body   string `json:"body"`
}

func main() {
    resp, err := http.Get("https://jsonplaceholder.typicode.com/posts")
    if err != nil {
        fmt.Println("请求错误:", err)
        return
    }
    defer resp.Body.Close()

    var posts []Post
    err = json.NewDecoder(resp.Body).Decode(&posts)
    if err != nil {
        fmt.Println("解析错误:", err)
        return
    }

    for _, p := range posts {
        fmt.Println(p)
    }
}
ログイン後にコピー

この例では、API によって返される JSON 形式に対応する構造体 Post を定義します。 。 json パッケージを使用して応答本文を解析し、JSON を Post 構造に解析します。

json.NewDecoder() メソッドには解析された変数へのポインターが必要なため、&posts パラメーターを渡したことに注意してください。最後に、リクエストされた投稿をすべて印刷します。

サードパーティ ライブラリを使用して API をリクエストする

Go 言語の標準ライブラリに加えて、API リクエストのプロセスを簡素化できるサードパーティ ライブラリもいくつかあります。たとえば、Resty ライブラリを使用すると、リクエスト API をよりシンプルで使いやすくできます。

以下は、Resty ライブラリを使用して API をリクエストする例です:

package main

import (
    "fmt"
    "github.com/go-resty/resty"
)

type Post struct {
    UserId int `json:"userId"`
    Id     int `json:"id"`
    Title  string `json:"title"`
    Body   string `json:"body"`
}

func main() {
    client := resty.New()
    resp, err := client.R().Get("https://jsonplaceholder.typicode.com/posts")
    if err != nil {
        fmt.Println("请求错误:", err)
        return
    }

    var posts []Post
    err = json.Unmarshal(resp.Body(), &posts)
    if err != nil {
        fmt.Println("解析错误:", err)
        return
    }

    for _, p := range posts {
        fmt.Println(p)
    }
}
ログイン後にコピー

この例では、Resty ライブラリを使用してリクエストを送信します。ここで、client.R().Get () は GET 要求されたショートカットを送信します。 Unmarshal() メソッドを使用して応答本文を解析し、JSON を Post 構造に解析します。

Go 標準ライブラリとは異なり、Resty ライブラリはリクエスト ヘッダーの追加、パラメータの受け渡し、プロキシの設定などの機能もサポートしており、API リクエストをより柔軟かつ便利にします。

概要

この記事では、Go 言語を使用して API リクエストを送信し、応答データを処理する方法を学びました。 HTTP リクエストの 3 つのコンポーネントと、Go 言語の標準ライブラリと Resty ライブラリの使用方法について学びました。

もちろん、これらのライブラリに加えて、使用できるサードパーティ ライブラリが多数あります。継続的な学習と実験を通じて、現在のプロジェクトに最適なライブラリとツールを見つけ、それらを使用して開発効率とコードの品質を向上させることができます。

以上がGo 言語を使用して API をリクエストするプロセスについて話しましょうの詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。

ソース:php.cn
このウェブサイトの声明
この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、admin@php.cn までご連絡ください。
人気のチュートリアル
詳細>
最新のダウンロード
詳細>
ウェブエフェクト
公式サイト
サイト素材
フロントエンドテンプレート