はじめに
今日はGo言語を用いて外部APIを呼び出し、その結果をJSON形式で取り扱う方法について記載します。
これはWebサービスを開発する際によく用いられる技術で、非常に役立つスキルです。
必要なパッケージのインストール
まずはじめに、net/http
とencoding/json
という2つのパッケージが必要となります。これらはGo言語の標準ライブラリに含まれているので、追加でインストールする必要はありません。
外部APIの呼び出し
まず、net/http
パッケージを使って外部APIを呼び出します。http.Get
関数を使うと、HTTPのGETリクエストを送ることができます。
以下に簡単な例を示します。
package main
import (
"fmt"
"net/http"
)
func main() {
// http.Getを用いて外部APIを呼び出す
resp, err := http.Get("https://api.example.com/data")
// エラーハンドリング
if err != nil {
fmt.Printf("The HTTP request failed with error %s\n", err)
} else {
fmt.Println("The HTTP request succeeded")
}
}
このコードは "https://api.example.com/data" というURLに対してHTTPのGETリクエストを送り、その結果を表示します。
JSONの取り扱い
次に、encoding/json
パッケージを使ってAPIから返されるJSONデータを取り扱います。例えば、APIから以下のようなJSONが返されるとしましょう。
{
"data": "Hello, World!"
}
これを取り扱うためのGoのコードは以下の通りです。
package main
import (
"encoding/json"
"fmt"
"io/ioutil"
"net/http"
)
// APIから返されるJSONの構造を定義する
type APIResponse struct {
Data string `json:"data"`
}
func main() {
// http.Getを用いて外部APIを呼び出す
resp, err := http.Get("https://api.example.com/data")
// エラーハンドリング
if err != nil {
fmt.Printf("The HTTP request failed with error %s\n", err)
} else {
// ioutil.ReadAllでレスポンスボディを全て読み取る
data, _ := ioutil.ReadAll(resp.Body)
var responseObject APIResponse
// json.UnmarshalでJSONデータをGoのオブジェクトに変換する
json.Unmarshal(data, &responseObject)
fmt.Println(responseObject.Data)
}
}
このコードでは、APIから返されるJSONデータをioutil.ReadAll
関数で全て読み取ります。次に、json.Unmarshal
関数を使ってJSONデータをGoのオブジェクトに変換します。
注意すべき点は、APIResponse
という型を作成し、その中にAPIから返されるデータの構造を定義しています。ここでは簡単のため、Data
という1つのフィールドだけを持つ構造体を作成していますが、実際のAPIのレスポンスに合わせて構造体を定義する必要があります。