用 Java 调用 YesApi 接口的完整教程:从安装、签名算法、发起请求到错误处理,附可运行示例代码。
YesApi Pro 私有部署后,用同样的 SDK 方式接入你自建的接口——源码交付、当天上线。
Java 侧用标准库 + 任一 HTTP 客户端(OkHttp / HttpClient)即可,签名用 JDK 自带的 MessageDigest。以下用 OkHttp 示例。
<!-- Maven 依赖:OkHttp -->
<dependency>
<groupId>com.squareup.okhttp3</groupId>
<artifactId>okhttp</artifactId>
<version>4.12.0</version>
</dependency>YesApi 接口用签名(sign)防篡改,算法固定:把参数按 key 升序排序 → 拼接所有参数值(不含 key)→ 末尾追加 app_secret → MD5 → 转大写。各语言实现一致,务必与服务端保持相同规则。
// 签名:TreeMap 按 key 升序 → 拼接所有 value → 追加 app_secret → md5 → 大写
import java.security.MessageDigest;
import java.util.TreeMap;
public static String yesapiSign(TreeMap<String, String> params, String appSecret) throws Exception {
StringBuilder sb = new StringBuilder();
for (String v : params.values()) sb.append(v);
sb.append(appSecret);
byte[] digest = MessageDigest.getInstance("MD5")
.digest(sb.toString().getBytes("UTF-8"));
StringBuilder hex = new StringBuilder();
for (byte b : digest) hex.append(String.format("%02X", b));
return hex.toString();
}请求方式为 POST,地址为 HOST/?s=服务名,参数用 form 表单编码,需带上 s、app_key 与计算好的 sign。下面是 Java 的完整可运行示例:
import okhttp3.*;
import java.util.TreeMap;
String host = "http://your-domain.yesapi.cn/";
String appKey = "YOUR_APP_KEY";
String appSecret = "YOUR_APP_SECRET";
String service = "App.Table.FreeQuery";
TreeMap<String, String> params = new TreeMap<>();
params.put("model_name", "news");
params.put("page", "1");
params.put("perpage", "10");
params.put("s", service);
params.put("app_key", appKey);
params.put("sign", yesapiSign(params, appSecret));
FormBody.Builder form = new FormBody.Builder();
params.forEach(form::add);
Request request = new Request.Builder()
.url(host.replaceAll("/$", "") + "/?s=" + service)
.post(form.build())
.build();
OkHttpClient client = new OkHttpClient();
try (Response resp = client.newCall(request).execute()) {
System.out.println(resp.body().string());
}YesApi 统一返回 JSON:ret 为状态码(200 成功),data 为业务数据,msg 为错误信息。务必判断 ret 再取数据:
// 建议用 Jackson/Gson 解析,判断 ret 字段
// {"ret":200,"data":{...},"msg":""}
JsonNode root = new ObjectMapper().readTree(json);
if (root.path("ret").asInt() == 200) {
JsonNode data = root.path("data"); // 业务数据
} else {
String msg = root.path("msg").asText("请求失败");
log.error("YesApi error: {}", msg);
}99% 是签名规则不一致:确认①参数按 key 升序排序 ②只拼接「值」不拼 key ③末尾追加 app_secret ④结果转大写。参数值需与最终发送的一致(含 s、app_key)。
在 YesApi Pro 管理后台创建应用后获得。app_key 用于标识身份,app_secret 用于签名,务必只存服务端。
推荐 POST,参数用 form 表单编码提交到 HOST/?s=服务名。POST 更安全,也避免 URL 长度限制。
一样。私有部署只是把 HOST 换成你自己的域名,签名算法与调用方式完全一致。Java 旗舰版 ¥33,800 起、PHP 标准版 ¥15,899 起。