📮
「郵便番号・デジタルアドレス for Biz」のGolang向けクライアントライブラリを開発した
こちらが作ったものになります。名前の yd4b
は 「Yuubinbangou DigitalAddress for Biz」に由来しています。
使い方
サンプルコードとしては以下の通りです。
package main
import (
"log"
"github.com/aethiopicuschan/yd4b-go/v1/yd4b"
)
func main() {
// APIクライアントを作成
client := yd4b.NewClient("https://example.com", "Your Client ID", "Your Client secret", "Your global ip address")
// トークンを取得してクライアントにセットする
res, err := client.GetToken()
if err != nil {
log.Fatal(err)
}
client.SetToken(res.Token)
// 郵便番号、事業所個別郵便番号、デジタルアドレスから住所を検索
res2, err := client.Searchcode("1000001")
if err != nil {
log.Fatal(err)
}
log.Println(res2.Addresses[0].PrefName, res2.Addresses[0].CityName, res2.Addresses[0].TownName)
// Output: 東京都 千代田区 千代田
// 住所から郵便番号を検索
res3, err := client.AddressZip(yd4b.WithPrefName("東京都"), yd4b.WithCityName("千代田区"), yd4b.WithTownName("千代田"))
if err != nil {
log.Fatal(err)
}
log.Println(res3.Addresses[0])
// Output: {1000001 13 東京都 トウキョウト TOKYO 13101 千代田区 チヨダク CHIYODA-KU 千代田 チヨダ CHIYODA}
}
解説
NewClient
に渡す必要があるのは以下の3点です。
- APIのオリジン
- クライアントIDとクライアントシークレット
- 送信元IPアドレス
このうち、APIのオリジンはAPIリファレンスでダウンロードできるOpenAPI specificationに記載されています。
クライアントIDとクライアントシークレットについてはテスト用API認証情報を用いるか、システムを新規登録した際に取得することができます。
送信元IPアドレスは実際にAPIを叩く主体のIPアドレスを設定すれば問題ありません。例えば、自宅のPCから叩く場合は自宅のIPアドレスを設定するといった感じです。
オプションについて
現在提供されている searchcode
と addresszip
というAPIはそれぞれオプションが存在します。これらを全て引数に取るような実装はあまりにも面倒くさいため、Functional Option Patternで指定できるようにしました。上記サンプルコードでも With...
という関数を使っていますが、まさにそれです。詳細はドキュメントを参考にしてください。
カスタムHTTPクライアント
HTTPリクエストを行うにあたって、デフォルトでは http.DefaultClient.Do
を使用していますが、型さえ一致していれば他の実装に置き換えることが可能です。具体的には以下のような形です。
func(req *http.Request) (*http.Response, error)
yd4b.Client
の SetDoFunc
に上記の型の関数を渡すことで設定できます。
エラーハンドリング
独自の Error
型を定義しています。これによって、以下のような実装が可能です。
if err := someFn(); err != nil {
var yd4berr *yd4b.Error
if errors.As(err, &yd4berr) {
http.Error(w, yd4berr.Message, yd4berr.StatusCode)
return
}
http.Error(w, "internal server error", 500)
}
以上です。お読み頂きありがとうございます。
Discussion