go-ptx 是公共運輸整合資訊流通服務平臺(Public Transport Data eXchange,PTX)的非官方 Golang 客戶端庫。
提醒:PTX 將於 2022/12/1 停止服務,請轉往新平台 TDX 運輸資訊整合流通服務。
支援的 APIs:
go-ptx 使用 go-swagger 自動從 PTX 的 OpenAPI 定義檔產生客戶端庫。 注意:請勿修改這些自動產生的程式碼。
- Go >= 1.18
- GNU Make
- golangci-lint
- go-swagger
安裝依賴工具:
# Linter
$ curl -sfL https://install.goreleaser.com/github.com/golangci/golangci-lint.sh | sh -s -- -b $(go env GOPATH)/bin latest
# go-swagger
$ go get -u github.com/go-swagger/go-swagger/cmd/swagger
下載依賴套件:
$ go mod download
# 1. 下載 PTX 的 OpenAPI 定義檔,並對已知問題進行修正。
$ make spec
# 2. 驗證定義檔
$ make validate
# 3. 從定義檔產生客戶端庫
$ make generate
# 4. 驗證客戶端庫
$ make lint
# 5. 執行測試
$ make test
# 6. 執行整合測試
$ make test-integration
目錄 ./test/integration 提供基本的整合測試,這些測試會使用實際的 PTX API 服務進行, 當測試發生錯誤時即停止,以盡可能發現任何不相容的修改。
手動執行以下指令,並將 APP_ID
與 APP_KEY
替換成您申請的憑證:
$ APP_ID=YOUR_APP_ID APP_KEY=YOUR_APP_KEY make test-integration
PTX 會不定期更新 OpenAPI 定義檔來提供新功能或修正,為了減輕維護第三方客戶端庫的負擔, go-ptx 透過 GitHub Actions 的 Scheduled events 機制,定期檢查 OpenAPI 定義檔,發現異動時自動產生 Pull request 更新。
請參考範例。
PTX 要求每個請求都必須帶上 HMAC 認證參數,您可以在 transport 使用 auth.NewAuthentication()
,它會自動為每個請求產生 HMAC 認證參數:
import (
apiclient "github.com/minchao/go-ptx/basic/v2/client"
"github.com/minchao/go-ptx/pkg/auth"
"github.com/minchao/go-ptx/pkg/transport"
)
func main() {
tp := transport.New()
tp.DefaultAuthentication = auth.NewAuthentication(os.Getenv("APP_ID"), os.Getenv("APP_KEY"))
client := apiclient.New(tp, nil)
}
另外,使用自訂 http.Client
時的認證處理方式如下:
func main() {
httpClient := http.DefaultClient
httpClient.Transport = auth.NewTransport(os.Getenv(APP_ID"), os.Getenv("APP_KEY"))
tp := transport.NewWithClient(httpClient)
client := apiclient.New(tp, nil)
}
請參考 CHANGELOG.md。
歡迎透過 Issues 與 Pull requests。