Skip to content

openziti/edge-api

Edge APIs

This repository contains the Open API 2.0 specification for the OpenZiti Edge Client and Management REST APIs. It also contains a generated go module, in the rest_* directories that can be used to develop against OpenZiti Controllers.

Versioning

Versioning of the APIs in this repository are independent of the OpenZiti releases created in the ziti repository. Many versions of these API specifications are compatible with multiple versions of the OpenZiti release versions. To make it somewhat intuitive, the minor version number of the API is the minimum minor version of the ziti repository releases that this API is compatible with. It will also be compatible up until the next minor version of the specifications. Patch versions are used for internal fixes and release tags.

For simplicity each controller hosts the specification version they expect and may be used instead of this repository for live deployments.

Client & Server Generation

The root level client.yml and management.yml files are generated from the source directory. There are scripts within the script directory that will do the heavy lifting of re-generating them if needed.Both scripts require that the swagger executable be available on your path environment variable. Releases of it are available in the GitHub Go-Swagger repository. Avoid release 0.30 for now because it has a bug. 0.29 works.

#bash
./scripts/generate_rest.sh
#powershell
./scripts/generate_rest.ps1

Using the generated go module

Within the go module within the go directory is a submodule named rest_util with contains helper functions for using its sibling *_client submodules. This package is not generated. See rest_util/examples for full examples.

Example:

func main() {
	ctrlAddress := "https://localhost:1280"
	caCerts, err := rest_util.GetControllerWellKnownCas(ctrlAddress)

	if err != nil {
		log.Fatal(err)
	}

	caPool := x509.NewCertPool()

	for _, ca := range caCerts {
		caPool.AddCert(ca)
	}

	ok, err := rest_util.VerifyController(ctrlAddress, caPool)

	if err != nil {
		log.Fatal(err)
	}

	if !ok {
		log.Fatal("controller failed CA validation")
	}

	client, err := rest_util.NewEdgeManagementClientWithUpdb("admin", "admin", ctrlAddress, caPool)

	if err != nil {
		log.Fatal(err)
	}

	params := &identity.ListIdentitiesParams{
		Context: context.Background(),
	}

	resp, err := client.Identity.ListIdentities(params, nil)

	if err != nil {
		log.Fatal(err)
	}

	println("\n=== Identity List ===")
	for _, identityItem := range resp.GetPayload().Data {
		println(*identityItem.Name)
	}
}