167 lines
		
	
	
		
			5.5 KiB
		
	
	
	
		
			Plaintext
		
	
	
	
	
	
			
		
		
	
	
			167 lines
		
	
	
		
			5.5 KiB
		
	
	
	
		
			Plaintext
		
	
	
	
	
	
= Gerrit Code Review - REST API
 | 
						|
 | 
						|
Gerrit Code Review comes with a REST like API available over HTTP.
 | 
						|
The API is suitable for automated tools to build upon, as well as
 | 
						|
supporting some ad-hoc scripting use cases.
 | 
						|
 | 
						|
See also: link:dev-rest-api.html[REST API Developers' Notes].
 | 
						|
 | 
						|
== Endpoints
 | 
						|
link:rest-api-access.html[/access/]::
 | 
						|
  Access Right related REST endpoints
 | 
						|
link:rest-api-accounts.html[/accounts/]::
 | 
						|
  Account related REST endpoints
 | 
						|
link:rest-api-changes.html[/changes/]::
 | 
						|
  Change related REST endpoints
 | 
						|
link:rest-api-config.html[/config/]::
 | 
						|
  Config related REST endpoints
 | 
						|
link:rest-api-groups.html[/groups/]::
 | 
						|
  Group related REST endpoints
 | 
						|
link:rest-api-plugins.html[/plugins/]::
 | 
						|
  Plugin related REST endpoints
 | 
						|
link:rest-api-projects.html[/projects/]::
 | 
						|
  Project related REST endpoints
 | 
						|
link:rest-api-documentation.html[/Documentation/]::
 | 
						|
  Documentation related REST endpoints
 | 
						|
 | 
						|
== Protocol Details
 | 
						|
 | 
						|
[[authentication]]
 | 
						|
=== Authentication
 | 
						|
By default all REST endpoints assume anonymous access and filter
 | 
						|
results to correspond to what anonymous users can read (which may
 | 
						|
be nothing at all).
 | 
						|
 | 
						|
Users (and programs) may authenticate by prefixing the endpoint URL with
 | 
						|
`/a/`. For example to authenticate to `/projects/`, request the URL
 | 
						|
`/a/projects/`.
 | 
						|
 | 
						|
By default Gerrit uses HTTP digest authentication with the HTTP password
 | 
						|
from the user's account settings page. HTTP basic authentication is used
 | 
						|
if link:config-gerrit.html#auth.gitBasicAuth[`auth.gitBasicAuth`] is set
 | 
						|
to true in the Gerrit configuration.
 | 
						|
 | 
						|
[[preconditions]]
 | 
						|
=== Preconditions
 | 
						|
Clients can request PUT to create a new resource and not overwrite
 | 
						|
an existing one by adding `If-None-Match: *` to the request HTTP
 | 
						|
headers. If the named resource already exists the server will respond
 | 
						|
with HTTP 412 Precondition Failed.
 | 
						|
 | 
						|
[[output]]
 | 
						|
=== Output Format
 | 
						|
JSON responses are encoded using UTF-8 and use content type
 | 
						|
`application/json`.
 | 
						|
 | 
						|
By default most APIs return pretty-printed JSON, which uses extra
 | 
						|
whitespace to make the output more readable for humans.
 | 
						|
 | 
						|
Compact JSON can be requested by setting the `pp=0` query parameter,
 | 
						|
or by setting the `Accept` HTTP request header to include `application/json`:
 | 
						|
 | 
						|
----
 | 
						|
  GET /projects/ HTTP/1.0
 | 
						|
  Accept: application/json
 | 
						|
----
 | 
						|
 | 
						|
Producing (and parsing) the non-pretty compact format is more efficient,
 | 
						|
so tools should request it whenever possible.
 | 
						|
 | 
						|
To prevent against Cross Site Script Inclusion (XSSI) attacks, the JSON
 | 
						|
response body starts with a magic prefix line that must be stripped before
 | 
						|
feeding the rest of the response body to a JSON parser:
 | 
						|
 | 
						|
----
 | 
						|
  )]}'
 | 
						|
  [ ... valid JSON ... ]
 | 
						|
----
 | 
						|
 | 
						|
Responses will be gzip compressed by the server if the HTTP
 | 
						|
`Accept-Encoding` request header is set to `gzip`. This may
 | 
						|
save on network transfer time for larger responses.
 | 
						|
 | 
						|
[[timestamp]]
 | 
						|
=== Timestamp
 | 
						|
Timestamps are given in UTC and have the format
 | 
						|
"'yyyy-mm-dd hh:mm:ss.fffffffff'" where "'ffffffffff'" represents
 | 
						|
nanoseconds.
 | 
						|
 | 
						|
[[encoding]]
 | 
						|
=== Encoding
 | 
						|
All IDs that appear in the URL of a REST call (e.g. project name, group name)
 | 
						|
must be URL encoded.
 | 
						|
 | 
						|
[[response-codes]]
 | 
						|
=== Response Codes
 | 
						|
The Gerrit REST endpoints use HTTP status codes as described
 | 
						|
in the link:http://www.w3.org/Protocols/rfc2616/rfc2616-sec10.html[
 | 
						|
HTTP specification].
 | 
						|
 | 
						|
In most cases, the response body of an error response will be a
 | 
						|
plaintext, human-readable error message.
 | 
						|
 | 
						|
Here are examples that show how HTTP status codes are used in the
 | 
						|
context of the Gerrit REST API.
 | 
						|
 | 
						|
==== 400 Bad Request
 | 
						|
"`400 Bad Request`" is returned if the request is not understood by the
 | 
						|
server due to malformed syntax.
 | 
						|
 | 
						|
E.g. "`400 Bad Request`" is returned if JSON input is expected but the
 | 
						|
'Content-Type' of the request is not 'application/json' or the request
 | 
						|
body doesn't contain valid JSON.
 | 
						|
 | 
						|
"`400 Bad Request`" is also returned if required input fields are not set or
 | 
						|
if options are set which cannot be used together.
 | 
						|
 | 
						|
==== 403 Forbidden
 | 
						|
"`403 Forbidden`" is returned if the operation is not allowed because the
 | 
						|
calling user does not have sufficient permissions.
 | 
						|
 | 
						|
E.g. some REST endpoints require that the calling user has certain
 | 
						|
link:access-control.html#global_capabilities[global capabilities]
 | 
						|
assigned.
 | 
						|
 | 
						|
"`403 Forbidden`" is also returned if `self` is used as account ID and the
 | 
						|
REST call was done without authentication.
 | 
						|
 | 
						|
==== 404 Not Found
 | 
						|
"`404 Not Found`" is returned if the resource that is specified by the
 | 
						|
URL is not found or is not visible to the calling user. A resource
 | 
						|
cannot be found if the URL contains a non-existing ID or view.
 | 
						|
 | 
						|
==== 405 Method Not Allowed
 | 
						|
"`405 Method Not Allowed`" is returned if the resource exists but doesn't
 | 
						|
support the operation.
 | 
						|
 | 
						|
E.g. some of the `/groups/` endpoints are only supported for Gerrit
 | 
						|
internal groups; if they are invoked for an external group the response
 | 
						|
is "`405 Method Not Allowed`".
 | 
						|
 | 
						|
==== 409 Conflict
 | 
						|
"`409 Conflict`" is returned if the request cannot be completed because the
 | 
						|
current state of the resource doesn't allow the operation.
 | 
						|
 | 
						|
E.g. if you try to submit a change that is abandoned, this fails with
 | 
						|
"`409 Conflict`" because the state of the change doesn't allow the submit
 | 
						|
operation.
 | 
						|
 | 
						|
"`409 Conflict`" is also returned if you try to create a resource but the
 | 
						|
name is already occupied by an existing resource.
 | 
						|
 | 
						|
==== 412 Precondition Failed
 | 
						|
"`412 Precondition Failed`" is returned if a precondition from the request
 | 
						|
header fields is not fulfilled, as described in the link:#preconditions[
 | 
						|
Preconditions] section.
 | 
						|
 | 
						|
==== 422 Unprocessable Entity
 | 
						|
"`422 Unprocessable Entity`" is returned if the ID of a resource that is
 | 
						|
specified in the request body cannot be resolved.
 | 
						|
 | 
						|
GERRIT
 | 
						|
------
 | 
						|
Part of link:index.html[Gerrit Code Review]
 | 
						|
 | 
						|
SEARCHBOX
 | 
						|
---------
 |