Rails 5 API Mode: Overview
Bài đăng này đã không được cập nhật trong 8 năm
Rails 5 cuối cùng cũng chính thức phát hành, do đó giờ là lúc chúng ta cùng nhìn một cách khái quát về những điều mới mẻ được bổ xung mà chúng ta sẽ sử dụng. Điều đầu tiên nói đến đó là sự sự xuất hiện của Rails 5 API mode - nó cho phép chúng ta xây dựng web API mà không cần phải sử dụng những thứ ngổn ngang mà chúng ta phải include
vào controllers
trước đó.
Web API là gì?
APIs là viết tắt của Application Programming Interfaces - một cách hiểu đơn giản là một giao diện mà qua đó 2 phần mềm có thể giao tiếp với nhau. Ngày nay, khá là phổ biến để xây dựng web APIs và nó được sử dụng như backend cho các ứng dụng mobile hay các ứng dụng JavaScript. Web API hay thường dùng JSON(hoặc XML) thay cho HTML. JSON dễ dàng hiểu và sử dụng đối với một clinet tự động và ngày nay chúng ta dễ dàng bắt gặp ở bất cứ web API nào cũng đều sử dụng.
Nguồn gốc của Rails 5 API mode?
Tính năng này không đến từ đâu mới mẻ và xa lạ, nó thực chất là Rails Api project được tích hợp trong Rails 5.
Sử dụng Rails 5 API mode như thế nào?
Tạo một ứng dụng Rails API-only đơn giản như sau:
rails new my_app --api
Bằng cách sử dụng --api
, ứng dụng tạo ra sẽ tối giản đi middleware, nó cũng không tạo ra views/helpers/assets
và các ApplicationController
thay vì thừa kế từ ActionController::Base
bằng ActionController::API
.
Khai báo sau sẽ được thêm vào file config/application.rb
, và khiến cho ứng dụng trở thành một web API only:
# config/application.rb
module MyApp
class Application < Rails::Application
config.api_only = true
end
end
Và sau đó, bạn sẽ dễ dàng để phát triển ứng dụng khá giống như với một ứng dụng RoR thông thường. Ứng dụng của bạn sẽ không có views
, helpers
hay assets
bởi vì tất cả chúng đã có ở client. Thay bằng view
, bạn có thể sẽ sử dụng một kiểu như serializers
để xây dựng JSON document.
Tại sao sử dụng Rails API mode thay vì Sinatra hoặc Grape?
Mọi người vẫn thường hỏi tại sao sử dụng Rails để xây dựng một web API, hơn là sử dụng cái gì đó nhỏ gọn và đơn giản hơn như Grape hay Sinatra. Trong khi các frameworks có thể đáp ứng để xây dựng các ứng dụng nhỏ, bạn có thể nhanh chóng tìm được những thư viện để sử dụng thêm vào như một ORM, một vài builder, một tính năng auto-reload,.. Và cuối cùng bạn sẽ khiến cho ứng dụng của mình trở thành một ứng dụng Rails khổng lồ được tạo ra từ nhiều thư viện khác nhau. Điều đó thực sự không phải là không tốt. Với cách tiếp cận này, bạn có thể chọn chính xác gem nào để sử dụng. Nhưng quyết định để đi cùng Rails cũng là một sự lựa chọn thích hợp để thay thế khác. Hơn thể nữa, Rails handles rất nhiều những thứ mà bạn có thể sử dụng, và bạn không phải tìm trong một framework nhỏ hơn nào khác(như bảo mật, conditional GETs, caching,..)
Khi nào thì bạn sử dụng Rails API mode?
Bạn chỉ nên sử dụng Rails 5 API mode nếu ứng dụng của bạn là một web API. Điều này có nghĩa là bạn sẽ không gửi bất kì HTML nào, thay vào đó là JSON hoặc XML, những thứ mà client có thể dễ dàng sử và ưa thích sử dụng.
Middleware
Rack middleware là một sự thi hành đầy đủ của pipeline design pattern và khá là nặng nề được sử dụng trong RoR để thi hành trên các request và response objects.
Mặc định, ứng dụng Rails API-only đi cùng với giới hạn của middleware. Điều này có nghĩa là chúng được tối giản đi các chức năng không cần thiết.
Để thêm một middleware khá là đơn giản như thêm một dòng khai báo trong file application.rb
. Ví dụ nếu bạn muốn thêm vào Rack::Deflater vào API:
# config/application.rb
module Alexandria
class Application < Rails::Application
config.api_only = true
config.middleware.use Rack::Deflater
end
end
Để bỏ đi một middleware mặc định nào đó, sử dụng delete
thay vì use
. Ví dụ như
# config/application.rb
module Alexandria
class Application < Rails::Application
config.api_only = true
config.middleware.delete ActionDispatch::Request
end
end
Bạn có thể liệt kê ra danh sách middleware được sử dụng trong ứng dụng của bạn bằng lệnh:
rails middleware
References
All rights reserved