Skip to content

lequangcanh/rails_base_api

Folders and files

NameName
Last commit message
Last commit date

Latest commit

 

History

2 Commits
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 

Repository files navigation

Base 1 Rails app API

Môi trường:

  • Ruby 2.7.1
  • Rails 6.0.0.2

Các công việc cần làm:

  1. Tạo Rails app với option --api rails new your_app --api
  2. Update Gemfile, add một số gem cần thiết như: mysql2, config, dotenv-rails, rack-cors, active_model_serializers, pry-rails
  3. Config kết nối với database ở file config/database.yml, nên set các giá trị ở biến môi trường.
  4. Tạo file quản lý biến môi trường, ở đây là file .env, ignore file này ra khỏi Git. Tạo file .env.example để quản lý các biến phải set trong project.
  5. Config rspec để viết UT:
  • Add thêm các Gem liên quan
group :development, :test do
  gem "factory_bot_rails"
  gem "faker"
  gem "rspec-rails"
  gem "shoulda-matchers"
  gem "simplecov"
  gem "simplecov-json"
  gem "simplecov-rcov"
end
  • bundle install và run rails generate rspec:install để generate các file config
  1. Add thêm các thư viện check convention, code style, ... nếu cần dùng
group :development, :test do
  gem "brakeman", require: false
  gem "rails_best_practices"
  gem "reek"
  gem "rubocop", require: false
  gem "rubocop-checkstyle_formatter", require: false
end
  1. Nếu đã có design DB cơ bản, có thể generate một số model chính như User, Company, ...
  2. Thiết kế cấu trúc thư mục quản lý version (Ở đây sẽ quản lý version theo kiểu api/v1)
  • Define routes:
  Rails.application.routes.draw do
    namespace :api, format: :json do
      namespace :v1 do
      end
    end
  end
  • Tạo file base_controller của v1, các controller của v1 sẽ kế thừa từ file này
  • Tương tự serializer, services, cũng nên quản lý theo version
class Api::V1::BaseController < ApplicationController
end
  1. Định nghĩa các success responses:
  • Cấu trúc success response có dạng:
  {
    "success": true,
    "data": {"Sẽ trả về những data chính của request"},
    "meta": {"Các data bổ trợ thêm, ví dụ như phân trang, ..."}
  }
  1. Định nghĩa errors responses:
  • Cấu trúc errors responses có dạng:
  {
    "success": false,
    "errors": [
      {
        "resource": "Resource phát sinh lỗi, có thể null nếu không phải lỗi từ Active Record",
        "field": "Trường bị lỗi validation, có thể null nếu không phải lỗi validation",
        "code": "Custom code, không dùng code trùng với HTTP code",
        "message": "Message lỗi"
      }
    ]
  }
  1. Xử lý pagination response.
  # config/settings.yml
  pagy:
    instances:
      vars: vars
    items_default: 30
    page_default: 1
  1. Cuối cùng include 3 cái modules trên vào base_controller để sử dụng
  module Api
    module V1
      module BaseConcern
        extend ActiveSupport::Concern

        include Api::V1::JsonRenderer
        include Api::V1::RescueExceptions
        include Api::V1::Pagination
      end
    end
  end
  • Rồi include base_concern vào base_controller
# app/controllers/api/v1/base_controller.rb
  class Api::V1::BaseController < ApplicationController
    include Api::V1::BaseConcern
  end

About

No description, website, or topics provided.

Resources

Stars

Watchers

Forks

Releases

No releases published

Packages

 
 
 

Languages