Grape api rails .
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 ...
- 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
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.
Để 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=test@gmail.com -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}
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