看了一下博客目錄,距離上次更新這個系列的博文已經有兩個多月,並非由於不想繼續寫博客,因爲中間這段時間更新了幾篇其餘系列的文章就暫時中止了,現在已經講述的差很少,也就繼續抽時間更新《Spring+SpringMVC+MyBatis+easyUI整合》這個系列了。javascript
也看到github上有人催更教程,這個真的是沒想到,也謝謝大家的確定和支持了。html
因爲《整合優化篇》中關於代碼優化及數據層優化的文章佔了較大的篇幅,致使遺漏了幾篇原計劃要更新在《整合優化篇》中的文章,關於RESTful的改造和緩存功能的整合並無作,這段時間會補充進來。前端
REST(Representational State Transfer),中文翻譯叫"表述性狀態轉移",它首次出如今2000年Roy Fielding的博士論文中,Roy Fielding是 HTTP 規範的主要編寫者之一。他在論文中提到:"我這篇文章的寫做目的,就是想在符合架構原理的前提下,理解和評估以網絡爲基礎的應用軟件的架構設計,獲得一個功能強、性能好、適宜通訊的架構。REST指的是一組架構約束條件和原則。"若是一個架構符合REST的約束條件和原則,咱們就稱它爲RESTful架構,REST其實並無創造新的技術、組件或服務,在個人理解中,它更應該是一種理念、一種思想,利用Web的現有特徵和能力,更好地詮釋和體現現有Web標準中的一些準則和約束。java
看完這段理論性的介紹可能並不會使你對於RESTful有任何的想法,甚至只是一掃而過,那就經過實際的案例來說解吧。git
ssm項目中有文章管理這個模塊,文章列表頁面刪除文章請求的服務端API地址爲:
http://ssm-demo.hanshuai.xin/article/delete.do,
這個URL並非RESTful風格的API,稍加修改,URL變成:
http://ssm-demo.hanshuai.xin/article/delete/12,
這樣是否是就是RESTful風格了?github
首先,這兩個URL都不是RESTful API,由於這兩個URL中都有delete的動做指示,RESTful API是面向資源的架構,所以其URL就應該是一個資源,並且不該該包含任何動做,對於資源的具體操做類型應該由HTTP動詞表示,而不該該是動詞存在於URL中,delete是一個動詞,所以不符合該特色,對於文章刪除功能其對應的RESTful API應該是:
[DELETE] http://ssm-demo.13blog.site/articles/12web
再講一下一開始接觸RESTful時你們均可能存在的誤區:後端
關於RESTful API設計的具體實現能夠到個人GitHub中查看,如下爲整理的一些設計原則:跨域
對於資源的具體操做類型,由HTTP動詞表示,經常使用的HTTP動詞有下面五個:瀏覽器
還有兩個不經常使用的HTTP動詞:
例子:
文章管理模塊: 1. [POST] http://ssm-demo.13blog.site/articles // 新增 2. [GET] http://ssm-demo.13blog.site/articles?page=1&rows=10 // 列表查詢 3. [PUT] http://ssm-demo.13blog.site/articles/12 // 修改 4. [DELETE] http://ssm-demo.13blog.site/articles/12 // 刪除
處理請求後,服務端需向客戶端返回的狀態碼和提示信息。
常見狀態碼(狀態碼可自行設計,只需開發者約定好規範便可):
若是服務器發生錯誤或者資源不可達,應該向用戶返回出錯信息。
後端的返回結果最好使用JSON格式。
[GET] http://ssm-demo.13blog.site/v1/articles?page=1&rows=10 [PUT] http://ssm-demo.13blog.site/v1/articles/12
ssm項目較爲簡單,所以暫時沒有加入版本信息。
如下爲參考內容,借鑑了一位博主關於安全原則的整理:
Authentication指用戶認證,Permission指權限機制,這兩點是使RESTful API強大、靈活和安全的基本保障。
經常使用的認證機制是Basic Auth和OAuth,RESTful API開發中,除非API很是簡單,且沒有潛在的安全性問題,不然,認證機制是必須實現的,並應用到API中去。Basic Auth很是簡單,不少框架都集成了Basic Auth的實現,本身寫一個也能很快搞定,OAuth目前已經成爲企業級服務的標配,其相關的開源實現方案很是豐富(更多)。
CORS即Cross-origin resource sharing,在RESTful API開發中,主要是爲js服務的,解決javascript調用RESTful API時的跨域問題。
因爲固有的安全機制,js的跨域請求時是沒法被服務器成功響應的。如今先後端分離日益成爲web開發主流方式的大趨勢下,後臺逐漸趨向指提供API服務,爲各客戶端提供數據及相關操做,而網站的開發所有交給前端搞定,網站和API服務不多部署在同一臺服務器上並使用相同的端口,js的跨域請求時廣泛存在的,開發RESTful API時,一般都要考慮到CORS功能的實現,以便js能正常使用API。
目前各主流web開發語言都有不少優秀的實現CORS的開源庫,咱們在開發RESTful API時,要注意CORS功能的實現,直接拿現有的輪子來用便可。
http改成https,加強安全驗證。
以上作了一些簡單的總結,可能並非十分的準確,若有錯誤,但願可以指出我會及時修改,謝謝了。
推薦一下本身的達人課,感興趣的朋友能夠看一下:SSM搭建精美實用的管理系統
首發於個人我的博客,新的項目演示地址:perfect-ssm。
若是有問題或者有一些好的創意,歡迎給我留言,也感謝向我指出項目中存在問題的朋友,具體的功能實現及代碼邏輯將在以後的文章中介紹。
若是你想繼續瞭解該項目能夠查看整個系列文章Spring+SpringMVC+MyBatis+easyUI整合系列文章,也能夠到個人GitHub倉庫或者開源中國代碼倉庫中查看源碼及項目文檔。