后端技术规格说明书

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支持大型数据库,能够完成对于大量数据的操做,同时,它支持并行操做,而且是开源的免费产品,在现有条件下十分适合咱们的程序。它提供了大量数据的处理能力。json

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

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

 

 


 

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.后端数据库设计

 

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

 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

 

 

 

 

 

 

 

 


 

 

六、安全:

 

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

 

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

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

 

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

  关于用户口令:

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

  关于状态认证:

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

相关文章
相关标签/搜索