说明:
假设users表已存在
暂无验签
RESTful也可以理解为RPC的一种实现方式,暂未实现
非业务异常报错用于监控,如插入数据失败
仅完成基本实现,进一步方案如下
消息未读数量,后续可以用缓存
对性能有要求时,可使用Redis
分页产生性能问题时,调整分页方案,如按ID分页
Sorry
时间较紧,未完成写测试,仅自测接口
数据库连接池存在问题
未进行压测
git clone git @github . com :dinglixiang /msg . git
cd msg
bundle install
# 修改数据库配置, mysql
vim config /database . yml
# 创建数据库
rake db :create DB = true
# 创建相关表
rake db :migrate DB = true
# 启动hprose server
rails s
# 另起一个窗口,运行客户端,调用服务
ruby client . rb
背景:周一周二空闲时间,时间紧
基于Rails,使用ActiveRecord,快速实现业务逻辑;选择Hprose RPC框架,JSON数据传输,Hprose一看即懂,快速上手;而grpc等还需了解protocol buffer等内容。
私信存储和联系人关系都采用了数据冗余,以空间换取时间,即插入两条数据(仅收发人对换),以便满足私信的相关查询。
具体表结构可参考Migration
修改Rails的启动顺序,启动Hprose Server端;基于http,实现RPC client调用
参考:
返回结果格式,eg:{code: 0, message: 'success', data: {}};其中code为业务代码,message为业务代码对应的说明信息, data可能为空
分页信息格式,列表为list,分页使用pagination,包含当前页、总页数、总数等信息,eg:{code: 0, message: 'success', data: {list: [], pagination: {...}}
参数
类型
说明
备注
user_id
Integer
当前用户ID
page
Integer
当前页
默认第一页
per_page
Integer
分页大小
默认10
# 正常
{
"code" : 0 ,
"message" : " success" ,
"data" : {
"list" : [
{
"friend_id" : 1 ,
"unread_count" : 1
}
,... ],
"pagination" : {
"total_pages" : 1 ,
"total_count" : 1 ,
"page" : 1
}
}
}
参数
类型
说明
备注
user_id
Integer
当前用户ID
friend_id
Integer
新联系人ID
# 正常
{
"code" : 0 ,
"message" : " success" ,
"data" : {}
}
# 异常
{
"code" : 1 ,
"message" : " had been friend" ,
}
参数
类型
说明
备注
user_id
Integer
当前用户ID
friend_id
Integer
联系人ID
# 正常
{
"code" : 0 ,
"message" : " success" ,
"data" : {}
}
# 异常
{
"code" : 2 ,
"message" : " user info error" ,
}
参数
类型
说明
备注
user_id
Integer
当前用户ID
friend_id
Integer
联系人ID
content
String
消息内容
仅文字
# 正常
{
"code" : 0 ,
"message" : " success" ,
"data" : {}
}
# 异常
{
"code" : 1 ,
"message" : " not friend" ,
}
参数
类型
说明
备注
user_id
Integer
当前用户ID
friend_id
Integer
新联系人ID
page
Integer
当前页
默认第一页
per_page
Integer
分页大小
默认10
# 正常
{
"code" : 0 ,
"message" : " success" ,
"data" : {
"list" : [
{
"id" : 1 ,
"status" : " readed" ,
"content" : " test" ,
"created_at" : 1505226446
}
,... ],
"pagination" : {
"total_pages" : 1 ,
"total_count" : 1 ,
"page" : 1
}
}
}
说明:根据用户信息,将当前时间之前的私信皆标记为已读
参数
类型
说明
备注
sender_id
Integer
发送者ID
reciever_id
Integer
接受者ID
{
"code" : 0 ,
"message" : " success" ,
"data" : {}
}
参数
类型
说明
备注
user_id
Integer
当前用户ID
msg_id
Integer
消息内容ID
{
"code" : 0 ,
"message" : " success" ,
"data" : {}
}