比較不同框架有個最顯而易見的好處
如果大家都有的設計,八成是重要的當代典範
所以每個框架才會紛紛採納
如果你使用的框架沒有這樣的設計
可能就要考慮使用外掛來補強
Rails、Phoenix、Laravel都有考慮到RESTful API設計
唯獨Django沒有
不論我在官方文件或是中文翻譯都沒能找到相關的設計
但是有找到一款外掛Django-REST-framework
使用Django的朋友自然可以考慮要不要安裝使用
以我自己兩年的Rails開發經驗來看
實務上是非常實用且方便的工具
但也或許Django一直遲遲不肯作為官方支援
有自己的設計哲學或道理也說不定(?)
這我目前就不得而知了
再繼續下去之前
先來講講什麼是 RESTful API
REST是縮寫,全稱為「Resource Representational State Transfer」
嚴格說來這不是一種技術,而是一種觀念或設計思維
在這個觀念出現以前
一個新增post的網址在不同專案可能如下:/create_post
、/new_post
、/post/create
、/insert_post
、/gen_post
畢竟每個人的想法不同,
用什麼方式實作「新增」自然因人而異
但有了REST以後
只要知道Model的名稱,一切都是固定的
以Rails為例,如果model是post
當我在router設定為
resources :posts
就會自動產生下面的路由
Prefix Verb URI Pattern Controller#Action
posts GET /posts(.:format) posts#index
POST /posts(.:format) posts#create
new_post GET /posts/new(.:format) posts#new
edit_post GET /posts/:id/edit(.:format) posts#edit
post GET /posts/:id(.:format) posts#show
PATCH /posts/:id(.:format) posts#update
PUT /posts/:id(.:format) posts#update
DELETE /posts/:id(.:format) posts#destroy
可以比較一下在Phoenix的結果
post_path GET /posts HelloWeb.PostController :index
post_path GET /posts/:id/edit HelloWeb.PostController :edit
post_path GET /posts/new HelloWeb.PostController :new
post_path GET /posts/:id HelloWeb.PostController :show
post_path POST /posts HelloWeb.PostController :create
post_path PATCH /posts/:id HelloWeb.PostController :update
PUT /posts/:id HelloWeb.PostController :update
post_path DELETE /posts/:id HelloWeb.PostController :delete
與Laravel的結果
基本上是相同的唷!
好啦認真說雖然Laravel的新增是使用store
而不是create
至少三個框架新增post的網址都是 POST /posts
跨不同語言不同框架
居然有這麼高程度的相同設計
這大大提高了程式的可維護性與可讀性
接手的人或是團隊的新進人員
不用通靈也不需要找不存在的文件說明
就可以快速掌握專案的router結構
這樣的設計是不是相當便利呢!
不合群的Django君
在RESTful這點上被扣了一分唷
參考資料:
https://github.com/twtrubiks/django-rest-framework-tutorial/tree/master/RESTful-API-Tutorial