repia
Rails Essential Plug-in for API (or repia) is a Rails plugin that serves as a collection of features that are useful for RESTful API development.
Install
Add gem 'repia'
to your project Gemfile
.
How to Use Repia
Edit application_controller.rb
as the following:
class ApplicationController < Repia::Controller::Base
end
This will allow all controllers in the project to inherit from
Repia::BaseController
, which gracefully handles all code errors using
pre-defined HTTP errors.
Next, update all models that need UUID as a primary identifier:
class Something < ActiveRecord::Base
include Repia::Support::UUIDModel
end
This will trigger UUID generation before a record object is created. Note that migration must look similar to this:
class CreateSomethings < ActiveRecord::Migration[5.0]
def change
create_table :somethings, id: false do |t|
t.string :uuid, primary_key: true, null: false
t.string :name
t. null: false
end
end
end
Middleware
When developing a JSON API, it is annoying to see non-JSON error responses
from a middleware. There are two prominent cases: 405 Method Not Allowed
and 404 Not Found
. The former occurs when the request method is invalid
and the latter happens when the route does not match any controller or
action. Since these are caught within middleware, rescue_from
does not
really help. So repia provides two useful components for this.
Method Not Allowed
This class is a middleware that can be inserted (preferrably after
ActionDispatch::RequestId
) to catch 405 errors. Instead of using a view
template, it will return a simple JSON response with a status of 405.
Routing Error
Routing errors can be caught using Repia::Controller::Base#exceptions_app
. To
configure it, add this to config/application.rb
:
config.exceptions_app = lambda {|env| ApplicationController.action(:exceptions_app).call(env)}
NOTE: To enable this feature in development and in test,
config/environments/development.rb
and config/environments/test.rb
must
have
config.consider_all_requests_local = false