Appearance
中心仓通信规格
以用户在 cangjie-repo.toml 中配置的 repository.home.registry 为基础,cjpm 将按照本章节定义的通信规格向中心仓发送制品和索引的上传下载请求。
制品包上传
cjpm publish 会将 bundle 打包的 cjpm 模块对应的制品包和元数据发布到中心仓,对应 API 规格为:
- 方法:
POST url:- 无组织模块:
/pkg/${module-name}; - 组织内模块:
/pkg/${module-name}?organization=${org-name};
- 无组织模块:
header:- 用户 token:
Authorization=${token};
- 用户 token:
body:- 元数据:
- 元数据版本 (1 byte),对应元数据内的
meta-version; - 元数据长度 (4 byte),对应元数据的字节长度 m;
- 元数据内容 (m byte),对应整个元数据字节流;
- 元数据版本 (1 byte),对应元数据内的
- 制品包:
- 制品包版本 (1 byte),对应索引内的
index-version; - 制品包长度 (4 byte),对应制品包的字节长度 n;
- 制品包内容 (n byte),对应整个制品包字节流。
- 制品包版本 (1 byte),对应索引内的
- 元数据:
例如,上传无组织模块 demo1 的 1.0.0 版本时,url = /pkg/demo1;上传组织 org 的模块 demo2 的 2.0.0 版本时,url = /pkg/demo2?organization=org。url 中不体现版本号。
制品包下载
cjpm 在成功进行依赖解析后,会基于最终确定的每个制品的版本,向中心仓发送下载对应制品包的请求,对应 API 规格为:
- 方法:
GET url:- 无组织制品:
/pkg/${module-name}/version; - 组织内制品:
/pkg/${module-name}/version?organization=${org-name};
- 无组织制品:
- 返回数据:
tar.gz格式的源码压缩包。
例如,下载无组织制品 demo1 的 1.0.0 版本制品包时,url = /pkg/demo1/1.0.0;下载组织 org 的制品 demo2 的 2.0.0 版本制品包时,url = /pkg/demo2/2.0.0?organization=org。
索引下载
cjpm 在依赖解析过程中,或在 update 命令中,会向中心仓发送下载对应制品索引的请求,对应 API 规格为:
- 方法:
GET url:- 无组织制品:
/index/${mo}/${du}/${module-name}; - 组织内制品:
/index/${mo}/${du}/${module-name}?organization=${org-name};
- 无组织制品:
- 返回数据: 制品索引文件,其中每行均为一个
json索引条目。
例如,下载无组织制品 aabbcc 的索引时,url = /index/aa/bb/aabbcc;下载组织 org 的制品 dep 的索引时,url = /index/de/p/dep?organization=org。
返回码规格
本章节中所有 API 的返回码规格如下:
- 200: 成功
- 400: 参数错误,可能是元数据或索引解析错误
- 401: 用户认证失败
- 403: 用户无权限
- 404: 文件不存在
- 409: 上传的制品包与仓库已有制品包冲突
- >=500: 服务器故障