92 lines
2.0 KiB
Go
92 lines
2.0 KiB
Go
package service
|
|
|
|
import (
|
|
"context"
|
|
"net/http"
|
|
"os"
|
|
|
|
"github.com/gogf/gf/v2/frame/g"
|
|
"github.com/gogf/gf/v2/net/gclient"
|
|
)
|
|
|
|
type RequestContext struct {
|
|
*gclient.Client
|
|
context.Context
|
|
}
|
|
|
|
/**
|
|
* 统一API请求方法
|
|
* @param void
|
|
* @author dc.To
|
|
* @version 20250313
|
|
*/
|
|
func Request(ctx context.Context) *RequestContext {
|
|
|
|
c := &RequestContext{
|
|
Client: gclient.New(),
|
|
Context: ctx,
|
|
}
|
|
|
|
url, err := g.Cfg("api").Get(ctx, "url")
|
|
if err != nil {
|
|
g.Log().Error(ctx, "Api url not found in config file: ", err.Error())
|
|
}
|
|
|
|
c.SetPrefix(url.String())
|
|
c.SetContentType("application/json")
|
|
c.Use(handle)
|
|
return c
|
|
}
|
|
|
|
func (r *RequestContext) Header(k, v string) *RequestContext {
|
|
r.SetHeader(k, v)
|
|
return r
|
|
}
|
|
|
|
func (r *RequestContext) ContentType(t string) *RequestContext {
|
|
r.SetContentType(t)
|
|
return r
|
|
}
|
|
|
|
func (r *RequestContext) Get(path string, data interface{}) (*gclient.Response, error) {
|
|
return r.Client.Get(r.Context, path, data)
|
|
}
|
|
|
|
func (r *RequestContext) Post(path string, data interface{}) (*gclient.Response, error) {
|
|
return r.Client.Post(r.Context, path, data)
|
|
}
|
|
|
|
func (r *RequestContext) GetVar(path string, data interface{}) *g.Var {
|
|
return r.Client.GetVar(r.Context, path, data)
|
|
}
|
|
|
|
func (r *RequestContext) PostVar(path string, data interface{}) *g.Var {
|
|
return r.Client.PostVar(r.Context, path, data)
|
|
}
|
|
|
|
func (r *RequestContext) GetBytes(path string, data interface{}) []byte {
|
|
return r.Client.GetBytes(r.Context, path, data)
|
|
}
|
|
|
|
func (r *RequestContext) PostBytes(path string, data interface{}) []byte {
|
|
return r.Client.PostBytes(r.Context, path, data)
|
|
}
|
|
|
|
func (r *RequestContext) GetContent(path string, data interface{}) string {
|
|
return r.Client.GetContent(r.Context, path, data)
|
|
}
|
|
|
|
func (r *RequestContext) PostContent(path string, data interface{}) string {
|
|
return r.Client.PostContent(r.Context, path, data)
|
|
}
|
|
|
|
func handle(c *gclient.Client, r *http.Request) (resp *gclient.Response, err error) {
|
|
resp, err = c.Next(r)
|
|
|
|
if os.Getenv("APP_ENV") == "dev" {
|
|
resp.RawDump()
|
|
}
|
|
|
|
return resp, err
|
|
}
|