Help us shape the future of Go! Take the 2026 Go Developer Survey

restapi

package
v2.9.1 Latest Latest
Warning

This package is not in the latest version of its module.

Go to latest
Published: Oct 26, 2026 License: Apache-2.0 Imports: 52 Imported by: 0

Documentation

Overview

Package restapi 🏹 Archer

# Documentation
Archer is an OpenStack-style API service that privately connects services across [OpenStack Networks](https://docs.openstack.org/neutron/latest/admin/intro-os-networking.html). Consumers pick a *service* from a catalog and **inject** it into their own network — the service becomes reachable through a private IP, without exposing either network to the other.

Archer integrates with *OpenStack Keystone* for authentication and *OpenStack Neutron* for network and port management.

### Concepts
Archer exposes two resource types:

* **Services** — private or public services registered in Archer. They are reached by creating an endpoint.
* **Endpoints** — IP endpoints in a local network that transparently forward to a service living in another private network.

### Features
* Multi-tenant via OpenStack Identity
* OpenStack `policy.json` access policies
* Prometheus exporter
* Rate limiting and CORS
* CADF-compatible audit trail
* Sentry error reporting
* OpenStack-style CLI client (`archerctl`)

### Supported Backends
* **F5 BigIP** — provisioned via the `archer-f5-agent`
* **Network Injection** — the `archer-ni-agent`, using HAProxy inside Linux network namespaces; works alongside `openvswitch-agent` or `linuxbridge-agent`

### Requirements
* PostgreSQL
* OpenStack Keystone
* OpenStack Neutron

## API properties
Archer exposes a RESTful HTTP API.

#### Request / Response format
Requests and responses use JSON. `POST` requests must set `Content-Type: application/json`; responses always come back with `Content-Type: application/json`.

#### Authentication
Archer uses OpenStack Keystone. Requests must include a Keystone token in the `X-Auth-Token` header. Because the project ID is derived from the token, `project_id` is not required on create requests.

#### Pagination
List operations return a bounded number of items. Navigate the collection with URI parameters:

```
?limit=100&marker=1234&page_reverse=False
```

* `marker` — the ID of the last item from the previous page
* `limit` — page size (clamped to the deployment maximum)
* `page_reverse` — reverse pagination direction

Responses include atom `next` and `previous` links. The final forward page has no `next`; the final reverse page has no `previous`. Deployments advertise pagination support through the `pagination` capability on the API detail endpoint.

#### Sorting
Use `sort` with a comma-separated list of keys, in priority order. Prefix a key with `-` to sort descending:

```
?sort=key1,-key2,key3
```

Sort support is advertised through the `sort` capability on the API detail endpoint.

#### Filtering by tags
Most resources (services, endpoints, …) accept tags. Archer supports four tag filters on list operations:

* `tags` — entities that have **all** the given tags
* `tags-any` — entities that have **any** of the given tags
* `not-tags` — entities that do **not** have all of the given tags
* `not-tags-any` — entities that do **not** have any of the given tags

Each tag is limited to 64 characters. Filters can be combined:

```
?tags=red,blue&tags-any=green,orange
```

#### Response Codes (Faults)

| Code  | Description       |
| ----- | ----------------- |
| 400   | Validation error |
| 401   | Unauthorized |
| 403   | Policy denies the action, or the project is over quota |
| 404   | Resource not found |
| 409   | Conflict |
| 422   | Unprocessable Entity |
| 429   | Rate limit exceeded |
| 500   | Internal server error |

## Endpoint identification

Archer supports the Proxy Protocol v2 for endpoint identification.

The Proxy Protocol is a widely used protocol for passing client connection information through a load balancer to the backend server. It is used to identify the original client IP address and port number. The Proxy Protocol v2 is a binary protocol that is more efficient than the original text-based Proxy Protocol v1.

The proxy protocol header also includes the ID of the endpoint. This information is encoded using a custom Type-Length-Value (TLV) vector as follows.

| Field | Length (Octets) | Description                                                    |
| ----- | --------------- | -------------------------------------------------------------- |
| Type  | 1               | PP2_TYPE_SAPCC (0xEC)                                          |
| Length| 2               | Length of the value (UUIDv4 is always 36 byte as ASCII string) |
| Value | 36              | ASCII UUID of the endpoint                                     |

Schemes:
  http
  https
Host: localhost
BasePath: /
Version: 2.7.1
License: Apache 2.0 https://www.apache.org/licenses/LICENSE-2.0.html
Contact: SAP SE / Converged Cloud https://sap.com

Consumes:
  - application/json

Produces:
  - application/json

swagger:meta

Index

Constants

This section is empty.

Variables

View Source
var (
	// SwaggerJSON embedded version of the swagger document used at generation time
	SwaggerJSON json.RawMessage
	// FlatSwaggerJSON embedded flattened version of the swagger document used at generation time
	FlatSwaggerJSON json.RawMessage
)
View Source
var (
	// SwaggerSpec make parsed swaggerspec available globally
	SwaggerSpec *loads.Document
)

Functions

This section is empty.

Types

type Server

type Server struct {
	EnabledListeners []string         `long:"scheme" description:"the listeners to enable, this can be repeated and defaults to the schemes in the swagger spec"`
	CleanupTimeout   time.Duration    `long:"cleanup-timeout" description:"grace period for which to wait before killing idle connections" default:"10s"`
	GracefulTimeout  time.Duration    `long:"graceful-timeout" description:"grace period for which to wait before shutting down the server" default:"15s"`
	MaxHeaderSize    flagext.ByteSize `` /* 231-byte string literal not displayed */

	SocketPath flags.Filename `long:"socket-path" description:"the unix socket to listen on" default:"/var/run/archer.sock"`

	Host         string        `long:"host" description:"the IP to listen on" default:"localhost" env:"HOST"`
	Port         int           `long:"port" description:"the port to listen on for insecure connections, defaults to a random value" env:"PORT"`
	ListenLimit  int           `long:"listen-limit" description:"limit the number of outstanding requests"`
	KeepAlive    time.Duration `` /* 169-byte string literal not displayed */
	ReadTimeout  time.Duration `long:"read-timeout" description:"maximum duration before timing out read of the request" default:"30s"`
	WriteTimeout time.Duration `long:"write-timeout" description:"maximum duration before timing out write of the response" default:"30s"`

	TLSHost           string         `long:"tls-host" description:"the IP to listen on for tls, when not specified it's the same as --host" env:"TLS_HOST"`
	TLSPort           int            `long:"tls-port" description:"the port to listen on for secure connections, defaults to a random value" env:"TLS_PORT"`
	TLSCertificate    flags.Filename `long:"tls-certificate" description:"the certificate to use for secure connections" env:"TLS_CERTIFICATE"`
	TLSCertificateKey flags.Filename `long:"tls-key" description:"the private key to use for secure connections" env:"TLS_PRIVATE_KEY"`
	TLSCACertificate  flags.Filename `long:"tls-ca" description:"the certificate authority file to be used with mutual tls auth" env:"TLS_CA_CERTIFICATE"`
	TLSListenLimit    int            `long:"tls-listen-limit" description:"limit the number of outstanding requests"`
	TLSKeepAlive      time.Duration  `` /* 160-byte string literal not displayed */
	TLSReadTimeout    time.Duration  `long:"tls-read-timeout" description:"maximum duration before timing out read of the request"`
	TLSWriteTimeout   time.Duration  `long:"tls-write-timeout" description:"maximum duration before timing out write of the response"`
	// contains filtered or unexported fields
}

Server for the archer API

func NewServer

func NewServer(api *operations.ArcherAPI) *Server

NewServer creates a new api archer server but does not configure it

func (*Server) ConfigureAPI

func (s *Server) ConfigureAPI()

ConfigureAPI configures the API and handlers.

func (*Server) ConfigureFlags

func (s *Server) ConfigureFlags()

ConfigureFlags configures the additional flags defined by the handlers. Needs to be called before the parser.Parse

func (*Server) Fatalf

func (s *Server) Fatalf(f string, args ...any)

Fatalf logs message either via defined user logger or via system one if no user logger is defined. Exits with non-zero status after printing

func (*Server) GetHandler

func (s *Server) GetHandler() http.Handler

GetHandler returns a handler useful for testing

func (*Server) HTTPListener

func (s *Server) HTTPListener() (net.Listener, error)

HTTPListener returns the http listener

func (*Server) Listen

func (s *Server) Listen() error

Listen creates the listeners for the server

func (*Server) Logf

func (s *Server) Logf(f string, args ...any)

Logf logs message either via defined user logger or via system one if no user logger is defined.

func (*Server) Serve

func (s *Server) Serve() (err error)

Serve the api

func (*Server) SetAPI

func (s *Server) SetAPI(api *operations.ArcherAPI)

SetAPI configures the server with the specified API. Needs to be called before Serve

func (*Server) SetHandler

func (s *Server) SetHandler(handler http.Handler)

SetHandler allows for setting a http handler on this server

func (*Server) Shutdown

func (s *Server) Shutdown() error

Shutdown server and clean up resources

func (*Server) TLSListener

func (s *Server) TLSListener() (net.Listener, error)

TLSListener returns the https listener

func (*Server) UnixListener

func (s *Server) UnixListener() (net.Listener, error)

UnixListener returns the domain socket listener

Directories

Path Synopsis

Jump to

Keyboard shortcuts

? : This menu
/ : Search site
f or F : Jump to
y or Y : Canonical URL