后端技术规格说明书

1.技术概览

 

开发环境 Ubuntu 14.04.2
数据库 MySQL
后端开发框架 rails 4.0
前后端交互 前端用URL发送HTTP请求,后端捕获request,进行路由匹配,返回json格式数据

 

 

 

 

后端在Ubuntu 14.04.2环境上开发,以Ruby On Rails框架搭建,并使用MySQL数据库。

RubyOnRails框架开发有简洁,灵活的特点,提供了一个一站式的很便捷的MVC架构,可以很方便地实现BS架构的软件。ROR通过ActiveModel层,和ActiveRecord层实现与底层数据库的交互,通过ActiveControl层实现了MVC架构的控制层,在我们的设计中,view层在后端中是以API接口(即URL请求)向外展示的,也可以把view层直接看做是前端实现的页面,API实现与view层的交互。ActiveModel和ActiveRecord定义了对象,对象是与数据库中的表进行关联,对于数据库的增删改查的操作被定义为了对象的行为,即rails框架隐藏了底层数据库操作,rails控制器可以直接操作对象实现对于数据库的操作。ruby独特的语言特性和结构极大地便利了代码重用。ruby语言可以很方便地定义代码块,同时rails架构中通过回调函数,过滤器等方式也极大地支持了代码重用。在这些过程中体现了抽象原则,控制耦合,内容耦合,模块化,功能内聚等原则。同时我们通过向外开放API,以及不同层次之间的抽象等实现了信息的隐藏和封装。

后端数据库使用MySQL实现,MySQL支持大型数据库,可以完成对于大量数据的操作,同时,它支持并行操作,并且是开源的免费产品,在现有条件下十分适合我们的程序。它提供了大量数据的处理能力。

前后端交互主要通过API实现。API在这里表现为URL请求。前端发送URL请求,后端rails框架中通过路由对于请求进行解读,匹配相应的控制器,控制器完成前端的请求并返回数据。通过这样的机制我们实现了界面和实现的分离。

后端运行在我们的服务器上,服务器是Ubuntu 14.04.2环境。输入参数设定为URL和http请求,我们通过路由匹配规则完成了对URL的限定。对于请求中数据的限定,我们在control中有专门的处理。我们返回的数据主要是http表单,内容为json格式。

 

 


 

2.实现功能

 

  • 普通用户与社团用户的登录系统
  • 展示社团发布的活动信息
  • 社团编辑并发布自己的活动信息
  • 普通用户报名参加发布的活动,并添加相关备注
  • 社团用户获取参加活动的所有普通用户名单,并对名单中的用户进行删除操作

 

  我们定义了四个实体,用户,社团,文章和备注。用户,社团和文章实体顾名思义,备注实体的主要作用除了体现用户报名中关于报名活动的备注以外,还作为用户报名活动的记录。这些实体抽象为四个对象(和数据库中的四个表)进行相关数据的存储和操作。我们将上述功能抽象到了不同的API接口,通过控制器实现。

 


 

3.API设计

 

  对于上述功能我们设计并实现了以下API,同时设计了相应的路由规则。前端可以通过这些API接口来获取数据和操作。

 

3.1 API功能分类

       

3.1.1 用户登录系统

         

3.1.2 报名

         

3.1.3 活动文章增删改

         

  3.1.4 前端获取文章信息

         

 3.1.5 活动名单

    

3.2 路由搭建

 

HTTP 方法 路径 控制器#动作 作用
POST /api/register users#register 普通用户注册
POST /api/users/login users#login 普通用户登录
GET /api/users/logout users#logout 普通用户登出
POST /api/clubs/login clubs#login 社团用户登录
GET /api/clubs/:uid/articles/:page_id clubs#getabstracts 获取社团文章概要
GET /api/clubs/logout clubs#logout 社团用户登出
GET /api/articles/:page_id articles#abstracts 获取文章概要
GET /api/articles/detail/:article_id articles#detail 获取文章详情
POST /api/clubs/articles/detail/create articles#create 创建文章
POST /api/clubs/articles/detail/:article_id/change articles#show 返回文章
POST /api/clubs/articles/detail/:article_id/update articles#update 编辑文章
POST /api/clubs/articles/detail/:article_id/delete articles#destroy 删除文章
POST /api/clubs/articles/detail/:article_id/list articles#list 获取参与活动名单
POST /api/clubs/articles/detail/:article_id/list/delete articles#cutlist 删除活动名单
POST api/users/:uid/articles/:article_id/notes/create notes#create 创建备注(报名)

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 


 

4.后端数据库设计

 

  我们对于数据库的设计如下。同时对于每个表单,我们对于几个关键属性设置了索引表,为了便于查询。当数据库中有大量数据的时候,我们对数据库的操作并不会太慢。当数据达到一定程度的时候,我们也可以建立二级索引等。通过这些我们也可以支持对于大量数据的处理能力。

 4.1 数据表

表名 属性名 类型 属性含义
articles id integer 主键
club_id integer 外键,与club实体建立多对一关联
title string 文章标题
abstract string 文章摘要
content string 文章内容
created_at string 表建立时间
updated_at string 表更新时间
users id integer 主键
stu_num integer 学号
password string 密码
phone_num string(11) 学生联系电话
log_num integer 状态验证码
created_at string 表建立时间
updated_at string 表更新时间
clubs    id integer 主键
name string 社团名称
password string 社团帐号密码
introduction string 社团介绍
head_url string 社团头像存储url地址
log_num integer 状态验证码
created_at string 表建立时间
updated_at string 表更新时间
notes id integer 主键
content string 备注内容
user_id integer 外键,指向users表
article_id integer 外键,指向articles表
created_at string 表建立时间
updated_at string 表更新时间

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

4.2 E-R图概念模型 

             


 

5.错误处理:

 

  我们的错误处理主要通过两方面实现。

  一方面通过rails自带框架实现。

  rails自带框架中对于请求格式,请求内容等,以及一些错误情况有所判断和区分,对于一些错误rails框架会自主返回错误信息。在http表单的表头中会添上相应的错误码。

  另一方面在代码中有所判断。

  我们在代码中对于边界情况等有所判断。每次对于资源的请求,对于资源的操作,用户持有的权限等,我们都会对于当前情况进行判断, 并在表单中返回错误信息。

 

状态码 错误 返回错误信息
401 普通用户账户信息认证失败 Invalid User
401 社团用户账户信息认证失败  Invalid club 
404 数据表中没有该记录  NoRecord error 
404 创建记录失败  New record failed
404 更新记录失败  update failed 
404 删除记录失败 destroy failed

 

 

 

 

 

 

 

 


 

 

6、安全:

 

  安全部分并没有做到足够细化,暂时只考虑了部分数据和过程的安全。主要是通过两种方式实现。

 

  一方面通过rails框架和HTTPS实现部分安全。

  rails框架对于http请求会进行一个简单的身份验证,这个验证是依托浏览器的,浏览器在请求中会自动嵌入一个token,rails在控制器中对于这个token进行验证,实现一个简单的身份验证。

 

  另一方面通过代码设计和存储设计等实现。

  关于用户口令:

  用户口令在后端数据库加上盐值后通过MD5进行哈希之后再进行存储,保证服务器被攻破后用户口令不会泄露。

  关于状态认证:

  用户成功登陆后,后端服务器返回一段哈希值作为token,哈希内容为用户账户信息以及随机选择的随机数。后端保存随机数。用户进行验证的时候,后端对账户信息和随机数进行哈希后再比对,验证用户登录状态。


 

posted @ 2015-11-03 22:46  WoWoTou  阅读(913)  评论(1编辑  收藏  举报