Files
common/ragflow/service/client.go
2026-03-12 08:50:17 +08:00

78 lines
1.6 KiB
Go

package service
import (
"context"
"fmt"
"time"
"gitee.com/red-future---jilin-g/common/ragflow/dto"
"github.com/gogf/gf/v2/encoding/gjson"
"github.com/gogf/gf/v2/frame/g"
"github.com/gogf/gf/v2/net/gclient"
)
type Client struct {
BaseURL string
ApiKey string
Client *gclient.Client
}
// NewClient 创建一个新的 RAGFlow 客户端
func NewClient(baseUrl, apiKey string) *Client {
return &Client{
BaseURL: baseUrl,
ApiKey: apiKey,
Client: g.Client().SetTimeout(30 * time.Second),
}
}
// request 发送 HTTP 请求
func (c *Client) request(ctx context.Context, method, path string, data interface{}, result interface{}) error {
url := fmt.Sprintf("%s%s", c.BaseURL, path)
req := c.Client.Header(map[string]string{
"Authorization": fmt.Sprintf("Bearer %s", c.ApiKey),
"Content-Type": "application/json",
})
var res *gclient.Response
var err error
switch method {
case "GET":
res, err = req.Get(ctx, url, data)
case "POST":
res, err = req.Post(ctx, url, data)
case "PUT":
res, err = req.Put(ctx, url, data)
case "DELETE":
res, err = req.Delete(ctx, url, data)
default:
return fmt.Errorf("unsupported method: %s", method)
}
if err != nil {
return err
}
defer res.Close()
// 读取响应体
body := res.ReadAllString()
// 解析响应
if result != nil {
if err := gjson.DecodeTo(body, result); err != nil {
return fmt.Errorf("failed to decode response: %v, body: %s", err, body)
}
// 检查业务错误码
if commonRes, ok := result.(*dto.CommonResponse); ok {
if !commonRes.IsSuccess() {
return fmt.Errorf("api error: code=%d, message=%s", commonRes.Code, commonRes.Message)
}
}
}
return nil
}