1 unstable release

0.0.3 Oct 4, 2024
0.0.2 Oct 2, 2024
0.0.1 Oct 1, 2024
0.0.0 Sep 30, 2024

#1241 in Web programming

Apache-2.0

135KB
2.5K SLoC

Apisix admin Rust client

⚡ Maintained by ⚡

A straightforward Apisix admin client library.

Introduction

This library implements the Apisix Admin interface Reference API.

Apisix API Version: 3.10

Status

Under development!

Documentation

Apisix Getting Started

Apisix Local Dev

The script starts two Docker containers, apisix-quickstart and etcd. APISIX uses etcd to save and synchronize configurations. Both the etcd and the APISIX use host Docker network mode. That is, the APISIX can be accessed from local.

curl -sL https://run.api7.ai/apisix/quickstart | sh

Build

cargo build

Tests

cargo test

Documentation

cargo doc --no-deps --open

Example Client

See the examples folder for a simple example client. To create an SmartID account, download the app:

The example application goes through the following use cases:

  • Verify Certificate Existence
  • SmartID Authentication
  • SmartID Digital Signature

The example is using a MOCK ID to simulate the SmartID user.

cargo run --example smart_id_client

Configuration

Default values are provided and targets the TEST environment of Smart ID. The required environment variables used:

ENV_VAR DESCRIPTION REQUIRED
HOST_URL The host address of the Smart ID Service Y
RELYING_PARTY_UUID The UUID assigned to the Relying-party - provided by Smart ID Y
RELYING_PARTY_NAME The unique name assigned to the Relying-Party - provided by Smart ID Y
CLIENT_REQ_NETWORK_TIMEOUT_MILLIS The timeout for the REST client when requesting Smart ID Services N - default ()
CLIENT_REQ_MAX_ATTEMPTS The maximum attempts for the REST client retry mechanism
CLIENT_REQ_DELAY_SECONDS_BETWEEN_ATTEMPTS The wait time between consecutive REST client requests
ENABLE_POLLING_BY_LIB Enable automatic polling (when false - polling MUST be implemented by callee

Plugins implemented

  • consumer-restriction
  • apikey
  • limit-count
  • proxy-rewrite
  • authz-keycloak
  • redirect
  • openid-connect
  • cors
  • serverless
  • forward-auth

TODO

This library started with basic CRUD operations for Apisix resources mostly used in projects. Is does not (yet) implement the full API, but feel free to contribute.

  • Implement the control API endpoints
  • Response object mapping to Rust Structs (mostly returned as JSON value)
  • Upstream: Update Upstream builder: add pass_host, upstream_host, health_check, hash_on key, labels, tls, keepalive
  • Upstream: patch use cases
  • Service: patch use cases
  • Route: patch use cases
  • Missing Plugins (only adding plugins used, but feel free to extend))
  • Long list of plugins to implement

Remarks

Read the conventions upon ID Syntax:

ID Syntax

This library assumes that all Apisix resources are created with a unique ID. The ID is a string that is unique within the scope of the resource type. The ID is used to identify the resource in the Apisix Admin API. The ID must be a string literal, integer literals are not supported yet (both are possible in Apisix).

Examples

Run the examples: In case you need debug logs:

RUST_LOG=info,apisix_admin=debug,apisix_plugins=debug cargo run --example apisix-admin

Admin Resources examples:

cargo run --example apisix-admin

Plugin examples:

cargo run --example apisix-plugins

Dependencies

~13–26MB
~381K SLoC