Grape Jsonapi Save

Use jsonapi-serializer with Grape

Project README

CircleCI

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
end

Use render to specify JSONAPI options

get "/" do
  user = User.find("123")
  render user, include: [:account]
end

Use a custom serializer

get "/" do
  user = User.find("123")
  render user, serializer: 'CustomUserSerializer'
end

Or

get "/" do
  user = User.find("123")
  render CustomUserSerializer.new(user).serialized_json
end

Override 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'
# [...]
end

Note that you need the grape-swagger gem for this to work, otherwise it will throw an error.

Credit

Code adapted from grape-jsonapi-resources

Open Source Agenda is not affiliated with "Grape Jsonapi" Project. README Source: EmCousin/grape-jsonapi
Stars
37
Open Issues
4
Last Commit
2 weeks ago
License
MIT

Open Source Agenda Badge

Open Source Agenda Rating