Browse Source

创建项目

yjp 1 year ago
parent
commit
f70ead5883
4 changed files with 189 additions and 0 deletions
  1. 19 0
      .gitignore
  2. 37 0
      http_client.go
  3. 21 0
      instance.go
  4. 112 0
      request.go

+ 19 - 0
.gitignore

@@ -0,0 +1,19 @@
+# Binaries for programs and plugins
+*.exe
+*.exe~
+*.dll
+*.so
+*.dylib
+
+# Test binary, build with `go test -c`
+*.test
+
+# Output of the go coverage tool, specifically when used with LiteIDE
+*.out
+
+.idea/
+.DS_Store
+**/bin
+
+/vendor/
+**/logs

+ 37 - 0
http_client.go

@@ -0,0 +1,37 @@
+package http_client
+
+import (
+	"das/application/ports"
+	"github.com/go-resty/resty/v2"
+	"time"
+)
+
+type Client struct {
+	client *resty.Client
+}
+
+func New() *Client {
+	return &Client{
+		client: resty.New(),
+	}
+}
+
+func Destroy(client *Client) {
+	if client == nil {
+		return
+	}
+
+	client.client = nil
+}
+
+func (client *Client) NewRequest(opts ...ports.NewRequestOption) ports.HttpRequest {
+	for _, opt := range opts {
+		opt(client)
+	}
+
+	return &Request{request: client.client.R()}
+}
+
+func (client *Client) SetTimeout(timeout time.Duration) {
+	client.client.SetTimeout(timeout)
+}

+ 21 - 0
instance.go

@@ -0,0 +1,21 @@
+package http_client
+
+var clientInstance *Client
+
+func InitInstance() {
+	if clientInstance == nil {
+		clientInstance = New()
+	}
+}
+
+func DestroyInstance() {
+	if clientInstance == nil {
+		return
+	}
+
+	Destroy(clientInstance)
+}
+
+func GetInstance() *Client {
+	return clientInstance
+}

+ 112 - 0
request.go

@@ -0,0 +1,112 @@
+package http_client
+
+import (
+	"das/application/ports"
+	"encoding/json"
+	"errors"
+	"github.com/go-resty/resty/v2"
+)
+
+type Request struct {
+	request *resty.Request
+}
+
+func (request *Request) SetHeaders(headers map[string]string) {
+	request.request.SetHeaders(headers)
+}
+
+func (request *Request) SetQueryParams(queryParams map[string]string) {
+	request.request.SetQueryParams(queryParams)
+}
+
+func (request *Request) SetPathParams(pathParams map[string]string) {
+	request.request.SetPathParams(pathParams)
+}
+
+func (request *Request) Post(url string, body any, opts ...ports.RequestOption) (ports.HttpResponse, error) {
+	for _, opt := range opts {
+		opt(request)
+	}
+
+	restyRequest := request.request
+
+	resp, err := restyRequest.SetBody(body).Post(url)
+	if err != nil {
+		return nil, err
+	}
+
+	if resp.IsError() {
+		return nil, errors.New(resp.Status())
+	}
+
+	return &Response{response: resp}, nil
+}
+
+func (request *Request) Delete(url string, opts ...ports.RequestOption) (ports.HttpResponse, error) {
+	for _, opt := range opts {
+		opt(request)
+	}
+
+	restyRequest := request.request
+
+	resp, err := restyRequest.Delete(url)
+	if err != nil {
+		return nil, err
+	}
+
+	if resp.IsError() {
+		return nil, errors.New(resp.Status())
+	}
+
+	return &Response{response: resp}, nil
+}
+
+func (request *Request) Put(url string, body any, opts ...ports.RequestOption) (ports.HttpResponse, error) {
+	for _, opt := range opts {
+		opt(request)
+	}
+
+	restyRequest := request.request
+
+	resp, err := restyRequest.SetBody(body).Put(url)
+	if err != nil {
+		return nil, err
+	}
+
+	if resp.IsError() {
+		return nil, errors.New(resp.Status())
+	}
+
+	return &Response{response: resp}, nil
+}
+
+func (request *Request) Get(url string, opts ...ports.RequestOption) (ports.HttpResponse, error) {
+	for _, opt := range opts {
+		opt(request)
+	}
+
+	restyRequest := request.request
+
+	resp, err := restyRequest.Get(url)
+	if err != nil {
+		return nil, err
+	}
+
+	if resp.IsError() {
+		return nil, errors.New(resp.Status())
+	}
+
+	return &Response{response: resp}, nil
+}
+
+type Response struct {
+	response *resty.Response
+}
+
+func (response *Response) Body() []byte {
+	return response.response.Body()
+}
+
+func (response *Response) Json(resp any) error {
+	return json.Unmarshal(response.response.Body(), resp)
+}