Skip to content

HTTP 调用约定 ​

HTTP 路由和 SDK 方法使用同一套业务模块,但参数传递和返回形式不同。SDK 的用法见 编程式调用。

传入业务参数 ​

普通接口可以通过 GET query 或 POST body 传参。服务能解析 JSON、URL 编码表单和 multipart 表单。上传文件时使用 POST multipart,字段名以接口页为准。

bash
curl 'http://127.0.0.1:3021/search' \
  -H 'Content-Type: application/json' \
  --data '{"keywords":"海阔天空","limit":5}'

JSON body 应是对象,不能是数组或单个值。query 中的数字通常是字符串,模块会按自己的输入规则检查和整理。

HTTP 还保留 cookie 和 noCookie。domain、proxy、headers、fetcher、state、retry、timeoutMs、signal、crypto、ip、realIP、ua 等执行配置不能从 HTTP 传入,服务会在发送上游请求前返回 400。需要这些设置时,在受信任的服务端代码里调用 SDK。

cookie 是整体替换,不是把三个来源的每一对 Cookie 都合并。body 里传了 cookie,就使用 body 的值。

上游返回的 Cookie 会通过 Set-Cookie 写回。HTTPS 响应会补上 SameSite=None; Secure。noCookie=true、noCookie=1 可以停止写回,但不会清空请求身份,也不会阻止模块处理 Cookie。

HTTP 返回什么 ​

SDK 返回 { status, body, cookie },HTTP 服务则将其中的 body 作为 JSON 正文,status 作为 HTTP 状态码,Cookie 放在响应头里。

某些业务状态会保留在 JSON 的 code 中,比如二维码状态 800 至 803。因此应用要同时检查 HTTP 状态和接口自己的业务字段。

状态常见含义
400输入不符合要求,或通过 HTTP 传入执行配置
408客户端请求体读取超时
413客户端请求体过大
429入口请求太频繁,或网易云返回了限频
499调用已取消;客户端已经断开时未必还能收到响应
502上游传输或响应处理失败
503模块或上传容量不足
504模块调用超过期限

429 和容量拒绝会附带 Retry-After。参数限制、可信代理和限流配置见 部署 HTTP 服务。

哪些响应会缓存 ​

HTTP 默认将 search、lyric、song_detail、playlist_detail 的成功结果缓存 120 秒。同一服务实例中的相同读取也会合并,身份、参数和执行设置都参与判断。

登录、二维码轮询、批量、写入、上传和未列入清单的模块不走这份缓存。轮询无需用时间戳绕过本地缓存。

不要把变化的 timestamp 当成本库通用的刷新开关。搜索等模块会在构造缓存键前移除未声明字段,增加时间戳仍可能命中同一个结果。需要关闭 HTTP 本地缓存时,使用源码服务配置 cacheEnabled: false;CDN 等外部缓存应分别配置。

Released under the MIT License.