鼬~~哩賀,我是寫程式的山姆老弟,昨天跟大家一起看了 Rails 的Caching
機制,今天來看 RailsGuide 的 API-only mode,夠夠~
在創立 Rails 專案的時候,會使用 $ rails new project_name
的指令來創立專案,但以這樣的指令創立專案,會產生各種 Rails 預設套件的檔案,其中包含 Rails 網頁前端的部分 - View
,以及其他 Serving files 的設定,這些對於只是想利用 Rails,作為一個後端伺服器應用的開發者來說,都是多餘的,所以 Rails 提供一個選擇是可以在創立專案時,就避免產生這些多餘的檔案,只產生作為 API Server 的必要檔案
最早以前的 Rails
是設計給「網頁」使用的,Rails 開發者可以只學習 Rails,就打造出一個具有 前端 與 後端 功能的網頁,Rails Server 根據網頁 Client
需求,產生出相對應的 HTML, CSS, JS 等網頁資源給網頁 Client
的瀏覽器渲染
後來隨著手機盛行,Android
和 iOS
也需要有後端功能,所以 Rails 的 Server 會有一部分客戶來源,是透過 Web API 溝通的行動端,再後來,隨著前端的發展,前、後端分離的趨勢更加明顯,導致前端通常會獨立開 React, Angular, Vue
專案,透過 Web API 與後端溝通
這時候 Rails 的前端就形同虛設,所以越來越多人使用 Rails 只是單獨使用 Rails 的後端部分,Rails
官方就正式提供 API-only 的模式給開發者選擇,在創立專案的時候,就省略 Rails 的前端部分
Ruby
的使用者除了 Rails
網頁框架可以使用之外,還有輕量化的 Sinatra
可以考慮,既然有輕量化的 Sinatra
,為何要用 Rails
來專門作為 API Server 呢?
針對這個問題,官方有給出一個回答:
Middleware
層提供:
ActionPack
層也提供了:
最後官方表示:你可能沒有想過,即使拿掉了 Rails 的 View 層,還有剩下大部分的部件還持續運作
$ rails new your_api_server_name —-api
就是後面的 —-api
,表示要開啟 API-only Mode,主要會做三件事:
ActionController::API
而不是原本的 ActionController::Base
,會少掉給需要瀏覽器的功能到 config/application.rb
新增在最上面
# config/application.rb
class Application < Rails::Application
config.api_only = true
...
end
把 app/controllers/application_controller.rb
的繼承改掉
# app/controllers/application_controller.rb
class ApplicationController < ActionController::API
end
這樣就可以囉
這篇 RailsGuide 還有提到其他關於 API-only 模式下的各種 middleware 設定調整,都是可以根據需求來增減各個 middleware,如果有特殊需求(例如需要傳檔案、要 Cache、要 Cookies、要 i18n 等等)再自己去看囉,我們明天見~