rails7: 前台 mvc + API 模式

自己常用的一种 rails 架构模式
更新于: 2023-12-13 22:05:15

路由

  • 前台,需要简洁的路径,所以用 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