PHP成長記(二) —— SOA&RESTful軟件架構

     你有沒有遇到過,同一個數據庫的數據,每次做一個產品都要重新實現一遍同樣的功能,每一個產品都要單獨寫一相同的功能模塊(比如登錄,獲取產品列表等),很多以前寫的功能模塊到現在都不能複用了,工作幾年下來,公司裏沒有沉澱出可以複用的東西……

     如果你遇到過相似的情況,也許你應該關注一下SOA(Service-Oriented Architecture)—— 面向服務的體系結構,這不是一中具體的技術,只是一個設計思想,他的主要思想就是把服務從項目中分離出來,做成接口的形式供其他項目調用,這樣的好處很明顯,第一、只要約定好接口形式,任何語言都可以相互調用;第二、最大化的複用功能模塊;第三、可以橫向和縱向擴展,等等。這時大家可能想起來Web Service來了,它主要機遇基於SOAP通過HTTP協議進行調用,這種形式有很多弊病,比如開發麻煩,要生成一個非常大的WSDL文件,生成的數據格式很複雜,有沒有一種既簡單又安全的方式呢,當然有了,那就是RESTful(Representational State Transfer)描述了一個架構樣式的網絡系統,很多公司的API都是通過該形式開發,比如微博API,QQ開放平臺,淘寶開發平臺等等,那它有什麼好處呢,首先它基於HTTP協議,通過即 POST、GET、HEAD、PUT 、DELETE、OPTIONS、TRACE等請求方式處理資源,然後返回通用數據格式,例如XML/JSON等,這樣不管是B/S,C/S架構都能很好的支持。下面講解一下RESTful架構設計。

      首先架構圖如下:

wKiom1Lcoe-gl8ZyAAB942QEkm0395.jpg

需要爲每個程序分配一個appKey和一個appSecret, 然後通過URL訪問服務,最後服務返回數據(JSON / XML格式)。


   可能遇到的問題:

1、安全性

   當請求端發送請求的時候,服務端要驗證合法性,那該如何驗證呢,大多數方案都是遵循OAuth(現在普遍都升級的到了OAuth2.0)。下面是我設計一種簡單方式,在小應用上可以採用。

wKiom1Lcv9GhAjgPAAFnmOWhtjQ012.jpg

       2、請求控制

              接口不能無限制的調用,不然服務會被跑慢,所以需要限制請求,方法很多,可以採用Nginx的limit模塊,限制用戶的調用頻率和最大連接數等。


       3、服務擴展

              首先對於以後服務的升級,需要對接口進行非常好的設計,避免後續改變URL,這裏建議多應用設計模式來進行程序設計,而隨着服務的訪問量不斷增加,需要對服務進行框架升級,這個可以參考我的《項目成長記》專題文章。


           SOA架構目前已經很成熟,大家可以多進行研究討論。


發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章