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

images.png

Để 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)

Selection_025.png

Selection_019.png

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ả

Selection_024.png

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

Selection_021.png

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

Gọi link /api/v1/users/1 để thấy kết quả với User có id là 1

Selection_022.png

Ngoài ra thì bạn có thể làm những thứ phức tạp hơn nhiều, nhưng trong bài viết này mình sẽ chỉ đưa ra những ví dụ đơn giản nhất thôi             </div>
            
            <div class=

0