= Gerrit Code Review - REST API Developers' Notes

This document is about developing the REST API.  For details of the
actual APIs available in Gerrit, please see the
link:rest-api.html[REST API interface reference].


== Testing REST API Functionality


=== Basic Testing

Basic testing of REST API functionality can be done with `curl`:

----
  curl http://localhost:8080/path/to/api/
----

By default, `curl` sends `GET` requests.  To test APIs with `PUT`, `POST`,
or `DELETE`, an additional argument is required:

----
 curl -X PUT http://localhost:8080/path/to/api/
 curl -X POST http://localhost:8080/path/to/api/
 curl -X DELETE http://localhost:8080/path/to/api/
----


=== Sending Data in the Request

Some REST APIs accept data in the request body of `PUT` and `POST` requests.

Test data can be included from a local file:

----
  curl -X PUT -d@testdata.txt --header "Content-Type: application/json" http://localhost:8080/path/to/api/
----

Note that the `-d` option will remove the newlines from the content of the
local file. If the content should be sent as-is then use the `--data-binary`
option instead:

----
  curl -X PUT --data-binary @testdata.txt --header "Content-Type: text/plain" http://localhost:8080/path/to/api/
----


=== Authentication

To test APIs that require authentication, the username and password must be specified on
the command line:

----
 curl --digest --user username:password http://localhost:8080/a/path/to/api/
----

This makes it easy to switch users for testing of permissions.

It is also possible to test with a username and password from the `.netrc`
file (on Windows, `_netrc`):

----
 curl --digest -n http://localhost:8080/a/path/to/api/
----

In both cases, the password should be the user's link:user-upload.html#http[HTTP password].


=== Verifying Header Content

To verify the headers returned from a REST API call, use `curl` in verbose mode:

----
  curl -v -n --digest -X DELETE http://localhost:8080/a/path/to/api/
----

The headers on both the request and the response will be printed.


GERRIT
------
Part of link:index.html[Gerrit Code Review]

SEARCHBOX
---------
