Skip to content
Snippets Groups Projects
Verified Commit c1dd1795 authored by Rémy Coutable's avatar Rémy Coutable
Browse files

Move the Grape DSL part from Doc styleguide to API styleguide


Also improve API styleguide

Signed-off-by: default avatarRémy Coutable <remy@rymai.me>
parent b2c771f4
No related branches found
No related tags found
1 merge request!6864Add an API styleguide
Pipeline #
Loading
@@ -2,6 +2,47 @@
Loading
@@ -2,6 +2,47 @@
   
This styleguide recommends best practices for the API development. This styleguide recommends best practices for the API development.
   
## Instance variables
Please do not use instance variables, there is no need for them (we don't need
to access them as we do in Rails views), local variables are fine.
## Entities
Always use an [Entity] to present the endpoint's payload.
## Methods and parameters description
Every method must be described using the [Grape DSL](https://github.com/ruby-grape/grape#describing-methods)
(see https://gitlab.com/gitlab-org/gitlab-ce/blob/master/lib/api/environments.rb
for a good example):
- `desc` for the method summary. You should pass it a block for additional
details such as:
- The GitLab version when the endpoint was added
- If the endpoint is deprecated, and if yes when will it be removed
- `params` for the method params. This acts as description, validation, and
coercion of the parameters
A good example is as follows:
```ruby
desc 'Get all broadcast messages' do
detail 'This feature was introduced in GitLab 8.12.'
success Entities::BroadcastMessage
end
params do
optional :page, type: Integer, desc: 'Current page number'
optional :per_page, type: Integer, desc: 'Number of messages per page'
end
get do
messages = BroadcastMessage.all
present paginate(messages), with: Entities::BroadcastMessage
end
```
## Declared params ## Declared params
   
> Grape allows you to access only the parameters that have been declared by your > Grape allows you to access only the parameters that have been declared by your
Loading
@@ -10,7 +51,7 @@ allowed.
Loading
@@ -10,7 +51,7 @@ allowed.
   
– https://github.com/ruby-grape/grape#declared – https://github.com/ruby-grape/grape#declared
   
### Exclude params from parent namespaces ### Exclude params from parent namespaces!
   
> By default `declared(params) `includes parameters that were defined in all > By default `declared(params) `includes parameters that were defined in all
parent namespaces. parent namespaces.
Loading
@@ -51,8 +92,5 @@ For instance:
Loading
@@ -51,8 +92,5 @@ For instance:
Model.create(foo: params[:foo]) Model.create(foo: params[:foo])
``` ```
   
>**Note:** [Entity]: https://gitlab.com/gitlab-org/gitlab-ce/blob/master/lib/api/entities.rb
Since you [should use Grape's DSL to declare params](doc_styleguide.md#method-description), [parameters validation and
coercion] comes for free!
[parameters validation and coercion]: https://github.com/ruby-grape/grape#parameter-validation-and-coercion [parameters validation and coercion]: https://github.com/ruby-grape/grape#parameter-validation-and-coercion
Loading
@@ -342,12 +342,6 @@ You can use the following fake tokens as examples.
Loading
@@ -342,12 +342,6 @@ You can use the following fake tokens as examples.
Here is a list of must-have items. Use them in the exact order that appears Here is a list of must-have items. Use them in the exact order that appears
on this document. Further explanation is given below. on this document. Further explanation is given below.
   
- Every method must be described using [Grape's DSL](https://github.com/ruby-grape/grape/tree/v0.13.0#describing-methods)
(see https://gitlab.com/gitlab-org/gitlab-ce/blob/master/lib/api/environments.rb
for a good example):
- `desc` for the method summary (you can pass it a block for additional details)
- `params` for the method params (this acts as description **and** validation
of the params)
- Every method must have the REST API request. For example: - Every method must have the REST API request. For example:
   
``` ```
Loading
Loading
0% Loading or .
You are about to add 0 people to the discussion. Proceed with caution.
Please register or to comment