後端技術規格說明書

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,哈希內容爲用戶帳戶信息以及隨機選擇的隨機數。後端保存隨機數。用戶進行驗證的時候,後端對帳戶信息和隨機數進行哈希後再比對,驗證用戶登陸狀態。

相關文章
相關標籤/搜索