Ruby on Rails: Mẫu API (Phần 1)

Tram Ho

Trong bài viết này, minh xin chia sẻ về template mà mình đang làm ở công ty hiện tại step by step để giúp bạn có template chuẩn khi build 1 API App nhé

À quên, trong bài viết này cũng có nói qua về ý nghĩa của việc cài đặt các gem nữa đấy

I. Setting up API Rails App

Đầu tiên, khởi tạo project với API với option –api

Lưu ý option này chỉ hỗ trợ từ phiên bản Ruby >= 2.2.2 và Rails >= 5.0.0.

Trong bài viết này mình sử dụng bản rails 6.0.1

II. Using RSpec for Testing

1. Cài RSpec & Simplecov:

  • Lý do cài đặt RSpec đầu tiên vì nó sẽ giúp chúng ta tiết kiệm thời gian bằng cách sử dụng bộ RSpec generator, thì nó sẽ tiến hành generate tự động các file test controller và model khi ta sử dụng câu lệnh rails g scaffold để tự tạo các resoures nhanh chóng.
  • Để cài đặt RSpec, thêm gem rspec-rails vào Gemfile trong group :development, :test

Gem factory_bot_rails giúp mình tạo object cần thiết để test.
Kết hợp với gem ffaker để tạo object với giá trị ngẫu nhiên.

Gem shoulda-matchers cung cấp phương thức giúp viết test case ngắn gọn.
Xem thêm cú pháp tại đây

Gem simplecov giúp thống kê % coverage của unit test mà mình viết.

Tiến hành update bundle, sau đó cài đặt RSpec

2. Config factory_bot

  • Để sử dụng các phương thức của factory_bot, cần phải cấu hình rspec để nhận syntax của factory_bot.

Ở file spec/rails_helper.rb:

3. Config shoulda-matchers

ngay đầu file spec/rails_helper.rb thêm:

cuối file spec/rails_helper.rb thêm:

4. Config simplecov

ngay đầu file spec/spec_helper.rb thêm:

5. Config ffaker

Ở thư mục spec/factories/ tạo file có tên tương ứng với object cần tạo.

Ví dụ tạo file users.rb theo format sau:

Sau khi chạy xong test, có thể mở file coverage/index.html bằng trình duyệt để xem.

Đưa thư mục coverage vào .gitignore

III. Integration Rubocop & CI

1. Thiết lập Rubocop:

1.1. Cài đặt gem rubocop vào Gemfile

Với Ruby 2.5.x trở về trước

Với Ruby 2.6.x trở đi

1.2. Tải tệp nén tương ứng với phiên bản rubocop đã cài đặt ở bước 1:

Với Ruby 2.5.x trở về trước
Tải file

Với Ruby 2.6.x trở đi
Tải file

Sau đó copy 3 file trong tệp nén vừa tải về:

Paste vào thư mục dự án, ngang hàng với Gemfile.

1.3. Chạy rubocop trước mỗi lần commit gửi pull bằng lệnh:

2. Thiết lập CI

Tùy vào yêu cầu CI riêng ở mỗi công ty, các bạn cài đặt theo yêu cầu của công ty đó nhé

2.1. Tiến hành chạy kiểm tra CI

2.2. Cấp quyền cho file report CI

2.3. Xem lại reports của CI vừa chạy ở thư mục report tương ứng với CI vừa cài đặt:

2.4. Đưa một số file Ci report vào .gitignore

IV. SETUP DATABASE

Thêm gem dotenv-rails để thiết lập biến môi trường .env

Trong database.yml, config như sau:

Rồi tạo DB

V. Building Your API

Khi app được khởi tạo với option –api, ta có thể dùng generator scaffold mặc định để generate API resources như thông thường mà không cần thêm tham số đặc biệt nào

Khi chạy xong nó sẽ tạo ra các file có cấu trúc như sau:

Tiến hành migrate DB và chạy app:

VI. Serializing API Output

Ở view chúng ta thường dùng jbuilder để quản lý dữ liệu trả về dưới dạng JSON,
nhưng ở app API ta sẽ dùng AMS(Active Model Serializers) để quản lý việc này. AMS cung cấp layer giữa model và controller bằng cách gọi to_json hoặc as_json cho object/collection ActiveRecord, trong khi vẫn xuất ra định dạng mà API mong muốn.

Add Gemfile:

Update bundle:

Tạo một serializer cho User model:

Nó sẽ tạo ra file:

mặc định sẽ có sẵn attr :id, thêm attr nếu muốn hiển thị thêm attributes của object/collection ở API như sau:

Phần này khá dài nên mình chia làm 2 phần, hẹn gặp lại các bạn ở phần sau

Nếu có gì thiếu sót hoặc góp ý thêm, bạn đọc hãy cứ comment để mình có thể hoàn thiện hơn nhé. Peace!

Chia sẻ bài viết ngay

Nguồn bài viết : Viblo