【ZTAPI × Moya】交易所 REST 协议与 iOS 网络抽象层:该比什么、怎么用?

5 阅读4分钟

【ZTAPI × Moya】交易所 REST 协议与 iOS 网络抽象层:该比什么、怎么用?

基于上次有反馈说尝试下ZTAPI,而不是用Moya、Alamofire。特意出一期比较,到头来发现没有什么可比性,因为这两者不是一个纬度的,ZTAPI只是一个接口文档,并不是一个 iOS 三方库。但是看也看了,顺便出一期文章吧~


前置知识:REST 是什么?

REST(Representational State Transfer,表述性状态转移)是一种 Web API 的架构风格,不是具体的协议或库。它由 Roy Fielding 在 2000 年的博士论文中提出,核心思想是:

核心概念说明
资源(Resource)每个 URL 代表一个资源,如 /api/v1/tickers 代表“所有交易对行情”
HTTP 动词用 GET(查)、POST(增)、PUT(改)、DELETE(删)表达操作意图
无状态每次请求携带完整信息,服务端不保留会话上下文
JSON 响应返回结构化数据,客户端自行解析渲染

简单说:REST = 用标准 HTTP 方法 + URL 路径来操作服务端资源,返回 JSON。ZTAPI 就是一套遵循 REST 风格的交易所开放接口。


一、先把概念对齐:两者不是「二选一」

名称本质类比
ZTAPI(本文指 ZT 交易所开放文档 中的 HTTP API)服务端规定的 URL、参数、签名规则、返回 JSON 结构「菜单 + 点餐规则」
MoyaiOS 里基于 Alamofire 的客户端封装库,用 TargetType 把每个接口变成类型安全的枚举「后厨标准化出餐流程」

因此:ZTAPI 描述「调什么」;Moya 描述「在 App 里怎么组织这次调用」
你要做的是:用 URLSession / Alamofire / Moya 等客户端技术,实现 ZTAPI 文档里的请求;Moya 只是其中一种更利于工程化的写法。


二、ZTAPI 要点(基于公开文档归纳)

1. 接入与请求形态

  • 域名:文档提供海外 / 大陆等入口(以官网最新为准,Demo 使用文档中出现的 https://www.ztbzh.net 仅作示例)。
  • 请求:支持 GET/POST;POST 时常为 application/x-www-form-urlencoded
  • 必选请求头X-SITE-ID: 1(文档明确要求)。
  • 接口类型
    • 公共接口(如行情):一般无需 api_key / sign
    • 私有接口(账户、下单等):需要 api_key + 按文档对参数做 MD5 签名 等。

2. 公共行情示例

  • GET /api/v1/tickers:返回多交易对行情(文档中有响应字段说明)。
  • 适合作为 Demo:无密钥、逻辑简单,便于和 Moya 写法对照。

3. 私有接口与签名(概念)

文档给出思路:对 POST 业务参数排序拼接,再拼接 secret_keyMD5 大写十六进制 得到 sign
在 iOS 用 Moya 时,常见做法是:

  • Plugin自定义 Task/参数构建 统一注入 api_keysign
  • 绝不把 Secret 写进客户端仓库或前端;生产环境应以后端代理或安全环境为准。

三、Moya 能帮你解决什么(相对「手写 URLSession」)

  1. 一个枚举 case 对应一个接口pathmethodparametersheaders 集中维护,减少字符串散落。
  2. 与业务模型解耦response.map(T.self) 解码路径清晰。
  3. 插件链:日志、Token、将来接 ZT 签名 都可以插件化。
  4. 测试sampleData + StubbingProvider 可离线测解码与 UI。

ZTAPI 本身不提供这些能力——它只是 HTTP 契约;Moya 是 Swift 侧的实现与组织方式


四、差异对照表

维度ZTAPI(交易所 REST)Moya(iOS 库)
所在层次服务端 API 规范客户端网络封装
是否依赖 Swift否,任意语言可调是,Swift + Alamofire
认证公共行情无;私有接口要 key + sign无内置「交易所签名」,需自写 Plugin/拼接
版本演进随交易所文档变更随 CocoaPods/SPM 版本
典型用途行情、交易、订单任意后端(含把 ZT 当作普通 REST 调)

五、使用场景建议

场景建议
学习 REST、对照文档练手先用 URLSession 调通公共 tickers,再改 Moya TargetType 复现同一请求,理解分层。
公司内部业务后端(非交易所)优先 Moya(或同类) 统一工程内所有 TargetType,与 ZT 无关。
正式接入交易所私有接口密钥与签名放服务端;App 只调自家网关,或严格安全审计后再直连;客户端可用 Moya + Plugin 减少重复代码。
仅需行情展示、无交易公共接口 + Moya 即可;注意频率限制与合规。

六、安全与合规

  • 交易与资产相关能力涉及高风险,务必阅读交易所最新条款与本地法规。
  • 不要在示例或生产代码中硬编码 API Secret;文档中的签名示例仅作理解算法之用。
  • 生产环境优先 服务端聚合行情/交易,App 只访问自家域名。

七、延伸阅读


文档中的域名、路径与签名规则以 ZT 官方最新说明为准;本文仅用于技术学习。