Grape api rails .

Giới thiệu và cài đặt .

  • Như các bạn đã biết hiện nay api là rất phổ biến trong lĩnh vực lập trình website . Hiểu nôn na rằng nó cho phép phần mềm này dao tiếp và tận dụng phần mềm khác một cách linh hoạt . Bài viết này tôi sẽ trình bày xây dựng một ứng dụng api đơn giản với rails và sử dụng gem "grape" .
  • Một giao diện lập trình ứng dụng (tiếng Anh Application Programming Interface hay API) là một giao diện mà một hệ thống máy tính hay ứng dụng cung cấp để cho phép các yêu cầu dịch vụ có thể được tạo ra từ các chương trình máy tính khác, và/hoặc cho phép dữ liệu có thể được trao đổi qua lại giữa chúng. Chẳng hạn, một chương trình máy tính có thể (và thường là phải) dùng các hàm API của hệ điều hành để xin cấp phát bộ nhớ và truy xuất tập tin. Nhiều loại hệ thống và ứng dụng hiện thực API, như các hệ thống đồ họa, cơ sở dữ liệu, mạng, dịch vụ web, và ngay cả một số trò chơi máy tính. Đây là phần mềm hệ thống cung cấp đầy đủ các chức năng và các tài nguyên mà các lập trình viên có thể rút ra từ đó để tạo nên các tính năng giao tiếp người- máy như: các trình đơn kéo xuống, tên lệnh, hộp hội thoại, lệnh bàn phím và các cửa sổ. Một trình ứng dụng có thể sử dụng nó để yêu cầu và thi hành các dịch vụ cấp thấp do hệ điều hành của máy tính thực hiện.

Trong bài viết này tôi sẽ tạo api cho một ứng dụng rails đơn giản . Đầu tiên thêm gem 'grape' vào trong Gemfile của bạn và bundle install

Grape

Trong file routes.rb bạn chỉ cần cấu hình lại như sau .

Rails.application.routes.draw do
  ....
  mount Session::Login => "/api"
  # For details on the DSL available within this file, see http://guides.rubyonrails.org/routing.html
end

Tôi sẽ tạo thư mục : app/api/session/login.rb

module Session
  class Login < Grape::API 
  version 'v1', using: :path
    format :json
    rescue_from :all

    resource :index do
     get :index_user do
        User.all
     end
    end
    # Lấy dữ liệu từ database ..
    resource :search do
      get ':term' do
        params[:term] !=nil ?  @user =  User.where("email like '%" +params[:term]+"%'") : error!({status_code: 500,
          content: "Not Found user"}, 400)
      end
    end
    # Tìm kiếm user theo email
    

Và giờ bạn có thể truy cập : http://localhost:3000/api/index/index_user . Để xem kết quả . Bạn có thể dùng Postman để truy cập chương trình sẽ ra danh sách toàn bộ users. . Vậy là ứng dụng của bạn đã xây dựng thành công rồi , tuy nhiên khi tạo ra các ứng dụng bạn không muốn một số người có thể sử dụng nó cụ thể là bạn muốn xác nhận thông tin người dùng trước khi họ sử dụng ứng dụng của bạn.

Doorkeeper

Để giải quyết vấn đề này tôi sử dụng thêm gem 'doorkeeper' vào ứng dụng của mình . Gem này cho phép bạn xác nhận người dùng và trả ra một chuỗi token khi người dùng đăng nhập vào hệ thống . Bạn thêm gem 'doorkeeper' vào trong Gemfile của bạn và bundle install Trong routes.rb

Rails.application.routes.draw do
  use_doorkeeper
  ....
  mount Session::Login => "/api"
  # For details on the DSL available within this file, see http://guides.rubyonrails.org/routing.html
end

Trong app/api/session/login.rb thêm :

require 'doorkeeper/grape/helpers'
module Session
  class Login < Grape::API

    helpers Doorkeeper::Grape::Helpers
    before do
      doorkeeper_authorize!
    end

Khi login thì chúng ta sử dụng api sau để lấy access_token:

curl -F grant_type=password \
-F [email protected] \
-F password=11111111 \
-X POST http://localhost:3000/oauth/token

Trong đó params truyền vào email , password và trường grant_type : "password" là bắt buộc . Kết quả :

{"access_token":"f9fbdec2b5e15d7feddd0f57ef53c3faa80385385e11275ec4977f247aa83521","token_type":"bearer","expires_in":7200,"created_at":1472399786}

Kết

Trên đây chỉ là một ví dụ nhỏ về api . Hi vọng bài viết sẽ giúp ích phần nào cho các bạn trong việc phát triển ứng dụng của mình . Link demo GITHUB: https://github.com/tranduytung99/app_api


All Rights Reserved