Khởi tại Rails App

rails new app-test --api

Edit Gemfile, thêm một số gem cần thiết để deploy heroku và debug.

source 'https://rubygems.org'

gem 'rails', '~> 5.0.0', '>= 5.0.0.1'
gem 'puma', '~> 3.0'
gem 'rack-cors'
gem 'active_model_serializers', '~> 0.10.0'

group :development, :test do
  gem 'mysql2', '>= 0.3.13', '< 0.5'
  gem 'byebug', platform: :mri
end

group :development do
  gem 'listen', '~> 3.0.5'
  gem 'spring'
  gem 'spring-watcher-listen', '~> 2.0.0'
  gem 'binding_of_caller'
  gem 'better_errors'
end

group :production do
  gem 'pg'
  gem 'rails_12factor'
end

gem 'tzinfo-data', platforms: [:mingw, :mswin, :x64_mingw, :jruby]

Config database.yml.

default: &default
  adapter: mysql2
  encoding: utf8
  pool: 5
  host: localhost
  database: app_new_development
  username: root
  password: ''

development:
  <<: *default

test:
  <<: *default
  database: app_new_test

Không cần database cho production vì khi deploy lên heroku, heroku sẽ tự động thay file database.yml.

Config CORS

Create file config/initializers/cors.rb

Rails.application.config.middleware.insert_before 0, Rack::Cors do
  allow do
    origins '*'

    resource '*',
      headers: :any,
      methods: [:get, :post, :put, :patch, :delete, :options, :head]
  end
end

Serializing API
Serializing API là 1 gem rất hay được sử dụng trong các app API.

Để setting cho serializer, ta tạo file config/initializers/active_model_serializer.rb

ActiveModelSerializers.config.adapter = :json_api

api_mime_types = %W(  
  application/vnd.api+json
  text/x-json
  application/json
)
Mime::Type.register 'application/vnd.api+json', :json, api_mime_types

Trong phần config adapter, có những adapter sau được hỗ trợ : - attributes - base - json_api - json - null

Ta có thể sử dụng command sau để tạo ra 1 serializer

rails g serializer user

Command này sẽ tạo ra file app/serializers/user_serializer.rb:

class UserSerializer < ActiveModel::Serializer
  attributes :id
end

Versions cho API
Khi phát triển app API để quản lý tốt các giai đoạn phát triển chúng ta sẽ sử dụng version. Khi có version thì endpoint của API sẽ như sau :

http://localhost:3000/api/v1/users/

Cấu trúc thư mục code sẽ như sau :

app/controllers/
.
|-- api
|   `-- v1
|       |-- api_controller.rb
|       `-- users_controller.rb
|-- application_controller.rb

controllers sẽ giống như sau :

# app/controllers/api/v1/api_controller.rb

module Api::V1
  class ApiController < ApplicationController
    # do something here
  end
end
# app/controllers/api/v1/users_controller.rb

module Api::V1
  class UsersController < ApiController

    # GET /v1/users
    def index
      render json: User.all
    end

  end
end

Config routes
config cho /api/v1/users:

  namespace :api do
    namespace :v1 do
      resources :users
    end
  end

Đến đây về cơ bản chúng ta đã hoàn thành config cho 1 new app API với Rails 5, giờ thì bắt tay vào xây dựng app của mình thôi.
Hy vọng bài viết này có ích với các bạn. :)