Go SDK 接入教程:10 分钟调通第一个接口

用 Go 调用 YesApi 接口的完整教程:从安装、签名算法、发起请求到错误处理,附可运行示例代码。

免费试用 YesApi Pro 查看全部定价 →
最后更新:2026-07-20作者:YesApi Pro 团队 · 广州果创网络科技 SDK接入
核心结论:Go 接入 YesApi 三步走:①按「参数值排序拼接 + app_secret 后 MD5 大写」生成 sign;②POST 到 HOST/?s=服务名,带 s/app_key/sign;③判断返回 ret==200 再取 data。下方有 Go 完整示例代码。
目录
⭐ 编辑推荐

想要自己的 API 平台?

YesApi Pro 私有部署后,用同样的 SDK 方式接入你自建的接口——源码交付、当天上线。

一、准备与安装

Go 用标准库即可:crypto/md5 签名、net/http + net/url 发 form 请求,无需第三方依赖。

# 仅用 Go 标准库,无需额外安装
go mod init yesapi-demo

二、签名算法(核心)

YesApi 接口用签名(sign)防篡改,算法固定:把参数按 key 升序排序 → 拼接所有参数值(不含 key)→ 末尾追加 app_secret → MD5 → 转大写。各语言实现一致,务必与服务端保持相同规则。

package main

import (
    "crypto/md5"
    "encoding/hex"
    "sort"
    "strings"
)

// 签名:按 key 排序 → 拼接所有 value → 追加 app_secret → md5 → 大写
func yesapiSign(params map[string]string, appSecret string) string {
    keys := make([]string, 0, len(params))
    for k := range params {
        keys = append(keys, k)
    }
    sort.Strings(keys)
    var b strings.Builder
    for _, k := range keys {
        b.WriteString(params[k])
    }
    b.WriteString(appSecret)
    sum := md5.Sum([]byte(b.String()))
    return strings.ToUpper(hex.EncodeToString(sum[:]))
}

三、发起第一个请求

请求方式为 POST,地址为 HOST/?s=服务名,参数用 form 表单编码,需带上 sapp_key 与计算好的 sign。下面是 Go 的完整可运行示例:

import (
    "io"
    "net/http"
    "net/url"
    "strings"
)

func main() {
    host := "http://your-domain.yesapi.cn/"
    appKey := "YOUR_APP_KEY"
    appSecret := "YOUR_APP_SECRET"
    service := "App.Table.FreeQuery"

    params := map[string]string{
        "model_name": "news",
        "page":       "1",
        "perpage":    "10",
        "s":          service,
        "app_key":    appKey,
    }
    params["sign"] = yesapiSign(params, appSecret)

    form := url.Values{}
    for k, v := range params {
        form.Set(k, v)
    }

    endpoint := strings.TrimRight(host, "/") + "/?s=" + service
    resp, _ := http.PostForm(endpoint, form)
    defer resp.Body.Close()
    body, _ := io.ReadAll(resp.Body)
    println(string(body))
}

四、返回结构与错误处理

YesApi 统一返回 JSON:ret 为状态码(200 成功),data 为业务数据,msg 为错误信息。务必判断 ret 再取数据:

// 用 encoding/json 解析,判断 ret 字段
// {"ret":200,"data":{...},"msg":""}
var result struct {
    Ret  int         `json:"ret"`
    Data interface{} `json:"data"`
    Msg  string      `json:"msg"`
}
json.Unmarshal(body, &result)
if result.Ret == 200 {
    // 使用 result.Data
} else {
    log.Println("YesApi error:", result.Msg)
}

五、上生产的几点建议

  • 密钥安全:app_secret 只放服务端,切勿写进前端/App 客户端
  • 超时与重试:设置合理超时(如 3-5s),对幂等接口做有限重试
  • 时间戳/随机串:如服务端要求,可加 timestamp/nonce 参与签名防重放
  • HTTPS:生产环境务必用 HTTPS,防止密钥与数据在传输中泄露
YesApi Java Pro 旗舰版
¥33,800/套·永久
不含源码·私有部署
立即购买
含源码版
¥49,800/套·永久
含完整源码·可二次开发
立即购买
招投标/信创版
¥65,800起·永久
含标书/软著/中标案例
立即购买

搭建你自己的 API 平台

YesApi Pro 支持 PHP/Java 双版本、私有部署、源码交付,接入方式与本教程完全一致。

立即预约演示 →

常见问题

Q:Go 调用签名总是错误怎么办?

99% 是签名规则不一致:确认①参数按 key 升序排序 ②只拼接「值」不拼 key ③末尾追加 app_secret ④结果转大写。参数值需与最终发送的一致(含 s、app_key)。

Q:app_key 和 app_secret 从哪来?

在 YesApi Pro 管理后台创建应用后获得。app_key 用于标识身份,app_secret 用于签名,务必只存服务端。

Q:请求用 GET 还是 POST?

推荐 POST,参数用 form 表单编码提交到 HOST/?s=服务名。POST 更安全,也避免 URL 长度限制。

Q:YesApi Pro 私有部署后接入方式一样吗?

一样。私有部署只是把 HOST 换成你自己的域名,签名算法与调用方式完全一致。Java 旗舰版 ¥33,800 起、PHP 标准版 ¥15,899 起。

继续阅读:更多 API 选型指南