亚洲在线久爱草,狠狠天天香蕉网,天天搞日日干久草,伊人亚洲日本欧美

為了賬號安全,請及時綁定郵箱和手機立即綁定
已解決430363個問題,去搜搜看,總會有你想問的

如何在具有接口的 API 客戶端中嵌套端點,同時保持可讀性

如何在具有接口的 API 客戶端中嵌套端點,同時保持可讀性

Go
萬千封印 2023-05-08 15:25:30
我正在嘗試編寫一個簡單的 API 客戶端,但我一直在努力弄清楚如何使其可讀和可測試。如何在保持可測試性的同時編寫嵌套結構?偽代碼:type VehicleEndpoint struct {    Car CarEndpoint    VehicleGetter}type VehicleGetter interface {    Get(string) Vehicle}type Vehicle struct {    kind string}type VehicleClient struct {    http.Client    url string}func (v *VehicleClient) Get(kind string) Vehicle {    resp := v.Do(v.url, kind)    return Vehicle{        kind: resp.Kind    }}type CarEndpoint struct...type CarGetter interface...type Car struct...type CarClient struct...type API struct {    Vehicle VehicleEndpoint}api := API{    Vehicle: VehicleEndpoint{        VehicleGetter: VehicleClient{            http.Client{},        }        Car: CarEndpoint{          CarGetter: CarClient{            http.Client{},          }       }    }}現在我可以像這樣調用 API:api.Vehicle.Car.Get(kind)這給了我一個非??勺x的(嵌套的)實現來處理,但是我很難模擬這些端點,因為接口的使用會有效地消除對嵌套結構的任何識別。推薦的構建 API 的方法是什么,在保持其可讀性的同時還模擬了每個端點?
查看完整描述

1 回答

?
精慕HU

TA貢獻1845條經驗 獲得超8個贊

您正在與語言作斗爭,并將您的 OOP 愛好帶入并非為此而設計的語言。


我個人會改變方向并使用舊的良好扁平結構和功能。


雖然,如果你想繼續你的設計,你可以模擬整個http堆棧而不是界面。與調用接口相比,測試真實有效http負載時,您可以更有信心地測試代碼。


注入:HttpClient_Vehiclefunc NewVehicle(httpClient *http.Client){}


在測試代碼中,使用*http.ServeMux:


mux.Handle("/path1", http.HandlerFunc(func(w http.ResponseWriter, r *http.Request) {

        // assessments and mocked response

}))

mux.Handle("/path2", http.HandlerFunc(func(w http.ResponseWriter, r *http.Request) {

        // assessments and mocked response

}))

// fallback to show not implemented routes

result.mux.Handle("/", http.HandlerFunc(func(w http.ResponseWriter, r *http.Request) {

        result.t.Errorf("Not Supported route %q", r.URL.Path)

}))

構建 Http 服務器:


server := httptest.NewServer(mux)

從多路復用服務器創建 Http 客戶端:


client := server.Client()


查看完整回答
反對 回復 2023-05-08
  • 1 回答
  • 0 關注
  • 118 瀏覽
慕課專欄
更多

添加回答

舉報

0/150
提交
取消
微信客服

購課補貼
聯系客服咨詢優惠詳情

幫助反饋 APP下載

慕課網APP
您的移動學習伙伴

公眾號

掃描二維碼
關注慕課網微信公眾號