UNPKG

xuanxuan

Version:

企业即时通讯平台

1,165 lines (1,071 loc) 33.4 kB
# 服务器端API 服务器端 API 是开放的,你可以使用自己熟悉的技术(例如 node.js、go、swift)实现自己的服务器端。 请参考以下 API 设计来开发自己的服务器端。 ## 数据库设计参考 MySql 数据库参见 https://github.com/easysoft/xuanxuan/blob/master/server/ranzhi/db/xuanxuan.sql ### Chat 表 存储会话数据。 | 名称 | 类型 | 必须/可选 | 说明 | | :------------- | :------- | :---: | :--------------------------------------- | | id | number | 必须 | 存储在远程数据库的id,客户端根据此id值是否设置来判定是否为远程保存的对象 | | gid | string | 必须 | 当客户端向系统提交新的会话时,会创建全局唯一的id | | name | string | 可选 | 会话名称,当为空时,客户端会自动生成会话名称 | | type | string | 可选 | 表明会话类型:system(系统), one2one(一对一), gourp(多人讨论组), project, product等 | | admins | string | 可选 | 会话管理员用户列表 | | committers | string | 可选 | 会话允许发言用户清单 | | subject | int | 可选 | 主题会话关联的主题(product, project等)ID | | public | bool | 可选 | 是否公共会话 | | createdBy | string | 必须 | 创建者的账号 | | createdDate | datetime | 必须 | 创建会话时服务器的时间戳 | | editedBy | string | 可选 | 编辑者的账号 | | editedDate | datetime | 可选 | 编辑会话时服务器的时间戳 | | lastActiveTime | datetime | 可选 | 会话最后一次发送消息时服务器的时间戳 | | [users] | 关联数据集 | 必须 | 包含此会话的所有成员,和每个成员加入此会话的时间 | | [messages] | 关联数据集 | 必须 | 包含此会话的所有消息 | ### Message 表 存储会话消息数据。 | 名称 | 类型 | 必须/可选 | 说明 | | :---------- | :----- | :---: | ---------------------------------------- | | id | number | 必须 | 存储在远程数据库的id,客户端根据此id值是否设置来判定是否为远程保存的对象 | | gid | string | 必须 | 当客户端向系统提交新的消息时,会创建全局唯一的id | | cgid | string | 必须 | 此消息所属于的会话的gid属性,会话根据此值来查询包含的消息 | | user | string | 可选 | 此消息发送者的用户名,广播类的消息没有此值 | | date | number | 必须 | 消息发送的时间戳 | | type | string | 可选 | 消息的类型,为'normal'(默认), 'broadcast' | | content | string | 必须 | 消息的内容,如果消息内容类型不是文本,则已此值为json格式的对象 | | contentType | string | 必须 | 消息内容的类型,为'text'(默认), 'emoticon', 'image', 'file' | ### ChatsOfUser 表 存储参与会话的成员数据。 | 名称 | 类型 | 必须/可选 | 说明 | | :---- | :------- | :---: | -------------- | | id | number | 必须 | 存储在远程数据库的id | | cgid | string | 必须 | 会话的gid属性 | | user | number | 必须 | 用户id,对应用户表的id | | order | number | 可选 | 会话显示顺序 | | star | bool | 可选 | 用户是否收藏会话 | | hide | bool | 可选 | 用户是否隐藏会话 | | mute | bool | 可选 | 用户是否开启免打扰 | | quit | datetime | 可选 | 用户退出会话时服务器的时间戳 | | join | datetime | 必须 | 用户加入会话时服务器的时间戳 | ### UserMessage 存储用户离线时收到的消息。 | 名称 | 类型 | 必须/可选 | 说明 | | ------- | ------ | ----- | ---------------------------------------- | | id | number | 必须 | 存储在远程数据库的id,离线消息的标识符,服务器根据客户端返回的此id删除已发送过的离线消息。 | | level | number | 必须 | 离线消息级别,默认为3。数字越低级别越高,优先发送级别高的离线消息,用户登录时会生成级别为01的消息各一条。 | | user | number | 必须 | 离线消息的目标用户id,对应用户表的id | | message | text | 必须 | 离线消息的内容,经过json编码的数据 | ## API说明 ### 名词约定 client:喧喧客户端 xxd:GO 聊天服务器 rzs:后台然之服务器 ### API数据格式 常见的请求对象格式 ```js { userID, // 用户id,xxd -> rzs 非登录时必须 module, // 模块名称,必须 method, // 方法名称,必须 test, // 可选参数,bool,默认为false。 params, // 参数对象,可选 data // 请求数据,可选,与params配合使用,通常data传输是对象 } ``` 常见的响应数据格式 ```js { module, // 模块名称,必须 method, // 方法名称,必须 users[], // 该数据响应给哪些用户,users为空表示所有在线用户 params, // 参数对象,可选 result:, // 响应状态,可为'success'(成功), 'fail'(失败), 'denied'(拒绝,需要登录), message:, // 消息,可选,当result不为success时,使用此字段来解释原因 data // 数据 } ``` ### xxd启动 >xxd启动时会向rzs发送一条请求,rzs收到请求将所有用户状态重置为offline。 #### 请求 ##### 方向:xxd --> rzs ```js { module: 'chat', method: 'serverStart' } ``` #### 响应 ##### 方向:rzs ---> xxd ```js HTTP Status Code ``` ### 登录 #### 请求 ##### 方向:client --> xxd ```js { module: 'chat', method: 'login', params: [ serverName, //多然之时客户端登录的服务器名称 account, // 用户名 password, // 加密后的密码 status // 登录后设置的状态,包括online,away,busy ] } ``` ##### 方向:xxd --> rzs xxd服务器根据module、methodserverName把请求发送给指定的rzs #### 响应 ##### 方向:rzs --> xxd ```js { module: 'chat', method: 'login', result, users[], data: { // 当前登录的用户数据 id, // ID account, // 用户名 realname, // 真实姓名 avatar, // 头像URL role, // 角色 dept, // 部门ID status, // 当前状态 admin, // 是否超级管理员,super 超级管理员 | no 普通用户 gender, // 性别,u 未知 | f 女 | m 男 email, // 邮箱 mobile, // 手机 site, // 网站 phone // 电话 } } ``` 登录成功以后xxd主动从rzs服务器获取用户列表、用户所参与的会话信息和用户的离线消息发送给当前客户端。最后把rzs服务器响应给xxd服务器的登录信息去掉users字段后,发送给此会话包含的所有在线用户。 ### 登出 #### 请求 ##### 方向:client --> xxd ```js { userID, //登出用户的id号 module: 'chat', method: 'logout', } ``` ##### 方向:xxd --> rzs xxdclient发送的数据转发给rzs。 #### 响应 ##### 方向 rzs --> xxd ```js { module: 'chat', method: 'logout', result, users[], data: { // 当前登录的用户数据 id, // ID account, // 用户名 realname, // 真实姓名 avatar, // 头像URL role, // 角色 dept, // 部门ID status, // 当前状态 admin, // 是否超级管理员,super 超级管理员 | no 普通用户 gender, // 性别,u 未知 | f 女 | m 男 email, // 邮箱 mobile, // 手机 site, // 网站 phone // 电话 } } ``` ##### 方向:xxd --> client 把rzs服务器响应给xxd服务器的登出信息去掉users字段后,发送给此会话包含的所有在线用户。 ### 重复登录 >当同一用户重复登录时,系统会向前一个登录的用户推送一条特殊的消息,客户端接收到该消息后应该将用户登出,并关闭相关的网络连接。该消息不需要响应或返回结果。 ##### 方向:xxd --> client ```js { module: 'chat', method: 'kickoff', message: 'This account logined in another place.' } ``` ### 获取所有用户列表 #### 请求 ##### 方向: client --> xxd ```js { userID, //用户的id号 module: 'chat', method: 'userGetlist' } ``` ##### 方向: xxd --> rzs xxdclient发送的数据转发给rzs。 #### 响应 ##### 方向:rzs --> xxd ```js { module: 'chat', method: 'userGetlist', result, users[], data: [ // 所有用户状态数组 { // 其中一个用户数据 id, // ID account, // 用户名 realname, // 真实姓名 avatar, // 头像URL role, // 角色 dept, // 部门ID status, // 当前状态 admin, // 是否超级管理员,super 超级管理员 | no 普通用户 gender, // 性别,u 未知 | f 女 | m 男 email, // 邮箱 mobile, // 手机 site, // 网站 phone // 电话 }, // 更多用户数据... ] } ``` ##### 方向:xxd --> client 把rzs服务器响应给xxd服务器的信息去掉users字段后,发送给此会话包含的所有在线用户。 ### 获取当前登录用户所有会话数据 #### 请求 ##### 方向:client --> xxd ```js { userID, module: 'chat', method: 'getList', } ``` ##### 方向: xxd --> rzs xxdclient发送的数据转发给rzs。 #### 响应 ##### 方向:rzs --> xxd ```js { module: 'chat', method: 'getList', result, users[], data: [ // 所有会话信息数组 { // 其中一个会话信息 id, // 会话在服务器数据保存的id gid, // 会话的全局id, name, // 会话的名称 type, // 会话的类型 admins, // 会话允许发言的用户列表 subject, // 主题会话的关联主题ID public, // 是否公共会话 createdBy, // 创建者用户名 createdDate, // 创建时间 editedBy, // 编辑者用户名 editedDate, // 编辑时间 lastActiveTime, // 会话最后一次发送消息的时间 star, // 当前登录用户是否收藏此会话 hide, // 当前登录用户是否隐藏此会话 members: [ // 当前会话中包含的所有用户信息,只需要包含id即可 { id, //用户id }, // 更多用户... ], }, // 更多会话数据... ] } ``` ##### 方向:xxd --> client 把rzs服务器响应给xxd服务器的信息去掉users字段后,发送给此会话包含的所有在线用户。 ### 获取当前登录用户所有离线消息 #### 请求 ##### 方向: xxd --> rzs ```js { userID, module: 'chat', method: 'getOfflineMessages', } ``` #### 响应 ##### 方向:rzs --> xxd ```js { module: 'chat', method: 'message', result, users[], data: // 一个包含一条或多条离线消息的数组 [ { // 其中一条离线消息 id, // 消息在服务器保存的id gid, // 此消息的gid cgid, // 此消息关联的会话的gid user, // 消息发送的用户名 date, // 消息发送的时间 type, // 消息的类型 contentType, // 消息内容的类型 content, // 消息内容 }, // 更多离线消息 ] } ``` ##### 方向:xxd --> client 把rzs服务器响应给xxd服务器的信息去掉users字段后,发送给当前登录用户。 ### 更改当前登录用户的信息 #### 请求 ##### 方向:client --> xxd ```js { userID, module: 'chat', method: 'userChange', params: [ // 更改后的用户 user: // 一个用户对象 { id, // ID account, // 用户名 realname, // 真实姓名 avatar, // 头像URL role, // 角色 dept, // 部门ID status, // 要设置的新状态,包括online, away, busy admin, // 是否超级管理员,super 超级管理员 | no 普通用户 gender, // 性别,u 未知 | f 女 | m 男 email, // 邮箱 mobile, // 手机 site, // 网站 phone // 电话 } ] } ``` ##### 方向: xxd --> rzs xxd把client发送的数据转发给rzs。 #### 响应 ##### 方向:rzs --> xxd ```js { module: 'chat', method: 'userChange', result, users[], data: { //当前登录用户数据 id, // ID account, // 用户名 realname, // 真实姓名 avatar, // 头像URL role, // 角色 dept, // 部门ID status, // 状态 admin, // 是否超级管理员,super 超级管理员 | no 普通用户 gender, // 性别,u 未知 | f 女 | m 男 email, // 邮箱 mobile, // 手机 site, // 网站 phone // 电话 } } ``` ##### 方向:xxd --> client 把rzs服务器响应给xxd服务器的信息去掉users字段后,发送给此会话包含的所有在线用户。 ### 创建聊天会话 #### 请求 ##### 方向:client --> xxd ```js { userID, module: 'chat', method: 'create', params: [ gid, // 会话的全局id, name, // 会话的名称 type, // 会话的类型 members: [{id}, {id}...] // 会话的成员列表 subject, //可选,主题会话的关联主题ID,默认为0 pulic //可选,是否公共会话,默认为false ] } ``` ##### 方向: xxd --> rzs xxd把client发送的数据转发给rzs。 #### 响应 >服务器在创建会话时应该先检查gid是否已经存在,如果存在则直接为当前登录用户返回已存在的会话信息。 ##### 方向:rzs --> xxd ```js { module: 'chat', method: 'create', result, users[], data: { // 新创建的会话完整信息 id, // 会话在服务器数据保存的id gid, // 会话的全局id, name, // 会话的名称 type, // 会话的类型 admins, // 会话允许发言的用户列表 subject, // 主题会话的关联主题ID public, // 是否公共会话 createdBy, // 创建者用户名 createdDate, // 创建时间 editedBy, // 编辑者用户名 editedDate, // 编辑时间 lastActiveTime, // 会话最后一次发送消息的时间 members: [{id}, {id}...] // 会话的成员列表 } } ``` ##### 方向:xxd --> client 把rzs服务器响应给xxd服务器的信息去掉users字段后,发送给此会话包含的所有在线用户。 ### 加入或退出聊天会话 >用户可以加入类型为group并且公共的会话;用户可以退出类型为group的会话。 #### 请求 ##### 方向:client --> xxd ```js { userID, module: 'chat', method: 'joinchat', params: [ gid, // 要加入或退出的会话id join // 可选, true加入会话, false退出会话, 默认为true ] } ``` ##### 方向: xxd --> rzs xxdclient发送的数据转发给rzs。 #### 响应 ##### 方向:rzs --> xxd ```js { module: 'chat', method: 'joinchat', result, users[], data: { // 会话的完整信息 id, // 会话在服务器数据保存的id gid, // 会话的全局id, name, // 会话的名称 type, // 会话的类型 admins, // 会话允许发言的用户列表 subject, // 主题会话的关联主题ID public, // 是否公共会话 createdBy, // 创建者用户名 createdDate, // 创建时间 editedBy, // 编辑者用户名 editedDate, // 编辑时间 lastActiveTime, // 会话最后一次发送消息的时间 members: [{id}, {id}...] // 会话的成员列表 } } ``` ##### 方向:xxd --> client 把rzs服务器响应给xxd服务器的信息去掉users字段后,发送给此会话包含的所有在线用户(包括退出会话的当前用户)。 ### 更改会话名称 >用户可以更改类型为group的会话的名称。 #### 请求 ##### 方向:client --> xxd ```js { userID, module: 'chat', method: 'changeName', params: [ gid, // 要更改的会话id name // 新的名称 ] } ``` ##### 方向: xxd --> rzs xxdclient发送的数据转发给rzs。 #### 响应 ##### 方向:rzs --> xxd ```js { module: 'chat', method: 'changeName', result, users[], data: { // 会话的完整信息 id, // 会话在服务器数据保存的id gid, // 会话的全局id, name, // 会话的名称 type, // 会话的类型 admins, // 会话允许发言的用户列表 subject, // 主题会话的关联主题ID public, // 是否公共会话 createdBy, // 创建者用户名 createdDate, // 创建时间 editedBy, // 编辑者用户名 editedDate, // 编辑时间 lastActiveTime, // 会话最后一次发送消息的时间 members: [{id}, {id}...] // 会话的成员列表 } } ``` ##### 方向:xxd --> client 把rzs服务器响应给xxd服务器的信息去掉users字段后,发送给此会话包含的所有在线用户。 ### 收藏或取消收藏会话 >每个用户都可以单独决定收藏或取消收藏会话(加星标记)。 #### 请求 ##### 方向:client --> xxd ```js { userID, module: 'chat', method: 'star', params: [ gid, // 要收藏会话id star // 可选, true收藏会话, false取消收藏会话, 默认为true ] } ``` ##### 方向: xxd --> rzs xxdclient发送的数据转发给rzs。 #### 响应 ##### 方向:rzs --> xxd ```js { module: 'chat', method: 'star', result, users[], data: { // 会话的完整信息 gid, // 会话的全局id, star // true收藏会话, false取消收藏会话, 默认为true } } ``` ##### 方向:xxd --> client 把rzs服务器响应给xxd服务器的信息去掉users字段后,发送给当前用户。 ### 邀请新的用户到会话或者将用户踢出会话 #### 请求 >用户可以邀请一个或多个用户到类型为group的已有会话中;会话管理员可以将一个或多个用户踢出类型为group的会话。 ##### 方向:client --> xxd ```js { userID, module: 'chat', method: 'addmember', params: [ gid, // 要操作的会话id members, // 用户id数组 join // 可选, true邀请用户加入会话, false将用户踢出会话, 默认为true ] } ``` ##### 方向: xxd --> rzs xxdclient发送的数据转发给rzs。 #### 响应 >当新用户被添加到会话之后或者用户被踢出会话后,服务器应该主动推送此会话的信息给此会话的所有在线成员;此响应与chat/create/响应的结果一致。 ##### 方向:rzs --> xxd ```js { module: 'chat', method: 'addmember', result, users[], data: // 会话的完整信息 { id, // 会话在服务器数据保存的id gid, // 会话的全局id, name, // 会话的名称 type, // 会话的类型 admins, // 会话允许发言的用户列表 subject, // 主题会话的关联主题ID public, // 是否公共会话 createdBy, // 创建者用户名 createdDate, // 创建时间 editedBy, // 编辑者用户名 editedDate, // 编辑时间 lastActiveTime, // 会话最后一次发送消息的时间 members: [{id}, {id}...] // 会话的成员列表 } } ``` ##### 方向:xxd --> client 把rzs服务器响应给xxd服务器的信息去掉users字段后,发送给此会话包含的所有在线用户。 ### 向会话发送消息 #### 请求 >用户向一个或多个会话中发送一条或多条消息,服务器推送此消息给此会话中的所有在线成员;当前不在线的成员会在下次上线时通过离线消息送达。 ##### 方向:client --> xxd ```js { userID, module: 'chat', method: 'message', params: [ // 一个包含一条或多条新消息的数组 { gid, // 此消息的gid cgid, // 此消息关联的会话的gid user, // 如果为空,则为发送此请求的用户 date, // 如果为空,则已服务器处理时间为准 type, // 消息的类型 contentType, // 消息内容的类型 content // 消息内容 }, // 可以在一个请求中发送多个消息 ] } ``` ##### 方向: xxd --> rzs xxd把client发送的数据转发给rzs。 #### 响应 >当有新的消息收到时,服务器会所有消息,并发送给对应会话的所有在线成员 ##### 方向:rzs --> xxd ```js { module: 'chat', method: 'message', result, users[], data: // 一个包含一条或多条新消息的数组 [ { id, // 消息在服务器保存的id gid, // 此消息的gid cgid, // 此消息关联的会话的gid user, // 消息发送的用户名 date, // 消息发送的时间 type, // 消息的类型 contentType, // 消息内容的类型 content, // 消息内容 }, // 可以有更多的消息 ] } ``` ##### 方向:xxd --> client 把rzs服务器响应给xxd服务器的信息去掉users字段后,发送给此会话包含的所有在线用户。 ### 获取会话的所有消息记录 #### 请求 ##### 方向:client --> xxd ```js { userID, module: 'chat', method: 'history', params: [ gid, // 要获取消息记录的会话gid recPerPage, // 每页记录数 pageID, // 当前也数 recTotal, // 总记录数 continued // 是否继续获取历史记录 ] } ``` ##### 方向: xxd --> rzs xxdclient发送的数据转发给rzs。 #### 响应 ##### 方向:rzs --> xxd ```js { module: 'chat', method: 'history', result, users[], data: [ { // 一条历史消息 gid, // 此消息的gid cgid, // 此消息关联的会话的gid user, // 如果为空,则为发送此请求的用户 date, // 如果为空,则已服务器处理时间为准 type, // 消息的类型 contentType, // 消息内容的类型 content // 消息内容 }, // 更多历史消息 ], pager: // 分页数据 { recPerPage, // 每页记录数 pageID, // 当前页数 recTotal, // 总记录数 gid, // 当前会话id continued // 是否继续获取历史记录 } } ``` ##### 方向:xxd --> client 把rzs服务器响应给xxd服务器的信息去掉users字段后,发送给此会话包含的所有在线用户。 ### 获取会话的所有成员信息 #### 请求 ##### 方向:client --> xxd ```js { userID, module: 'chat', method: 'members', params: [ gid // 要获取成员列表的会话gid ] } ``` ##### 方向: xxd --> rzs xxdclient发送的数据转发给rzs。 #### 响应 ##### 方向:rzs --> xxd ```js { module: 'chat', method: 'members', result, users[], data: [ { gid, // 此消息的gid members: [ { id, // ... } ] }, ] } ``` ##### 方向:xxd --> client 把rzs服务器响应给xxd服务器的信息去掉users字段后,发送给此会话包含的所有在线用户。 ### 隐藏或显示会话 >每个用户都可以单独决定隐藏或显示已参与的会话。 #### 请求 ##### 方向:client --> xxd ```js { userID, module: 'chat', method: 'hide', params: [ gid, // 要收藏会话id hide // 可选, true隐藏会话, false显示会话, 默认为true ] } ``` ##### 方向: xxd --> rzs xxdclient发送的数据转发给rzs。 #### 响应 ##### 方向:rzs --> xxd ```js { module: 'chat', method: 'hide', result, users[], data: { gid, // 要隐藏或显示的会话id hide // true隐藏会话, false显示会话, 默认为true } } ``` ##### 方向:xxd --> client 把rzs服务器响应给xxd服务器的信息去掉users字段后,发送给当前用户。 ### 将会话设置为公共会话或者取消设置公共会话 >用户可以将一个非主题会话设置为公共会话或者取消设置公共会话。 #### 请求 ##### 方向:client --> xxd ```js { userID, module: 'chat', method: 'changePublic', params: [ gid, public, // 可选,true设置公共会话,false取消设置公共会话,默认为true ] } ``` ##### 方向: xxd --> rzs xxdclient发送的数据转发给rzs。 #### 响应 ##### 方向:rzs --> xxd ```js { module: ' chat'; method: 'changepublic', result, users[], data: { // 会话的完整信息 id, // 会话在服务器数据保存的id gid, // 会话的全局id, name, // 会话的名称 type, // 会话的类型 admins, // 会话允许发言的用户列表 subject, // 主题会话的关联主题ID public, // 是否公共会话 createdBy, // 创建者用户名 createdDate, // 创建时间 editedBy, // 编辑者用户名 editedDate, // 编辑时间 lastActiveTime, // 会话最后一次发送消息的时间 members: [{id}, {id}...] // 会话的成员列表 } } ``` ##### 方向:xxd --> client 把rzs服务器响应给xxd服务器的信息去掉users字段后,发送给此会话包含的所有在线用户。 ### 获取所有公共会话列表 #### 请求 ##### 方向:client --> xxd ```js { userID, module: 'chat', method: 'getPublicList' } ``` ##### 方向: xxd --> rzs xxdclient发送的数据转发给rzs。 #### 响应 ##### 方向:rzs --> xxd ```js { module: 'chat', method: 'getPublicList', result, users[], data: [ // 所有公共会话信息数组 { // 其中一个会话信息 id, gid, name, type, admins, subject, public, createdBy, createdDate, editedBy, editedDate, lastActiveTime }, // 更多会话数据... ] } ``` ##### 方向:xxd --> client 把rzs服务器响应给xxd服务器的信息去掉users字段后,发送给此会话包含的所有在线用户。 ### 设置会话管理员 #### 请求 ##### 方向:client --> xxd ```js { userID, module: 'chat', method: 'setAdmin', params: [ gid, admins: [{id},{id}...], // 指定的用户列表 isAdmin //可选, true允许指定用户发言, false禁止指定用户发言, 默认为true ] } ``` ##### 方向: xxd --> rzs xxd把client发送的数据转发给rzs。 #### 响应 ##### 方向:rzs --> xxd ```js { module: 'chat', method: 'setAdmin', result, users[], data: { id, gid, name, type, admins, subject, public, createdBy, createdDate, editedBy, editedDate lastActiveTime } } ``` ##### 方向:xxd --> client 把rzs服务器响应给xxd服务器的信息去掉users字段后,发送给此会话包含的所有在线用户。 ### 设置会话允许发言的人 >通过此功能可以设置会话白名单。 #### 请求 ##### 方向:client --> xxd ```js { userID, module: 'chat', method: 'setCommitters', params: [ gid, committers: [{id},{id}...] // 指定的用户列表 ] } ``` ##### 方向: xxd --> rzs xxd把client发送的数据转发给rzs。 #### 响应 ##### 方向:rzs --> xxd ```js { module: 'chat', method: 'setCommitters', result, users[], data: { id, gid, name, type, admins, subject, public, createdBy, createdDate, editedBy, editedDate lastActiveTime } } ``` ##### 方向:xxd --> client 把rzs服务器响应给xxd服务器的信息去掉users字段后,发送给此会话包含的所有在线用户。 ### 上传下载用户在客户端的配置信息 #### 请求 ##### 方向:client --> xxd ```js { userID, module: 'chat', method: 'settings', params: [ account, //用户名 settings //用户配置信息, 可选, 为空表示下载用户配置信息, 不为空表示上传用户配置信息, 默认为空 ] } ``` ##### 方向: xxd --> rzs xxdclient发送的数据转发给rzs。 #### 响应 ##### 方向:rzs --> xxd ```js { module: 'chat', method: 'settings', users[], result, data // 用户配置信息 } ``` ##### 方向:xxd --> clientrzs服务器响应给xxd服务器的信息去掉users字段后,发送给当前登录用户。 ### 上传文件 #### 请求 ##### 方向:client --> xxd 客户端通过 httpsxxd 服务器发起 POST 请求。 请求头部需要包含如下内容: * `ServerName`:然之服务器名称; * `Authorization`:用户 token; 请求表单需要包含如下字段: * `file`:文件域,包括文件名; * `gid`:该文件所属会话的 gid; * `userID`:当前用户 id; 以下为以 JavaScript 对象存储的请求数据示例: ```js { headers: { ServerName: 'ranzhiServer1', Authorization: '12345678888888888888888888888888' }, multipart: { { 'Content-Disposition': 'form-data; name="file"; filename="example.txt"', body: e.target.result }, { 'Content-Disposition': 'form-data; name="gid"', body: '1&2' } } } ``` ##### 方向: xxd --> rzs ```js { userID, module: 'chat', method: 'uploadFile', params: [ fileName, // 文件名(带扩展名) path, // 文件在xxd的路径 size, // 文件大小 time, // 时间戳 gid, // 会话ID ] } ``` xxdclient发送的数据转发给rzs。 #### 响应 ##### 方向:rzs --> xxd ```js { module: 'chat', method: 'uploadFile', users[], result, data: fileID // 文件在然之服务器数据库存储的id } ``` ##### 方向:xxd --> client xxd 服务器在客户端发起的 POST 请求中以 JSON 文本格式返回文件基本信息。 ```js { result: 'success', data: { url, // 文件在xxd服务器上的下载地址(可选,无此属性会按照规则生成 URL 地址) time, // 时间戳 id, // 文件 ID name, // 文件标题 } } ```