我试图组成一个简单的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)
这给我提供了一个非常可读(嵌套)的实现,但是我很难模拟这些端点,因为使用接口会有效地消除对嵌套结构的任何识别。推荐一种构造API的方法,以保持其可读性,同时模拟每个端点?
您正在与语言作斗争,并将您的OOP爱好带入并非为此设计的语言。
我个人会改变方向,并使用老式的良好平面结构和功能。
虽然,如果您想继续进行设计,则可以模拟整个接口而不是接口http
。在测试实际http
有效负载而不是对接口进行调用时,可以更加自信地测试代码。
注入HttpClient
到Vehicle
:func 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()
我开始玩Quarkus和它的REST客户端。根据文档,应该创建一个Jax-RS带注释的接口,并用@RegisterRestClient进一步注释。 我的问题是,在服务器提供的一个工件中,我已经有了我需要连接的服务的JaxRS接口,我可以直接导入它。有没有办法使用已经创建的外部Jax-RS接口来创建服务?复制粘贴代码来获得一个完美的界面似乎是错误的,因为它已经很好地为我服务了。
当我在客户端使用下一段代码时: 我得到一个例外,它只允许使用单个套接字地址。但在服务器端我使用: 我需要编写一个客户端,可以在同一端口的TCP和UDP协议上工作。TCP-通用命令,UDP-语音流。如何做到这一点?
我有一个PostGIS数据库和一个基于HikariCP构建的客户端,用于从数据库中读取数据。我的客户可以在一些机器上毫无问题地读取数据。然而,在其他一些机器上,客户机被卡住,不能读取任何数据,抛出套接字超时异常。 在客户端在数据库端抛出之前,我监视了表。上面查询的相应行有和。此外,数据库服务器记录了指示连接丢失的消息。 版本 PostGIS-jdbc: 2.2.1 (postgresql jdbc
我正在尝试实现类似于Google Play Music的“立即收听”布局。我在网上找到的每一个例子都是一个简单的。我正在努力实现更复杂的目标。差不多 整个布局(减去工具栏)是否可以是一个包含两个或多个RecyclerView的?差不多 最终,我想要实现的是一个如下的布局,并保持良好的性能。
在Python中,我将“WebSockets”库用于websocket客户端。 问题是一旦收到响应,客户端websocket连接就会断开。我希望连接保持打开,以便以后可以发送和接收消息。 为了保持websocket打开并能够在以后发送和接收消息,我需要做哪些更改?
问题内容: 当使用Socket类时,它正在某个端口上建立与服务器的TCP连接,但是ServerSocket能够在服务器上为每个接受请求处理多个客户端连接,并将其委托给线程来处理该请求。但是ServerSocket类如何在同一个端口上接受多个tcp连接。 这是否意味着要由操作系统来决定它允许多少个连接,或者允许的最大积压量是多少,并且可以由OS之上的应用程序控制(我的意思是Java受OS支持的最大积