跳到主要内容

ohpm仓库接口协议

概述

ohpm客户端与ohpm-repo私仓通过REST API交互,目前一共如下几种API:

  1. Fetch Metadata:用于获取三方库的元数据。三方库的下载地址也是元数据的一部分,具体的下载操作可以由ohpm-repo内部实现,也可以使用存储插件,代理给其它文件服务实现。无论采用哪种实现方式,在ohpm客户端向返回的下载地址发起请求时,如果ohpm-repo配置不支持匿名访问,或请求的仓库设置了授权可读,或请求的三方库的包权限设置了授权可读,ohpm客户端必须配置只读/读写认证,在下载请求的Http Header中,通过Authorization字段携带相应的Access Token,ohpm客户端才能正确下载;如需拉取精简元数据,则需要在下载请求的Http Header中,通过x-ohpm-metadata-type字段,携带value值为"install+v1",即可返回精简元数据。
  2. Login(可选): 用于客户端登录。在使用公私钥认证时,ohpm客户端通过Login API从ohpm-repo获取一个Token,然后在调用publish,unpublish和dist-tags等API时,会在Http Header的Authorization字段携带相应的Token;如果选用Access Token的认证方式,则不需要实现该API。
  3. Login_pss(可选):接口作用同Login接口。与Login接口差异:签名算法升级,由传统的RSA-SHA256 变更为 RSA-PSS(Probabilistic Signature Scheme)填充模式。
  4. Publish:用于发布一个三方库到ohpm-repo私仓,需要先进行读写权限认证。
  5. Unpublish:用于从ohpm-repo私仓下架(删除)一个三方库(下架一个包的某个版本或所有版本),需要先进行读写权限认证。
  6. Ping:用于检测与ohpm-repo仓库的网络连通性,不需要任何认证。
  7. DistTags:用于管理tag标签,包含新增、更新和删除三类操作,需要先进行读写权限认证。查询某个包的所有标签复用Fetch Metadata接口,如果ohpm-repo配置不支持匿名访问,需要通过只读/读写Access Token进行认证;如果配置默认支持匿名访问,无需进行任何认证。
  8. Versions: 用于查看三方库版本列表,查询结果按照发布时间升序排列,以列表形式进行分页展示。可通过Options中pageNum和pageSize设置页码和每页数量。如果ohpm-repo配置不支持匿名访问,或请求的仓库设置了授权可读,或请求的三方库的包权限设置了授权可读,ohpm客户端必须配置为只读或读写认证,在请求的Http Header中,通过Authorization字段携带相应的Access Token,ohpm客户端才能正确请求成功。
  9. CheckUpdate: 用于查询当前引入的三方库是否有更新,查询结果以列表形式展示,一次最多可查询50个三方库。如果ohpm-repo配置不支持匿名访问,或请求的仓库设置了授权可读,或请求的三方库的包权限设置了授权可读,ohpm客户端必须配置为只读或读写认证,在请求的Http Header中,通过Authorization字段携带相应的Access Token,ohpm客户端才能正确请求成功。

ohpm客户端在访问ohpm-repo时,支持公私钥和Access Token两种认证方式:

  • 在使用公私钥认证时,ohpm客户端通过Login API从ohpm-repo获取一个Token(Token生成细节请参考Login API的具体定义),然后在调用publish,unpublish和dist-tags的API时,会在Http Header的Authorization字段携带相应的Token,该Token具有读写权限。
  • 在使用Access Token认证时,需要在ohpm客户端配置AccessToken。Access Token 按权限范围分为两类:只读Access Token和读写Access Token。在ohpm客户端访问ohpm-repo时,Http Header的Authorization字段将携带相应的Access Token。在调用Fetch Metadata时,如果配置不支持匿名访问,系统会优先识别只读Access Token,只读Access Token不存在将继续识别读写Access Token;在调用其他需读写权限API时,ohpm客户端仅识别读写Access Token。Access Token一般通过ohpm-repo管理界面生成,当然也可以使用认证插件,将Access Token的生成代理给专门的认证服务实现,进而调用认证服务的API来完成相应的认证操作。

从ohpm-repo 5.4.3 Beta版本开始,Fetch Metadata API支持获取三方库的精简元数据。

从ohpm-repo 5.4.5 Beta版本开始,新增CheckUpdate API,支持查询当前引入的三方库是否有更新。

Fetch Metadata

返回指定包的metadata元数据。

GET <router-prefix>/:group?/:package_name
属性类型必填项描述
groupstring组织名,以@开头,比如@ohos
package_namestring包名 (不含组织部分)

请求示例(以请求一个应用内的HAR包 @test/package1 为例)

请求方法:GET
// `http://myohpmrepo.com:ohpm-repo仓库地址,开发过程中需要替换为实际搭建的ohpm-repo仓库域名或IP地址`。
// repos:固定字段。
// ohpm:指定访问的仓库名称,开发过程中需要替换为实际使用的仓库。
请求 URL:http://myohpmrepo.com/repos/ohpm/@test/package1
请求头:
authorization: NjJmNjFhODI3N2ZlNDUwMzlhYmUwNjQxZjQ3ZTNhZDU=

请求头包含两个字段,描述如下:

属性类型必填项描述
authorizationstring填写只读或者读写AccessToken,选填项,当ohpm-repo配置不支持匿名访问时必须填写。
x-ohpm-metadata-typestring当值为"install+v1",返回精简元数据。

响应失败示例(以请求一个应用内的HAR包 @test/package1 为例)

{
"code": 1018,
"message": "package not found: @test/package1"
}

响应失败有两个字段,描述如下:

属性类型必填项描述
codenumber响应失败错误码
messagestring响应失败错误信息

响应成功示例(以请求一个应用内的HAR包 @test/package1 为例):

{
"_id": "@test/package1",
"name": "@test/package1",
"description": "Please describe the basic information.",
"dist-tags": {
"latest": "2.0.0"
},
"versions": {
"1.0.0": {
"name": "@test/package1",
"version": "1.0.0",
"description": "Please describe the basic information.",
"main": "Index.ets",
"author": {
"name": "apple11",
"url": "",
"email": ""
},
"license": "Apache-2.0",
"dependencies": {
},
"artifactType": "original",
"_nodeVersion": "20.14.0",
"_ohpmVersion": "ohpm-repo-5.0.3",
"_id": "@test/package1@1.0.0",
"dist": {
"integrity": "sha512-UAPn6H3lsqQvwmevJSbWWv52PA8Ii6rgutLeJnVAHkNrUX2isytQ2pkzjodHuroYb64XKcwg+E6I8tUcFxwF3A==",
"tarball": "https://myohpmrepo.com/repos/ohpm/@test/package1/-/@test/package1-1.0.0.har"
}
},
"2.0.0": {
"name": "@test/package1",
"version": "2.0.0",
"description": "Please describe the basic information.",
"main": "Index.ets",
"author": {
"name": "apple11",
"url": "",
"email": ""
},
"license": "Apache-2.0",
"dependencies": {
},
"artifactType": "original",
"_nodeVersion": "20.14.0",
"_ohpmVersion": "ohpm-repo-5.0.3-rc.2",
"_id": "@test/package1@2.0.0",
"dist": {
"integrity": "sha512-6C47XiyVfUAljbS2d08LWEJE2dZHPFi6SNYEsR0REQVKUwlNKf6hNI8wKaI0dHCmDPhQPymOdGeTF+2E3fZWgQ==",
"tarball": "https://10.70.95.74:8077/ohpm/@test/package1/-/@test/package1-2.0.0.har"
}
}
},
"_rev": "2",
"time": {
"1.0.0": "2024-06-26T14:48:17.302+08:00",
"created": "2024-06-26T14:48:17.302+08:00",
"modified": "2024-06-26T14:48:27.785+08:00",
"2.0.0": "2024-06-26T14:48:27.785+08:00"
}
}

如请求头通过x-ohpm-metadata-type携带value值"install+v1"即可拉取精简元数据,最外层对象只保留name、packageType、versions、dist-tags四个字段,versions版本对象层只保留name、version、dependencies、dynamicDependencies、dist、packageType、debug、_ohpmVersion 8个字段;上述返回成功示例如下:

{
"name": "@test/package1",
"dist-tags": {
"latest": "2.0.0"
},
"versions": {
"1.0.0": {
"name": "@test/package1",
"version": "1.0.0",
"dependencies": {
},
"_ohpmVersion": "ohpm-repo-5.0.3",
"dist": {
"integrity": "sha512-UAPn6H3lsqQvwmevJSbWWv52PA8Ii6rgutLeJnVAHkNrUX2isytQ2pkzjodHuroYb64XKcwg+E6I8tUcFxwF3A==",
"tarball": "https://myohpmrepo.com/repos/ohpm/@test/package1/-/@test/package1-1.0.0.har"
}
},
"2.0.0": {
"name": "@test/package1",
"version": "2.0.0",
"dependencies": {
},
"_ohpmVersion": "ohpm-repo-5.0.3-rc.2",
"dist": {
"integrity": "sha512-6C47XiyVfUAljbS2d08LWEJE2dZHPFi6SNYEsR0REQVKUwlNKf6hNI8wKaI0dHCmDPhQPymOdGeTF+2E3fZWgQ==",
"tarball": "https://10.70.95.74:8077/ohpm/@test/package1/-/@test/package1-2.0.0.har"
}
}
}
}

metadata响应数据说明

响应数据中包含八个顶级字段,描述如下:

属性类型描述
_idstring包名,并用作数据库的主键ID
_revnumber包的版本数量
namestring包名
descriptionstring包的描述
dist-tagsjson包的所有标签信息
versionsjson包的所有版本数据
packageTypestring包的类型,详情见说明
timejson包的发布时间
  1. name: 包名,可以包含组织名称,比如@myscop/myhsplib。
  2. dist-tags: 描述包的标签与包具体版本的映射关系,每一个包都有一个latest标签维护当前最大版本。
  3. packageType(可选): 描述包的类型,只有当请求的包为HSP包时,元数据中才存在packageType字段,且必须为InterfaceHar。
  4. time: 维护包所有版本的发布时间,其中created表示包的首个版本发布时间,modified表示包最后一个版本的发布时间。

顶级字段中versions字段包含包的所有版本数据,描述如下:

属性类型描述
_idstring包名@包的版本号,如:@myscope/myhsplib@1.0.0
_nodeVersionstring发布时使用的Node.js版本
_ohpmVersionstring发布时使用的ohpm客户端版本
namestring包名
versionstring包的版本号
descriptionstring包的描述
authorjson包的作者信息
repositorystring包的源码仓库地址
licensestring包的项目开源许可证,详情见说明
packageTypestring包的类型,详情见说明
dependenciesjson包的运行时依赖
devDependenciesjson包的开发态依赖
dynamicDependenciesjson包的动态依赖,只针对HSP包
typesstring包的类型声明文件
mainstring包的入口文件
distjson维护包的SSRI值及下载地址,详情见说明
hspTypestringHSP包的类型,详情见说明
compatibleSdkVersionstringSDK版本
compatibleSdkTypestringSDK类型
nativeComponents数组native so依赖配置
sizenum包的大小
fileNumnum包文件数量
userNamestring获取metadata数据的用户名
userRolestring获取metadata数据的用户角色
  1. author: 描述包的作者信息,具体为:
    • name: 必填,作者名字;
    • url: 可选,作者主页地址;
    • email: 可选,作者联系邮箱。
  2. license: 当前项目的开源许可证。遵循spdx license规范。许可证若为GPL,repository建议不为空。
  3. packageType: 描述包的类型,只有当请求的包为HSP包时,元数据中才存在packageType字段,且必须为InterfaceHar。
  4. hspType: 描述HSP包的类型,当packageType为InterfaceHar时,需要存在hspType字段,目前hspType只支持应用内HSP(bundle_app)。
  5. types: 指定包类型定义的文件名。当用ArkTs定义新的类型,需要提供给其他开发者使用,则需要指定其声明文件,一般为.d.ts和.d.ets文件,当包为HSP包时,该文件必须存在。
  6. main: 指定加载的入口文件,当types不存在时,main必须存在。
  7. dist: 维护包的SSRI值及下载地址,具体字段有:
    • integrity: .har文件的SSRI值,用于完整性校验;
    • tarball: .har文件的下载地址;
    • integrity_hsp: 当包hspType为bundle_app时,会存在.hsp后缀的文件,该字段为的.hsp文件的SSRI值;
    • resolved_hsp: .hsp文件的下载地址。

Login

客户端登录,获得上传包,下架包和编辑标签tag时所需的token。

POST <router-prefix>/login
属性类型必填项描述
ohpm-repo仓库地址string实际搭建的ohpm-repo仓库域名或IP地址
repo_namestring指定访问的仓库名称

请求示例

请求方法:POST
// `http://myohpmrepo.com:ohpm-repo仓库地址,开发过程中需要替换为实际搭建的ohpm-repo仓库域名或IP地址`。
// repos:固定字段。
// ohpm:指定访问的仓库名称,开发过程中需要替换为实际使用的仓库。
请求 URL:http://myohpmrepo.com/repos/ohpm/login
请求头:
command: login;
请求体(json格式内容):
{
"publishId": "95115BAFDE",
"timestamp": 1702088629606,
"nonce": "e3b3d53f91d0488f9838c86e306ca9f5",
"signature": "qXYUnUK8Quy95a...",
"version": "v1"
}

请求头包含四个字段,描述如下:

属性类型描述
commandstring命令的名称,选填

请求体包含五个字段,描述如下:

属性类型描述
versionstring协议版本,必选
publishIdstring发布码,必选
timestampnumber发布时间戳,必选
noncestring随机数,必选
signaturestring签名值,具体见下述说明,必选

1、publishId: 由ohpm-repo私仓生成的发布码,与用户绑定,每个用户的发布码是唯一的,在客户端的.ohpmrc文件中通过publish_id配置;

2、timestamp: 时间戳,单位为毫秒;

3、nonce: 客户端在登录时动态生成的uuidv4随机数;

4、signature: 客户端在登录时,将协议版本、发布码、发布时间戳和随机数以v{version}-{publishId}-{timestamp}-{nonce}格式组合而成,并使用私钥经RSA-SHA256算法签名而生成。

响应成功示例:

{
"success": true,
"token": "7100c3f38dddf3cf8234...."
}

成功响应体包含2个字段,描述如下:

属性类型描述
successboolean响应是否成功,值为true
tokenstring认证成功返回的token值

响应失败示例:

{
"success": false,
"error": "The timestamp is expired"
}

失败响应体包含2个字段,描述如下:

属性类型描述
successboolean响应是否成功,值为false
errorstring认证失败返回的错误原因

token: 使用公私钥认证时,ohpm-repo生成的认证信息。认证信息必须验证有效,才有权限执行上传包、下架包和编辑标签tag等操作。

Publish

上传一个HAR/HSP包到ohpm-repo私仓中

PUT <router-prefix>/:package_name
属性类型必填项描述
package_namestring包名

若包名中包含组织名,则package_name为包名进行url编码后的结果,比如:当包名为@myscope/mypkg时,package_name为@myscope%2fmypkg。

请求示例(以上传一个应用内的HSP包@myscope/myhsppkg为例):

请求方法:PUT
// `http://myohpmrepo.com:ohpm-repo仓库地址,开发过程中需要替换为实际搭建的ohpm-repo仓库域名或IP地址`。
// repos:固定字段。
// ohpm:指定访问的仓库名称,开发过程中需要替换为实际使用的仓库。
请求 URL:http://myohpmrepo.com/repos/ohpm/@myscope%2fmypkg
请求头:
command: publish
Authorization:<token>
请求体(包的metadata数据,由ohpm客户端生成):
{
"_id": "@myscope/myhsppkg",
"name": "@myscope/myhsppkg",
"packageType": "InterfaceHar",
"description": "Please describe the basic information.",
"dist-tags": {
"latest": "1.0.4"
},
"versions": {
"1.0.4": {
"name": "@myscope/myhsppkg",
"version": "1.0.4",
"description": "Please describe the basic information.",
"author": {
"name": "fsq",
"url": "",
"email": ""
},
"license": "Apache-2.0",
"packageType": "InterfaceHar",
"dependencies": {
"pkga": "1.0.0",
"pkgb": "1.0.0"
},
"types": "Index.d.ets",
"_nodeVersion": "16.20.1",
"_ohpmVersion": "1.4.0",
"_id": "@myscope/myhsppkg@1.0.4",
"dist": {
"integrity": "sha512-0bHCBS2JtlyX7Gq5q6tbO2eRRbj0RO2cAAagC/K6/zmDZHPGrnIScDkD3Yjip8I/YWq7VbY7HYlHXtcLApILVg==",
"tarball": "https://localhost:8081/repos/ohpm/@myscope/myhsppkg/-/@myscope/myhsppkg-1.0.4.har",
"integrity_hsp": "sha512-3B7KlJFEHuQ9X+Zxl+oRVIL8CCczaPu2nEGQvXrULrViXuY80Ld2CnkQEVFfd/eZK6DNAFTS1wBhqOTLYtOqow=="
}
}
},
"_attachments": {
"@test/ohpmhsplib-1.0.4.har": {
"content_type": "application/octet-stream",
"data": "H4sIAAAAAAAACu1ZUU...",
"length": 858
},
"@test/ohpmhsplib-1.0.4.hsp": {
"content_type": "application/octet-stream",
"data": "UEsDBAoAAAgAAAAAIU5v...",
"length": 29185
}
},
"hspType": "bundle_app"
}

请求头包含五个字段,描述如下:

属性类型描述
commandstring命令的名称,选填
Authorizationstring认证信息,AccessToken的值或者调用login接口的token值,必填

请求体数据中包含八个顶级字段,描述如下:

属性类型描述
_idstring包名,并用作数据库的主键ID
namestring包名
descriptionstring包的描述
dist-tagsjson包的所有标签信息
versionsjson包的所有版本数据
packageTypestring包的类型,详情见说明
_attachmentsjson待发布包的包数据信息
hspTypejsonhsp包的类型

  1. 当上传的包为应用内HSP包时,包格式为tgz格式,内部包含.har及.hsp两个文件,且在元数据的_attachments部分会包含这两个文件。
  2. 当上传的包为HAR包,包格式为.har格式。
  3. 当上传HSP包时,提交的元数据中会存在packageType字段,且为InterfaceHar。
  4. 当上传的包为应用内HSP包时,提交的元数据中version的dist域中存在integrity_hsp字段,表示HSP部分的SSRI值。

成功响应体示例:

{
"code": 200,
"message": "success",
}

失败响应体示例:

{
"success": false,
"error": "<error message>",
}

流式上传一个HAR/HSP到ohpm-repo

ohpm客户端(5.0.1版本)和ohpm-repo(5.0.1版本)开始支持使用流式上传,当上传的三方包大小超过阈值(默认5M,可在.ohpmrc中自定义配置)时,ohpm会优先调用流式上传接口进行上传。

POST <router-prefix>/stream/:package_name
属性类型必填项描述
package_namestring包名。若包名中包含组织名,则package_name为包名进行url编码后的结果,比如:当包名为@myscope/mypkg时,package_name为@myscope%2fmypkg。

请求示例(以上传一个应用内的HSP包@myscope/myhsppkg为例):

请求方法:POST
// `http://myohpmrepo.com:ohpm-repo仓库地址,开发过程中需要替换为实际搭建的ohpm-repo仓库域名或IP地址`。
// repos:固定字段。
// ohpm:指定访问的仓库名称,开发过程中需要替换为实际使用的仓库。
请求 URL:http://myohpmrepo.com/repos/ohpm/stream/@myscope%2fmypkg
请求头:
command: publish
Authorization:<token>
请求体:formData数据格式,由两部分组成:
1)metadata=<file.json>:包的元数据
2)pkg_stream=<@hsp.tgz;application/octet-stream>:待上传包的文件流数据

请求示例中请求体的包元数据内容如下所示:

{
"_id": "@myscope/myhsppkg",
"name": "@myscope/myhsppkg",
"packageType": "InterfaceHar",
"description": "Please describe the basic information.",
"dist-tags": {
"latest": "1.0.4"
},
"versions": {
"1.0.4": {
"name": "@myscope/myhsppkg",
"version": "1.0.4",
"description": "Please describe the basic information.",
"author": {
"name": "fsq",
"url": "",
"email": ""
},
"license": "Apache-2.0",
"packageType": "InterfaceHar",
"dependencies": {
"pkga": "1.0.0",
"pkgb": "1.0.0"
},
"types": "Index.d.ets",
"_nodeVersion": "16.20.1",
"_ohpmVersion": "1.4.0",
"_id": "@myscope/myhsppkg@1.0.4",
"dist": {
"integrity": "sha512-0bHCBS2JtlyX7Gq5q6tbO2eRRbj0RO2cAAagC/K6/zmDZHPGrnIScDkD3Yjip8I/YWq7VbY7HYlHXtcLApILVg==",
"tarball": "https://localhost:8081/repos/ohpm/@myscope/myhsppkg/-/@myscope/myhsppkg-1.0.4.har",
"integrity_hsp": "sha512-3B7KlJFEHuQ9X+Zxl+oRVIL8CCczaPu2nEGQvXrULrViXuY80Ld2CnkQEVFfd/eZK6DNAFTS1wBhqOTLYtOqow=="
}
}
},
"hspType": "bundle_app"
"pkg": "D:\\basicData\\har\\package.tgz",
"isTgz": true
}

请求头包含五个字段,描述如下:

属性类型描述
commandstring命令的名称,选填
Authorizationstring认证信息,AccessToken的值或者调用login接口的token值,必填

请求体的metadata数据中包含九个顶级字段,描述如下:

属性类型描述
_idstring包名,并用作数据库的主键ID
namestring包名
descriptionstring包的描述
dist-tagsjson包的所有标签信息
versionsjson包的所有版本数据
packageTypestring包的类型,详情见说明
hspTypejsonhsp包的类型
pkgstring记录上传包的路径
isTgzboolean记录是否是tgz包

  1. 当上传的包为应用内HSP包时,包格式为tgz格式,内部包含.har及.hsp两个文件。
  2. 当上传的包为HAR包,包格式为.har格式。
  3. 当上传HSP包时,提交的元数据中会存在packageType字段,且为InterfaceHar。
  4. 当上传的包为应用内HSP包时,提交的元数据中version的dist域中存在integrity_hsp字段,表示HSP部分的SSRI值。

成功响应体示例:

{
"code": 200,
"message": "success"
}

失败响应体示例:

{
"success": false,
"error": "<error message>"
}

Unpublish

从ohpm-repo中下架一个HAR/HSP包 (下架一个包的某个版本,或是整个包)。

DELETE <router-prefix>/:package_name
属性类型必填项描述
package_namestring包名

  1. 若包名中包含组织名,则package_name为包名进行url编码后的结果,比如:当包名为@myscope/myhsppkg时,package_name为@myscope%2fmyhsppkg。
  2. 若指定具体版本需要在请求体中加上<version>部分,比如:{"version":"1.0.0"}。
  3. 若不指定具体版本,则表示下架该包所有版本。

请求示例:

请求方法:DELETE
// `http://myohpmrepo.com:ohpm-repo仓库地址,开发过程中需要替换为实际搭建的ohpm-repo仓库域名或IP地址`。
// repos:固定字段。
// ohpm:指定访问的仓库名称,开发过程中需要替换为实际使用的仓库。
请求 URL:http://myohpmrepo.com/repos/ohpm/@myscope%2fmyhsppkg
请求头:
command: unpublish
Authorization:<token>
请求体:
{"version":"1.0.0"}

请求头包含五个字段,描述如下:

属性类型描述
commandstring命令的名称,选填
Authorizationstring认证信息,AccessToken的值或者调用login接口的token值,必填

成功响应体示例:

{
"code": 200,
"message": "success"
}

失败响应体示例:

{
"success": false,
"error": "<error message>"
}

Ping

检测与ohpm-repo仓库的网络连通性。

GET <router-prefix>/-/ping

请求示例:

请求方法:GET
// `http://myohpmrepo.com:ohpm-repo仓库地址,开发过程中需要替换为实际搭建的ohpm-repo仓库域名或IP地址`。
// repos:固定字段。
// ohpm:指定访问的仓库名称,开发过程中需要替换为实际使用的仓库。
请求 URL:http://myohpmrepo.com/repos/ohpm/-/ping

响应成功示例:

{
"code": 200,
"message": "success"
}

失败响应体示例:

{
"success": false,
"error": "<error message>"
}

DistTags

新增tag

为包添加tag。

POST <router-prefix>/-/package/:package_name/dist-tags/:tag
属性类型必填项描述
package_namestring包名
tagstring标签名

若包名中包含组织名,则package_name为包名进行url编码后的结果,比如:当包名为@myscope/mypkg时,package_name为@myscope%2fmypkg。

请求示例(为包@myscope/myhsppkg@1.0.0增加标签(tag)test):

请求方法:POST
// `http://myohpmrepo.com:ohpm-repo仓库地址,开发过程中需要替换为实际搭建的ohpm-repo仓库域名或IP地址`。
// repos:固定字段。
// ohpm:指定访问的仓库名称,开发过程中需要替换为实际使用的仓库。
请求 URL:http://myohpmrepo.com/repos/ohpm/-/package/@myscope%2fmypkg/dist-tags/test
请求头:
command: dist-tags
Authorization:<token>
请求体:
{"version":"1.0.0"}

请求头包含五个字段,描述如下:

属性类型描述
commandstring命令的名称,选填
Authorizationstring认证信息,AccessToken的值或者调用login接口的token值,必填

响应成功示例:

{
"code": 200,
"message": "success"
}

失败响应体示例:

{
"success": false,
"error": "<error message>"
}

更新tag

修改包tag对应的版本号。

PUT <router-prefix>/-/package/:package_name/dist-tags/:tag
属性类型必填项描述
package_namestring包名
tagstring标签名

请求示例(为包@myscope/myhsppkg修改标签(tag)test对应版本号为2.0.0):

请求方法:PUT
// `http://myohpmrepo.com:ohpm-repo仓库地址,开发过程中需要替换为实际搭建的ohpm-repo仓库域名或IP地址`。
// repos:固定字段。
// ohpm:指定访问的仓库名称,开发过程中需要替换为实际使用的仓库。
请求 URL:http://myohpmrepo.com/repos/ohpm/-/package/@myscope%2fmypkg/dist-tags/test
请求头:
command: dist-tags
Authorization:<token>
请求体:
{"version":"2.0.0"}

请求头包含五个字段,描述如下:

属性类型描述
commandstring命令的名称,选填
Authorizationstring认证信息,AccessToken的值或者调用login接口的token值,必填

响应成功示例:

{
"code": 200,
"message": "success"
}

失败响应体示例:

{
"success": false,
"error": "<error message>"
}

删除tag

删除包的tag。

DELETE <router-prefix>/-/package/:package_name/dist-tags/:tag
属性类型必填项描述
package_namestring包名
tagstring标签名

请求示例(删除包@myscope/myhsppkg的标签(tag)test):

请求方法:DELETE
// `http://myohpmrepo.com:ohpm-repo仓库地址,开发过程中需要替换为实际搭建的ohpm-repo仓库域名或IP地址`。
// repos:固定字段。
// ohpm:指定访问的仓库名称,开发过程中需要替换为实际使用的仓库。
请求 URL:http://myohpmrepo.com/repos/ohpm/-/package/@myscope%2fmypkg/dist-tags/test
请求头:
command: dist-tags
Authorization:<token>

请求头包含五个字段,描述如下:

属性类型描述
commandstring命令的名称,选填
Authorizationstring认证信息,AccessToken的值或者调用login接口的token值,必填

响应成功示例:

{
"code": 200,
"message": "success"
}

失败响应体示例:

{
"success": false,
"error": "<error message>"
}

Versions

用于查看三方库版本列表,查询结果按照发布时间升序排列,以列表形式进行分页展示。

GET <router-prefix>/:group?/:package_name/versions?pageNum=1&pageSize=10
属性类型必填项描述
groupstring组织名,以@开头,比如@ohos
package_namestring包名 (不含组织部分)
pageNumnumber页码,取值范围:[1, 10000]
pageSizenumber每页的版本数量,取值范围:[1, 500]

若包名中包含组织名,则package_name为包名进行url编码后的结果,比如:当包名为@myscope/mypkg时,package_name为@myscope%2fmypkg。

请求示例(以查看@myscope/myhsppkg包中的版本为例):

请求方法:GET
// `http://myohpmrepo.com:ohpm-repo仓库地址,开发过程中需要替换为实际搭建的ohpm-repo仓库域名或IP地址`。
// repos:固定字段。
// ohpm:指定访问的仓库名称,开发过程中需要替换为实际使用的仓库。
请求 URL:http://myohpmrepo.com/repos/ohpm/@myscope%2fmypkg/versions?pageNum=1&pageSize=10
请求头:
authorization: NjJmNjFhODI3N2ZlNDUwMzlhYmUwNjQxZjQ3ZTNhZDU=

请求头包含一个字段,描述如下:

属性类型描述
authorizationstring填写只读或者读写AccessToken,选填项,当ohpm-repo配置不支持匿名访问时必须填写。

响应失败示例(以请求一个应用内的HAR包 @test/package1 为例)

{
"code": 1018,
"message": "package not found: @test/package1"
}

响应失败有两个字段,描述如下:

属性类型必填项描述
codenumber响应失败错误码
messagestring响应失败错误信息

响应成功示例

{
"code": 200,
"body": {
"total": 2,
"pageNum": 1,
"pageSize": 10,
"rows": ["1.0.1","1.0.2"],
"pages": 1
}
}

失败响应体示例

{
"code": 404,
"error": "<error message>"
}

CheckUpdate

用于查询当前引入的三方库是否有更新,查询结果会过滤掉不存在的包以列表形式展示,一次最多可查询50个库。

POST <router-prefix>/checkUpdate

请求体body为一个array数组,数组最大长度为50,body的item是一个json对象,包含五个字段,描述如下:

属性类型必填项描述
packageNamestring包名 (含组织部分)
moduleNamestring模块名,用来标识当前这个请求体中的包名来源于哪个模块
dependencyConfigstring模块中包配置的依赖版本,仅支持远程依赖,长度为(0,128]。 远程依赖的格式有: - 确切版本号:x.x.x - 更新补丁版本:~x.x.x、~x.x - 更新次版本:^x.x.x - 通配符:*、x.x.* - 版本号范围:>1.0.0、<=2.0.0、1.2.0 - 2.0.0 - 最新版本:latest - 标签版本:tag:beta
installedVersionstring当前已安装依赖的版本,如未安装,可为空
depthnumber标识当前包是否为直接依赖,当前只支持直接依赖,固定值为0

请求示例(以查看@myscope/myhsppkg包的版本更新为例):

请求方法:post
// `http://myohpmrepo.com:ohpm-repo仓库地址,开发过程中需要替换为实际搭建的ohpm-repo仓库域名或IP地址`。
// repos:固定字段。
// ohpm:指定访问的仓库名称,开发过程中需要替换为实际使用的仓库。
// checkUpdate:固定字段。
请求 URL:http://myohpmrepo.com/repos/ohpm/checkUpdate
请求头:
Authorization: NjJmNjFhODI3N2ZlNDUwMzlhYmUwNjQxZjQ3ZTNhZDU=
请求体:
[
{
"packageName":"@myscope/myhsppkg",
"moduleName":"modulea",
"dependencyConfig":"*",
"installedVersion":"1.0.0",
"depth":0
}
]

请求头包含一个字段,描述如下:

属性类型描述
Authorizationstring填写只读或者读写AccessToken,选填项。 ohpm-repo不支持匿名访问时,必填项。

响应成功示例

{
"code": 200,
"body": [
{
"packageName": "@myscope/myhsppkg",
"depth": 0,
"moduleName": "modulea",
"installedVersion": "1.0.0",
"wantedVersion": "2.0.0",
"latestVersion": "2.0.0",
"updateType": "major",
"description": "major update",
"dependentPackageName": "",
"homePage": "",
"recommend": [],
"security": []
}
]
}

响应体包含两个字段,描述如下:

属性类型描述
codestring状态码
bodyarray对应的包版本更新信息列表

body的item是一个json对象,包含十二个字段,描述如下:

属性类型描述
packageNamestring包名(含组织部分)
depthstring标识当前包是否为直接依赖,当前只支持直接依赖,固定值为0
moduleNamestring模块名,用来标识当前这个请求体中的包名来源于哪个模块
installedVersionstring当前已安装依赖的版本
wantedVersionstring根据依赖配置 匹配到的版本
latestVersionstring当前这个包的最新版本
updateTypestring更新类型
descriptionstring更新描述词
dependentPackageNamestring预留字段,默认为空
homePagestring包仓库地址,私仓不涉及,固定为""
recommendarray优选推荐包,私仓不涉及,固定为[]
securityarray该包当前使用版本(installVersion)的安全风险信息,私仓不涉及,固定为[]

响应失败示例****:****

{
"code": 1001,
"error": "ModuleName verification failed"
}

仓库响应码说明

响应码范围说明
200仓库所有接口成功
400仓库所有接口登录失败、未知错误失败
401Fetch Metadata、Publish、Unpublish、DistTags、Versions、CheckUpdate客户端传参校验失败、认证失败
404访问仓库不存在的接口接口不存在
500仓库所有接口服务器内部错误
598Publish当仓库上传接口返回的响应状态码为598时,ohpm 5.0.1及以上版本会尝试去重新上传

由于流式上传接口在ohpm 5.0.1版本才开始支持,当ohpm调用该接口时,若返回的响应状态码为404时,ohpm客户端会再次调用上传接口上传。为了保证与ohpm客户端的兼容性,请确保当访问仓库不存在的接口仓库的响应状态码为404。