rest 包

rest 包提供了一个简单的 REST Client 用于访问 API 服务。

在这个包中,主要包含三个概念:Config,Client 和 Request。Config 是 Client 的配置,用于创建 Client。而 Request 则由 Client 创建,用来表示每一个 REST 请求。

// RequestExecutor implements a http client.
type RequestExecutor interface {
    Do(req *http.Request) (*http.Response, error)
}

// Config is rest client config.
type Config struct {
    // Scheme is http scheme. It can be "http" or "https".
    Scheme string
    // Host must be a host string, a host:port or a URL to a server.
    Host string
    // Executor is used to execute http requests.
    // If it is empty, http.DefaultClient is used.
    Executor RequestExecutor
}

// Client implements builder pattern for http client.
type Client struct {
    ...
}

// NewClient creates a client.
func NewClient(cfg *Config) (*Client, error)

// Request creates an request with specific method and url path.
// The code is only for checking if status code of response is right.
func (c *Client) Request(method string, code int, url string) *Request

// Request describes a http request.
type Request struct {
    ...
}

// Path sets path parameter.
func (r *Request) Path(name string, value interface{}) *Request

// Query sets query parameter.
func (r *Request) Query(name string, values ...interface{}) *Request

// Header sets header parameter.
func (r *Request) Header(name string, values ...interface{}) *Request

// Form sets form parameter.
func (r *Request) Form(name string, values ...interface{}) *Request

// File sets file parameter.
func (r *Request) File(name string, file interface{}) *Request

// Body sets body parameter.
func (r *Request) Body(contentType string, value interface{}) *Request

// Meta sets header result.
func (r *Request) Meta(value *map[string]string) *Request

// Data sets body result. value must be a pointer.
func (r *Request) Data(value interface{}) *Request

// Do executes the request.
func (r *Request) Do(ctx context.Context) error

Request 保存了一个请求的数据,用 Path,Query,Header,Form,File,Body 来设置请求的相关值,Meta 和 Data 来设置用于接收响应的值(都是指针)。然后 Do 用于真正发起请求,并完成 Meta 和 Data 的填充。

Request 的方法与 API Definition 的除了 Prefab 和 Error 之外的参数和返回值类型一一对应,这样可以十分方便的设置对应的值。由于 Prefab 是由服务端生成而不由客户端提交,Error 由 Do 方法返回,因此这两种类型没有对应的方法。

注:这个 Client 会被由命令 nirvana client 生成的客户端依赖,因此需要确保两者的一致性。如果用户自定义了一些新的请求和响应类型,也需要对这个客户端进行扩展。

results matching ""

    No results matching ""