REST — RESTful GNUnet Web APIs#

Todo

Define REST

Using the REST subsystem, you can expose REST-based APIs or services. The REST service is designed as a pluggable architecture. To create a new REST endpoint, simply add a library in the form “plugin_rest_*”. The REST service will automatically load all REST plugins on startup.

Configuration

The REST service can be configured in various ways. The reference config file can be found in src/rest/rest.conf:

[rest]
REST_PORT=7776
REST_ALLOW_HEADERS=Authorization,Accept,Content-Type
REST_ALLOW_ORIGIN=*
REST_ALLOW_CREDENTIALS=true

The port as well as CORS (cross-origin resource sharing) headers that are supposed to be advertised by the rest service are configurable.

Namespace considerations#

The gnunet-rest-service will load all plugins that are installed. As such it is important that the endpoint namespaces do not clash.

For example, plugin X might expose the endpoint “/xxx” while plugin Y exposes endpoint “/xxx/yyy”. This is a problem if plugin X is also supposed to handle a call to “/xxx/yyy”. Currently the REST service will not complain or warn about such clashes, so please make sure that endpoints are unambiguous.

Endpoint documentation#

This is WIP. Endpoints should be documented appropriately. Preferably using annotations.