Traits are a way to register common functionality across your entire API, and apply them across different resource and action definitions.
Declaring a Trait
Traits are defined and registered through the ApiDefinition singleton. A trait definition requires a globally unique name and a block of DSL elements. The block is used to
instantiate an instance of the
Trait class that is registered on the
ApiDefinition singleton with the given name.
The first example creates a trait named
data_range which defines two incoming
end_at. If you write an action that uses this
trait, it would be as if you had added this params block directly to your
The second example creates a trait named
authenticated. All it does is define
a header named
Auth-Token for you to use in your actions.
Using a Trait
To use a trait, call the
trait method from within your action or resource
definition, and pass the name of the trait you want to use.
In this case, all actions in the
Blogs resource definition will have the
Auth-Token header defined. The
index action will have
:end_at params defined. You can think of
trait :trait_name as a cut-and-paste
mechanism which allows you to reuse common snippets of design-time code.