**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. :)