12/08/2018, 14:12
Tạo API đơn giản trong Rails 5
Nếu như trước đây chúng ta sẽ phải tích hợp thêm gem cho ứng dụng của mình để làm API với Ruby (thường thì mình dùng grape), điều này cũng khá là tuyệt vời rồi. Tuy nhiên với ứng dụng chỉ cần tạo JSON API thì có vẻ là có nhiều chức năng sẽ là không cần thiết Rất may là khi Rails 5 ra mắt, người ...
Nếu như trước đây chúng ta sẽ phải tích hợp thêm gem cho ứng dụng của mình để làm API với Ruby (thường thì mình dùng grape), điều này cũng khá là tuyệt vời rồi. Tuy nhiên với ứng dụng chỉ cần tạo JSON API thì có vẻ là có nhiều chức năng sẽ là không cần thiết
Rất may là khi Rails 5 ra mắt, người ta đã tích hợp API vào trong nhân để giúp nhà phát triển có thể tạo ra các ứng dụng chuyên dụng chỉ cho API mà thôi, sẽ không bao gồm view. Nhờ thế là chúng ta sẽ tạo ra được những ứng dụng nhỏ gọn hơn chứ không cồng kềnh như trước
Trong bài viết này mình sẽ giới thiệu qua với mọi người cách tạo ra một ứng dụng API đơn giản trong Rails 5
Để làm việc với Rails 5 thì trước tiên bạn cần phải cài đặt Ruby 2.2.2 trở lên. Ở đây mình sử dụng phiên bản Ruby 2.3.1 và Rails 5.0.0. Bạn có thể xem thêm hướng dẫn cài đặt Rails 5 ở đây
Khi môi trường làm việc đã xong, hãy bắt đầu thôi nào
Đầu tiên chúng ta tạo một ứng dụng mới tên là rails_api
rails new rails_api --api
Có một điểm khác với trước đây là chúng ta đã truyền thêm option --api vào câu lệnh để tạo mới một ứng dụng chỉ làm API. Sau đó (theo bài viết này) sẽ có những xử lý như sau được thực hiện ở phía bên trong
Những middleware tối thiếu để có thể chạy API server sẽ được load.
ApplicationController sẽ thừa kế ActionController::API.
Không thực hiện việc tạo view cũng như asset của generator.
Nếu như trước đây chúng ta sẽ để code API trong thư mục /lib thì bây giờ, chúng ta sẽ code thẳng vào trong /app/controllers luôn
Nhưng trước tiên hãy bundle install để cài đặt gemfile, tạo một model User đơn giản với một vài bản ghi
rails generate model User name:string email:string
Tạo thư mục mới /app/controllers/api/v1 với file users_controller.rb. Thêm vào file config/routes.rb
Rails.application.routes.draw do namespace :api do namespace :v1 do resources :users end end end
Bạn có thể kiểm tra routes bằng lệnh rails routes (trong Rails 5 thì bạn có thể chạy các câu lệnh rake bằng rails)
Code cho controller đơn giản như sau
module Api::V1 class UsersController < Api::V1::ApiController def index render json: User.all end end end
API này sẽ trả về danh sách tất cả users dưới dạng JSON. Chạy server lên và dùng Postman (chắc là ai từng làm API cũng đều biết) gọi đến link /api/v1/users sẽ thấy ngay kết quả
Mặc định thì hệ thống sẽ trả về toàn bộ thông tin. Bạn có thể sửa code một chút với as_json để trả về response những trường mình cần thiết mà thôi (ví dụ chỉ cần trả về :name và :email)
def index render json: { users: User.all.as_json(only: [:name, :email]) } end
Kết quả sẽ như thế này
Bạn cũng có thể thêm vào method show để xem chi tiết của User như sau
def show user = User.find(params[:id]) render json: user.as_json(only: [:id, :name, :email]) end