2025-09-09 09:27:43 +08:00

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
}