Skip to main content
Version: v3.0

REST API

The Rhino REST API is generated from the resource definitions in the application.

A description of the API is available at /api/info/models, for instance: http://localhost:3002/api/info/models

This is the output the description of all resources.

Controllers​

By default Resources will use the default controller for Resources, Rhino::CrudController,, but this can be altered

class Blog < ApplicationRecord
rhino_controller :simple
end

Built In Controllers​

Rhino::BaseController​

Base for others to inherit from that provides basic initialization, error handling, pundit and cors

Rhino::CrudController​

Provides basic CRUD actions (index, show, create, update, destroy) and enforces policy authorization, scoping and parameratization as well as sieve support

Rhino::SimpleController​

Maps an action to a method on the Resource itself. Enforces policy authorization but nothing else.

Parameters​

Parameters are what is accepted or returned from the API as properties for the Resource. Parameters by default reflect the properties of a resource, but can be overwritten by the resource itself or policies.

Reference parameters​

Importantly references are returned as an embedded object of a resource, directly in the case of a one relationship and in an array in the case of a many relationship. For instance:

// BlogPost
{
id: 323,
title: "My post",
blog: {
id: 6,
name: "Super Blog"
}
}

However when setting a reference parameter, use the identifier property (ie the foreign key) as the parameter.

// BlogPost
{
id: 323,
title: "My post",
blog: 7
}

Nested support​

Resources with many references resources can accepted "nested" . With active record based resources this is handled automatically if accepts_nested_attributes_for is configured on the model.

Properties vs Parameters​

Properties are part of the data model of the Resource, while parameters are what the REST API will accept and return for a Resource. They can be different.

Sieves​

Querying resources on index API endpoints is implemented with sieves. Sieves are an ordered stack of actions applied based on URL parameters.

There is a default set of sieves, but they can be altered on a per resource basis. For instance this:

class Blog < ApplicationRecord
rhino_sieves.swap Rhino::Sieve::Limit, Rhino::Sieve::Limit, default_limit: nil
end

would remove the default limit of 10 from the index endpoint for blogs.

Rhino::Sieve::Filter​

Filter based on properties, including properties of referenced resources read more.

Rhino::Sieve::Limit​

Limit the number of resources returned - useful for pagination read more.

Rhino::Sieve::Offset​

Offset from start of the results - useful for pagination read more.

Rhino::Sieve::Order​

Sorting of the results read more.

Rhino::Sieve::Search​

Full text contains searching http://localhost:3002/api/blog_posts?title=heart