xây dựng hệ thống API trên Rails với công cụ Grape API và Grape-Entity (phần 1)
đây là một bài viết được viết dựa theo bài viết dưới đây: https://medium.com/@clementrollon/build-a-basic-api-with-grape-api-grape-entity-part-1-5d5fa1cf38db Ý chính của bài viết là xây dựng một hệ thống API đơn giản trên Ruby on Rails bằng công cụ Grape và Grape-Entity Chúng ta sẽ thử xây dựng ...
đây là một bài viết được viết dựa theo bài viết dưới đây: https://medium.com/@clementrollon/build-a-basic-api-with-grape-api-grape-entity-part-1-5d5fa1cf38db
Ý chính của bài viết là xây dựng một hệ thống API đơn giản trên Ruby on Rails bằng công cụ Grape và Grape-Entity
Chúng ta sẽ thử xây dựng một hệ thống quản lý Book Store bằng Api.
Xây dựng hệ thống
Đầu tiên, chúng ta cần xây dựng hệ thống model và controller trước
rails g model Book isbn:integer title stock:integer rails g controller Books rails g model Flow previousStock:integer neStock:integer book:references rails g controler Flows
sau đó ta sẽ chạy lệnh để build Database
rails db:migrate
tiếp theo chúng ta cần phải add relationship cho Book và Flow, chúng ta thêm has_many: flows vào trong file model Book.rb
Add Gems
Tiếp sau đây là 4 Gem cần thiết để chúng ta build API
Grape: nó là một `micro framework` được xây dựng giống như REST với mục địch là cung cấp DSL đơn giản để dễ dàng truy cập vào các API. Hiện tại nó đã hỗ trợ rất nhiều các quy ước chung và định dạng
Grape-Entity: là một hệ thống tập trung các API, cho phép truy cập bất kì chỗ nào trong cơ sử dữ liệu và đưa ra những thông tin muốn hiển thị
Grape On Rails Routes: đây là một Gem vô cùng hữu ích để xây dựng `routes` cho API
Faker: đây là một Gem hỗ trợ để tạo dữ liệu mẫu rất tiện lợi
Chúng ta sẽ faker dữ liệu trong DB
sau khi chúng ta cài đặt gem Faker chúng ta có thể add thêm đoạn dưới đây vào file seed.rb để tự tạo dữ liệu:
15.times do Book.create!(isbn: Faker::Number.number(4), title: Faker::Superhero.power, stock: Faker::Number.between(2, 19)) end book_ids = Book.ids 95.times do Flow.create!(book_id: book_ids.sample, newStock: Faker::Number.between(2, 15), previousStock: Faker::Number.between(2, 15)) end
sau đó chúng ta chạy lệnh sau trên màn hình command:
rake db:seed
Bây giờ chúng ta bắt đầu xây dựng API
chúng ta sẽ thêm đoạn dưới đây để gọi các API sẽ viết thông qua file application.rb.
config.paths.add File.join(‘app’, ‘api’), glob: File.join(‘**’, ‘*.rb’) config.autoload_paths += Dir[Rails.root.join(‘app’, ‘api’, ‘*’)]
bây giờ chúng ta sẽ viết thử API đầu tiên: đầu tiên chúng ta tạo file book_store trong file api bằng lệnh dưới đây:
mkdir -p app/api/book_store
chúng ta tạo file base.rb trong file book_store
touch app/api/book_store/base.rb
chúng ta thêm dữ liệu vào base.rb giống như dưới đây:
module BookStore class Base < Grape::API mount BookStore::V1::Books end end
Route
giờ chúng ta đã có file thư mực api, giờ làm sao để chúng ta điều hướng đến file đó, chúng ta sẽ thêm đoạn dưới đây vào file routes.rb
mount BookStore::Base => '/'
Tạo method đầu tiên
mkdir -p app/api/book_store/v1 touch app/api/book_store/v1/books.rb
và chung ta ghi đoạn code sau vào trong fiel books.rb:
module BookStore module V1 class Books < Grape::API version 'v1', using: :path format :json prefix :api resource :books do desc 'Return list of books' get do books = Book.all present books end end end end end
Chúng ta nên nhớ rằng xây dựng hệ thống Api cũng tương tự như xây dựng hệ thống App thông thường
một vài giải thích sơ bộ dưới đây:
version ‘v1’, using: :path : chỉ định version của Api này là v1
format :json : chỉ định đầu ra là json prefix :api : chỉ định tiền tố trong đường link là /api/
resource :books : thể hiện là chúng ta sử dụng routes là books
desc ‘Return list of books’ : Mô tả về những gì đang làm và mong đợi trả ra
get do …end : đây là một hàm trả về thông thường
Bước cuối cùng
trước khi chạy bạn nên check lại routes xem có ổn không bằng lệnh dưới đây:
rails grape:routes
nó sẽ trả về kết quả dưới đây:
GET | /api/:version/books(.json) | v1 | Return list of books
Giờ chúng ta đã tạo xong API đầu tiên, hãy tự tận hưởng nó bằng cách vào đường link dươi đây:
[http://localhost:3000/api/v1/books](http://localhost:3000/api/v1/books)
Kết luận:
Vậy là chúng ta đã hoàn thành xây dựng một hệ thống API nhỏ vô cùng đơn giản với grape và grape-entity, và ở phần tiếp theo chúng ta sẽ đến với cách làm thể nào để hiện thị thông tin chi tiết của books
Xin cảm ơn và hẹn gặp lại các bạn