rails7: 前台 mvc + API 模式
自己常用的一种 rails 架构模式
路由
- 前台,需要简洁的路径,所以用 scope
- 后台,用 backend,这个 namespace 的
- 现实中,backend 可能叫
api/v1
这种实现
Rails.application.routes.draw do
# backend
namespace :backend, defaults: { format: :json } do
resources :posts
end
# API layer
namespace :api, defaults: { format: 'json' } do
namespace :v1 do
resources :items
# 添加其他 API 路由
end
end
# frontend:
scope module: "frontend" do
get 'home/index'
end
root to: 'frontend/home#index'
end
controller
# ---- 前台 ----
rails generate controller frontend/base
# 原理是这个
mkdir -p app/controllers/frontend
touch app/controllers/frontend/base_controller.rb
# ---- 后台 ----
rails generate controller backend/base
# 原理是这个
mkdir -p app/controllers/backend
touch app/controllers/backend/base_controller.rb
# ---- API 层
rails generate controller Api::V1::Items
前台 base_controller
class Frontend::BaseController < ApplicationController
# Your common frontend controller logic goes here
end
backend base controller,其实就是 api controller
class Backend::BaseController < ActionController::API
# Your common backend API controller logic goes here
end
api 模式 - 1层 class 嵌套
class Api::V1::TagsController < ApiController
def index
wrap do
@data = Tag.all
end
end
end
api 模式 - N层 module
module Api
module V1
class TagController < ApiController
def index
wrap do
@data = Tag.all
end
end
end
end
end