Grape::Jsonapi
Use jsonapi-serializer with Grape.
Installation
Add grape-jsonapi to your Gemfile.
gem 'grape-jsonapi', require: "grape_jsonapi"Usage
Tell your API to use Grape::Formatter::Jsonapi
class API < Grape::API
content_type :jsonapi, "application/vnd.api+json"
formatter :json, Grape::Formatter::Jsonapi
formatter :jsonapi, Grape::Formatter::Jsonapi
endUse render to specify JSONAPI options
get "/" do
user = User.find("123")
render user, include: [:account]
endUse a custom serializer
get "/" do
user = User.find("123")
render user, serializer: 'CustomUserSerializer'
endOr
get "/" do
user = User.find("123")
render CustomUserSerializer.new(user).serialized_json
endOverride metaand links properties
meta and links properties are usually defined per resource within your serializer (here and here)
However, if you need to override those properties, you can pass them as options when rendering your response:
user = User.find("123")
render user, meta: { pagination: { page: 1, total: 42 } }, links: { self: 'https://my-awesome.app.com/users/1' }Model parser for response documentation
When using Grape with Swagger via grape-swagger, you can generate response documentation automatically via the provided following model parser:
# FastJsonapi serializer example
# app/serializers/base_serializer.rb
class BaseSerializer; end
# app/serializers/user_serializer.rb
class UserSerializer < BaseSerializer
include JSONAPI::Serializer
set_type :user
has_many :orders
attributes :name, :email
end
# config/initializers/grape_swagger.rb
GrapeSwagger.model_parsers.register(GrapeSwagger::Jsonapi::Parser, BaseSerializer)
# Your grape API endpoint
desc 'Get current user' do
success code: 200, model: UserSerializer, message: 'The current user'
# [...]
endNote that you need the grape-swagger gem for this to work, otherwise it will throw an error.
Credit
Code adapted from grape-jsonapi-resources