diff options
author | GitLab Bot <gitlab-bot@gitlab.com> | 2020-05-20 14:34:42 +0000 |
---|---|---|
committer | GitLab Bot <gitlab-bot@gitlab.com> | 2020-05-20 14:34:42 +0000 |
commit | 9f46488805e86b1bc341ea1620b866016c2ce5ed (patch) | |
tree | f9748c7e287041e37d6da49e0a29c9511dc34768 /doc/development/api_styleguide.md | |
parent | dfc92d081ea0332d69c8aca2f0e745cb48ae5e6d (diff) | |
download | gitlab-ce-9f46488805e86b1bc341ea1620b866016c2ce5ed.tar.gz |
Add latest changes from gitlab-org/gitlab@13-0-stable-ee
Diffstat (limited to 'doc/development/api_styleguide.md')
-rw-r--r-- | doc/development/api_styleguide.md | 18 |
1 files changed, 7 insertions, 11 deletions
diff --git a/doc/development/api_styleguide.md b/doc/development/api_styleguide.md index 78e35023766..e9a41e7ec58 100644 --- a/doc/development/api_styleguide.md +++ b/doc/development/api_styleguide.md @@ -1,6 +1,6 @@ -# API styleguide +# API style guide -This styleguide recommends best practices for API development. +This style guide recommends best practices for API development. ## Instance variables @@ -9,7 +9,7 @@ to access them as we do in Rails views), local variables are fine. ## Entities -Always use an [Entity] to present the endpoint's payload. +Always use an [Entity](https://gitlab.com/gitlab-org/gitlab/blob/master/lib/api/entities) to present the endpoint's payload. ## Documentation @@ -29,7 +29,7 @@ for a good example): - If the endpoint is deprecated, and if so, when will it be removed - `params` for the method parameters. This acts as description, - [validation, and coercion of the parameters] + [validation, and coercion of the parameters](https://github.com/ruby-grape/grape#parameter-validation-and-coercion) A good example is as follows: @@ -100,13 +100,13 @@ Model.create(foo: params[:foo]) ## Using HTTP status helpers -For non-200 HTTP responses, use the provided helpers in `lib/api/helpers.rb` to ensure correct behaviour (`not_found!`, `no_content!` etc.). These will `throw` inside Grape and abort the execution of your endpoint. +For non-200 HTTP responses, use the provided helpers in `lib/api/helpers.rb` to ensure correct behavior (`not_found!`, `no_content!` etc.). These will `throw` inside Grape and abort the execution of your endpoint. For `DELETE` requests, you should also generally use the `destroy_conditionally!` helper which by default returns a `204 No Content` response on success, or a `412 Precondition Failed` response if the given `If-Unmodified-Since` header is out of range. This helper calls `#destroy` on the passed resource, but you can also implement a custom deletion method by passing a block. ## Using API path helpers in GitLab Rails codebase -Because we support [installing GitLab under a relative URL], one must take this +Because we support [installing GitLab under a relative URL](../install/relative_url.md), one must take this into account when using API path helpers generated by Grape. Any such API path helper usage must be in wrapped into the `expose_path` helper call. @@ -121,10 +121,6 @@ For instance: The [internal API](./internal_api.md) is documented for internal use. Please keep it up to date so we know what endpoints different components are making use of. -[Entity]: https://gitlab.com/gitlab-org/gitlab/blob/master/lib/api/entities -[validation, and coercion of the parameters]: https://github.com/ruby-grape/grape#parameter-validation-and-coercion -[installing GitLab under a relative URL]: https://docs.gitlab.com/ee/install/relative_url.html - ## Avoiding N+1 problems In order to avoid N+1 problems that are common when returning collections @@ -146,7 +142,7 @@ data](https://gitlab.com/gitlab-org/gitlab/blob/19f74903240e209736c7668132e6a5a7 for `Todo` _targets_ when returned in the Todos API. For more context and discussion about preloading see -[this merge request](https://gitlab.com/gitlab-org/gitlab-foss/merge_requests/25711) +[this merge request](https://gitlab.com/gitlab-org/gitlab-foss/-/merge_requests/25711) which introduced the scope. ### Verifying with tests |