R2Cloud接口
机器人注册
请求和应答
注册是一个简单的 HTTP 接口,根据机器人/用户信息注册,创建一个新机器人。
请求 URL
URL | http://ip/robot/reg |
---|---|
Type | POST |
HTTP Version | 1.1 |
Content-Type | application/json |
请求参数
Param | 含义 | Rule | 是否必须 | 缺省 |
---|---|---|---|---|
robotid | 机器人唯一 ID | md 5 加密后的值 | 必填 | NULL |
robotPwd | 机器人密码 | md 5 加密后的值 | 必填 | NULL |
nickName | 昵称 | 不超过 32 个字符 | 可选 | NULL |
邮箱 | 符合 email 规范 | 可选 | NULL | |
userName | 用户名称 | 不超过 32 个字符 | 可选 | NULL |
服务示例
返回结果参数
名称 | 含义 | 规则说明 |
---|---|---|
code | 结果值 | 0:成功 1:失败 2:机器人存在 |
调用接口
{
"robotid":"ced165163e51e06e01dc44c35fea3eaf",
"robotPwd":"3687f20fbdfab8dd7e645f1e2f95268b",
"nickName":"jarvis",
"email":"Jarvis@joysonrobot.com",
"userName":"gv"
}
返回值
{
"code":0
}
处理逻辑
客户端提交的密码需要使用 md5 加密,不能提供明文的密码。
机器人上线(登录)
请求和应答
登录,根据机器人的登录信息,连接到云平台。
请求URL
URL | http://ip/robot/login |
---|---|
Type | POST |
HTTP Version | 1.1 |
Content-Type | application/json |
请求参数
Param | 含义 | Rule | 是否必须 | 缺省 |
---|---|---|---|---|
robotid | 机器人唯一 ID | md 5 加密后的值 | 必填 | NULL |
robotPwd | 机器人密码 | md 5 加密后的值 | 必填 | NULL |
服务示例
返回结果参数说明
名称 | 含义 | 规则说明 |
---|---|---|
code | 结果值 | 0:成功 1:失败 |
token | 令牌 | 每次上线后,生成的token不一样,后续请求需要带上token |
调用接口
http://ip/robot/login
参数
{
"robotid":"ced165163e51e06e01dc44c35fea3eaf",
"robotPwd":"3687f20fbdfab8dd7e645f1e2f95268b"
}
返回结果
{
"code":0,
"token":"3a58ca22317e637797f8bcad5c047446"
}
处理逻辑
Token验证
Token 的中文有人翻译成 “令牌”,意思就是,你拿着这个令牌,才能过一些关卡。
Token 是一个用户自定义的任意字符串。在成功提交了开发者自定义的这个字符串之后,Token 的值 会保存到服务器后台。只有服务器和客户端前端知道这个字符串,于是 Token 就成了这两者之间的 密钥,它可以让服务器确认请求是来自客户端还是恶意的第三方。
使用基于 Token 的身份验证方法,在服务端不需要存储用户的登录记录。大概的流程是这样的:
- 客户端使用用户名和密码请求登录;
- 服务器收到请求,验证用户名和密码;
- 验证成功后,服务端生成一个Token,这个Token可以存储在内存、磁盘、或者数据库里,再把这个Token发送给客户端;
- 客户端收到Token以后可以存储起来,比如放在Cookie或者Local Storage;
- 客户端每次向服务器请求资源时必须带着服务器签发的Token;
- 服务端收到请求,然后去验证客户端请求里面带着的 Token,如果验证成功,就向客户端返回 请求的数据。
私有文件1
请求URL
URL | http://ip/file/ownfile?cmd=count |
---|---|
Type | POST |
HTTP Version | 1.1 |
Content-Type | application/json |
请求参数
Param | 含义 | Rule | 是否必须 | 缺省 |
---|---|---|---|---|
token | token | 同上 | 必填 | NULL |
robotid | 机器人唯一 ID | 不超过32个字符 | 必填 | NULL |
服务示例
返回结果参数说明
名称 | 含义 | 规则说明 |
---|---|---|
code | 结果值 | 0:验证成功 1:验证失败 |
total | 文件数量 |
调用接口
http://ip/file/ownfile?cmd=count
参数
{
"token":"3a58ca22317e637797f8bcad5c047446",
"robotid":"ced165163e51e06e01dc44c35fea3eaf"
}
返回结果
{
"total":1,
"code":0
}
没有文件返回
{
"total":0,
"code":0
}
处理逻辑
私有文件2
请求URL
URL | http://ip/file/ownfile?cmd=normal |
---|---|
Type | POST |
HTTP Version | 1.1 |
Content-Type | application/json |
请求参数
Param | 含义 | Rule | 是否必须 | 缺省 |
---|---|---|---|---|
token | token | 同上 | 必填 | NULL |
robotid | 机器人唯一 ID | 不超过32个字符 | 必填 | NULL |
count | 文件个数 | 私有文件数量>0 | 必填 | NULL |
start | 开始位置 | 必填 | NULL |
服务示例
返回结果参数说明
名称 | 含义 | 规则说明 |
---|---|---|
files | 文件结果集 | “code”:0正常,1失败, “count”:当前文件数量, “total”:私有文件数量, “robotid”:机器人唯一ID, “md5”:md5的值, “create_time”:创建时间, “file_name”:文件名, “share_status”:共享状态, “pv”:使用次数, “url”:URL, “size”:文件大小, “type”:文件类型 |
调用接口
http://ip/file/ownfile?cmd=normal
参数
{
"count":2,
"start":0,
"token":"3a58ca22317e637797f8bcad5c047446",
"robotid":"ced165163e51e06e01dc44c35fea3eaf"
}
返回结果
{
"code":0,
"total":2,
"files":[
{
"robotid":"ced165163e51e06e01dc44c35fea3eaf",
"md5":"6c5fa2864bb264c91167258b3e478fa0",
"create_time":"2024-01-01 11:11:00",
"file_name":"111.jpg",
"share_status":0,
"pv":1,
"url":"http://ip/group1/M00/00/00/eBuDxWCfQHSATopyAAV8AJV_1mw866.111",
"size":"1024",
"type":"jpg"
}
]
}
处理逻辑
私有文件3
请求URL
URL | http://ip/file/ownfile?cmd=pvasc |
---|---|
Type | POST |
HTTP Version | 1.1 |
Content-Type | application/json |
请求参数
Param | 含义 | Rule | 是否必须 | 缺省 |
---|---|---|---|---|
token | token | 同上 | 必填 | NULL |
robotid | 机器人唯一 ID | 不超过32个字符 | 必填 | NULL |
count | 文件个数 | 私有文件数量>0 | 必填 | NULL |
start | 开始位置 | 必填 | NULL |
服务示例
返回结果参数说明
名称 | 含义 | 规则说明 |
---|---|---|
files | 文件结果集 | “code”:0正常,1失败, “count”:当前文件数量, “total”:私有文件数量, “robotid”:机器人唯一ID, “md5”:md5的值, “create_time”:创建时间, “file_name”:文件名, “share_status”:共享状态, “pv”:使用次数, “url”:URL, “size”:文件大小, “type”:文件类型 |
调用接口
http://ip/file/ownfile?cmd=normal
参数
{
"count":2,
"start":0,
"token":"3a58ca22317e637797f8bcad5c047446",
"robotid":"ced165163e51e06e01dc44c35fea3eaf"
}
返回结果
{
"code":0,
"total":2,
"files":[
{
"robotid":"ced165163e51e06e01dc44c35fea3eaf",
"md5":"6c5fa2864bb264c91167258b3e478fa0",
"create_time":"2024-01-01 11:11:00",
"file_name":"111.jpg",
"share_status":0,
"pv":1,
"url":"http://ip/group1/M00/00/00/eBuDxWCfQHSATopyAAV8AJV_1mw866.111",
"size":"1024",
"type":"jpg"
}
]
}
处理逻辑
私有文件4
请求URL
URL | http://ip/file/ownfile?cmd=pvdesc |
---|---|
Type | POST |
HTTP Version | 1.1 |
Content-Type | application/json |
请求参数
Param | 含义 | Rule | 是否必须 | 缺省 |
---|---|---|---|---|
token | token | 同上 | 必填 | NULL |
robotid | 机器人唯一 ID | 不超过32个字符 | 必填 | NULL |
count | 文件个数 | 私有文件数量>0 | 必填 | NULL |
start | 开始位置 | 必填 | NULL |
服务示例
返回结果参数说明
名称 | 含义 | 规则说明 |
---|---|---|
files | 文件结果集 | “code”:0正常,1失败, “count”:当前文件数量, “total”:私有文件数量, “robotid”:机器人唯一ID, “md5”:md5的值, “create_time”:创建时间, “file_name”:文件名, “share_status”:共享状态, “pv”:使用次数, “url”:URL, “size”:文件大小, “type”:文件类型 |
调用接口
http://ip/file/ownfile?cmd=normal
参数
{
"count":2,
"start":0,
"token":"3a58ca22317e637797f8bcad5c047446",
"robotid":"ced165163e51e06e01dc44c35fea3eaf"
}
返回结果
{
"code":0,
"total":2,
"files":[
{
"robotid":"ced165163e51e06e01dc44c35fea3eaf",
"md5":"6c5fa2864bb264c91167258b3e478fa0",
"create_time":"2024-01-01 11:11:00",
"file_name":"111.jpg",
"share_status":0,
"pv":1,
"url":"http://ip/group1/M00/00/00/eBuDxWCfQHSATopyAAV8AJV_1mw866.111",
"size":"1024",
"type":"jpg"
}
]
}
处理逻辑
上传文件md5
用于秒传文件的请求。
文件上传的时候:
- 先调用md5接口判断服务器是否有该文件,如果md5成功则说明服务器有该文件,不需要upload;
- 如果不成功则调用upload。
请求URL
URL | http://ip/file/md5 |
---|---|
Type | POST |
HTTP Version | 1.1 |
Content-Type | application/json |
请求参数
Param | 含义 | Rule | 是否必须 | 缺省 |
---|---|---|---|---|
token | token | 同上 | 必填 | NULL |
robotid | 机器人唯一 ID | 不超过32个字符 | 必填 | NULL |
md5 | md5值 | 不超过32个字符 | 必填 | NULL |
filename | 文件名称 | 不超过128个字符 | 必填 | NULL |
服务示例
返回结果参数说明
名称 | 含义 | 规则说明 |
---|---|---|
code | 结果值 | 0: 秒传成功 1: 秒传失败 4: token 校验失败 5:文件已存在 |
调用接口
http://ip/file/md5
参数
{
"filename":"ui_bottongroup.h",
"md5":"a89390d867d5da18c8b1a95908d7c653",
"token":"3a58ca22317e637797f8bcad5c047446",
"robotid":"ced165163e51e06e01dc44c35fea3eaf"
}
返回结果
{
"code":0
}
处理逻辑
每个文件都有一个唯一的 MD5 值(比如 2bf8170b42cc7124b04a8886c83a9c6f),就好比每个人的指 纹都是唯一的一样,效验 MD5 就是用来确保文件在传输过程中未被修改过。
- 客户端在上传文件之前先将文件的md5码上传到服务器;
- 服务器判断是否存在这个md5码,如果存在,说明文件存在,则此文件无需再次上传,在此文件的计数器上加1,说明文件多了一个用户共用;
- 如果服务器没有这个md5码,则说明。传的是新文件,需要上传
上传文件upload
请求URL
URL | http://ip/file/upload |
---|---|
Type | POST |
HTTP Version | 1.1 |
Content-Type | application/json |
返回结果参数说明
名称 | 含义 | 规则说明 |
---|---|---|
code | 结果值 | 0: 秒传成功 1: 上传失败 |
处理逻辑
共享/删除1
请求 URL
URL | http://ip/file/dealfile?cmd=share |
---|---|
Type | POST |
HTTP Version | 1.1 |
Content-Type | application/json |
请求参数
Param | 含义 | Rule | 是否必须 | 缺省 |
---|---|---|---|---|
token | token | 同上 | 必填 | NULL |
robotid | 机器人唯一 ID | 不超过32个字符 | 必填 | NULL |
md5 | md5值 | 不超过32个字符 | 必填 | NULL |
filename | 文件名称 | 不超过128个字符 | 必填 | NULL |
服务示例
返回结果参数说明
名称 | 含义 | 规则说明 |
---|---|---|
code | 结果值 | 0: 成功 1: 失败 3: 另外的机器人已经共享 4: token 验证失败 |
调用接口
http://ip/file/dealfile?cmd=pv
参数
{
"filename":"Makefile",
"md5":"602fdf30db2aacf517badf4565124f51",
"token":"3a58ca22317e637797f8bcad5c047446",
"robotid":"ced165163e51e06e01dc44c35fea3eaf"
}
返回结果
{
"code":0
}
处理逻辑
共享/删除文件2
请求URL
URL | http://ip/file/dealfile?cmd=del |
---|---|
Type | POST |
HTTP Version | 1.1 |
Content-Type | application/json |
请求参数
Param | 含义 | Rule | 是否必须 | 缺省 |
---|---|---|---|---|
token | token | 同上 | 必填 | NULL |
robotid | 机器人唯一 ID | 不超过32个字符 | 必填 | NULL |
md5 | md5值 | 不超过32个字符 | 必填 | NULL |
filename | 文件名称 | 不超过128个字符 | 必填 | NULL |
服务示例
返回结果参数说明
名称 | 含义 | 规则说明 |
---|---|---|
code | 结果值 | 0: 成功 1: 失败 |
调用接口
http://ip/file/dealfile?cmd=del
参数
{
"filename":"Makefile",
"md5":"602fdf30db2aacf517badf4565124f51",
"token":"3a58ca22317e637797f8bcad5c047446",
"robotid":"ced165163e51e06e01dc44c35fea3eaf"
}
返回结果
{
"code":0
}
处理逻辑
- 先判断此文件是否已经分享
- 判断集合有没有这个文件,如果有,说明别人已经分享此文件(RDS操作)
- 如果集合没有此元素,可能因为 redis 中没有记录,再从 SQL中查询,如果 SQL也没有,说 明真没有(SQL操作)
- 如果 SQL有记录,而 RDS没有记录,那么分享文件处理只需要处理 SQL(SQL操作)
- 如果 RDS有记录,SQL和 RDS都需要处理,删除相关记录
取消共享
请求URL
URL | http://ip/file/dealsharefile?cmd=cancel |
---|---|
Type | POST |
HTTP Version | 1.1 |
Content-Type | application/json |
请求参数
Param | 含义 | Rule | 是否必须 | 缺省 |
---|---|---|---|---|
robotid | 机器人唯一 ID | 不超过32个字符 | 必填 | NULL |
md5 | md5值 | 不超过32个字符 | 必填 | NULL |
filename | 文件名称 | 不超过128个字符 | 必填 | NULL |
服务示例
返回结果参数说明
名称 | 含义 | 规则说明 |
---|---|---|
code | 结果值 | 0: 成功 1: 失败 |
调用接口
http://ip/file/dealsharefile?cmd=cancel
参数
{
"filename":"ui_buttongroup.h"
"md5":"a89390d867d5da18c8b1a95908d7c653",
"robotid":"ced165163e51e06e01dc44c35fea3eaf"
}
返回结果
{
"code":0
}
处理逻辑
- 查询共享文件的数量;
- 如果共享文件数量为1则删除共享文件数量对应的行
- 如果共享文件数量>1,则更新共享数量文件-1。
转存文件
请求URL
URL | http://ip/file/dealsharefile?cmd=save |
---|---|
Type | POST |
HTTP Version | 1.1 |
Content-Type | application/json |
请求参数
Param | 含义 | Rule | 是否必须 | 缺省 |
---|---|---|---|---|
robotid | 机器人唯一 ID | 不超过32个字符 | 必填 | NULL |
md5 | md5值 | 不超过32个字符 | 必填 | NULL |
filename | 文件名称 | 不超过128个字符 | 必填 | NULL |
服务示例
返回结果参数说明
名称 | 含义 | 规则说明 |
---|---|---|
code | 结果值 | 0: 成功 1: 失败 5: 文件存在 |
http://ip/file/dealsharefile?cmd=save
参数
{
"filename":"ui_buttongroup.h"
"md5":"a89390d867d5da18c8b1a95908d7c653",
"robotid":"ced165163e51e06e01dc44c35fea3eaf"
}
返回结果
{
"code":0
}
处理逻辑
- 先查询是个人文件列表是否已经存在该文件;
- 增加 file_info 表的 count 计数,表是多一个人保存了该文件;
- 个人的 user_file_list 增加一条文件记录;
- 更新个人的 user_file_count。
更新共享文件下载计数
请求URL
URL | http://ip/file/dealsharefile?cmd=save |
---|---|
Type | POST |
HTTP Version | 1.1 |
Content-Type | application/json |
请求参数
Param | 含义 | Rule | 是否必须 | 缺省 |
---|---|---|---|---|
robotid | 机器人唯一 ID | 不超过32个字符 | 必填 | NULL |
md5 | md5值 | 不超过32个字符 | 必填 | NULL |
filename | 文件名称 | 不超过128个字符 | 必填 | NULL |
服务示例
返回结果参数说明
名称 | 含义 | 规则说明 |
---|---|---|
code | 结果值 | 0: 成功 1: 失败 5: 文件存在 |
http://ip/file/dealsharefile?cmd=pv
参数
{
"filename":"ui_buttongroup.h"
"md5":"a89390d867d5da18c8b1a95908d7c653",
"robotid":"ced165163e51e06e01dc44c35fea3eaf"
}
返回结果
{
"code":0
}
处理逻辑
- 更新share_file_list的pv值;
- 更新RDS的FILE_PUBLIC_ZSET。
分享文件
请求URL
URL | http://ip/file/sharefile?cmd=share |
---|---|
Type | POST |
HTTP Version | 1.1 |
Content-Type | application/json |
请求参数
Param | 含义 | Rule | 是否必须 | 缺省 |
---|---|---|---|---|
token | token | 同上 | 必填 | NULL |
robotid | 机器人唯一 ID | 不超过32个字符 | 必填 | NULL |
md5 | md5值 | 不超过32个字符 | 必填 | NULL |
filename | 文件名称 | 不超过128个字符 | 必填 | NULL |
服务示例
返回结果参数说明
名称 | 含义 | 规则说明 |
---|---|---|
code | 结果值 | 0: 成功 1: 失败 4: token验证失败 |
urlmd5 | 分享文件标识 | 取消也要 |
调用接口
http://ip/file/sharefile?cmd=share
参数
{
"filename":"ui_buttongroup.h"
"md5":"a89390d867d5da18c8b1a95908d7c653",
"token":"3a58ca22317e637797f8bcad5c047446",
"robotid":"ced165163e51e06e01dc44c35fea3eaf"
}
返回结果
{
"code":0,
"urlmd5":"602fdf30db2aacf517badf4565121234"
}
处理逻辑
新建分组
新建一个MQTT的Topic,用于协作。
请求URL
URL | http://ip/msg/newgroup |
---|---|
Type | POST |
HTTP Version | 1.1 |
Content-Type | application/json |
请求参数
Param | 含义 | Rule | 是否必须 | 缺省 |
---|---|---|---|---|
token | token | 同上 | 必填 | NULL |
robotid | 机器人唯一 ID | 不超过32个字符 | 必填 | NULL |
maxsize | 同组最大数量 | >=1 | 必填 | NULL |
服务示例
返回结果参数说明
名称 | 含义 | 规则说明 |
---|---|---|
code | 结果值 | 0: 成功 1: 失败 4: token验证失败 |
topic | 加密后的topic | 失败为空 |
调用接口
http://ip/file/msg/newgroup
参数
{
"token":"3a58ca22317e637797f8bcad5c047446",
"robotid":"ced165163e51e06e01dc44c35fea3eaf",
"maxsize":10
}
返回结果
{
"code":0,
"topic":"614b0c23f5f4cd3a68ba5581e2169df3"
}
处理逻辑
释放分组
请求 URL
URL | http://ip/msg/freegroup |
---|---|
Type | POST |
HTTP Version | 1.1 |
Content-Type | application/json |
请求参数
Param | 含义 | Rule | 是否必须 | 缺省 |
---|---|---|---|---|
token | token | 同上 | 必填 | NULL |
robotid | 机器人唯一 ID | 不超过32个字符 | 必填 | NULL |
topic | 加密后的topic | 不超过32个字符 | 必填 | NULL |
服务示例
返回结果参数说明
名称 | 含义 | 规则说明 |
---|---|---|
code | 结果值 | 0: 成功 1: 失败 4: token 验证失败 5: 非topic管理员 |
调用接口
http://ip/file/msg/freegroup
参数
{
"token":"3a58ca22317e637797f8bcad5c047446",
"robotid":"ced165163e51e06e01dc44c35fea3eaf",
"topic":"614b0c23f5f4cd3a68ba5581e2169df3"
}
返回结果
{
"code":0,
}