Skip to content

raskell-io/sentinel-agent-api-deprecation

Folders and files

NameName
Last commit message
Last commit date

Latest commit

 

History

12 Commits
 
 
 
 
 
 
 
 
 
 
 
 
 
 

Repository files navigation

Sentinel API Deprecation Agent

An API lifecycle management agent for Sentinel that helps you gracefully deprecate and sunset API endpoints.

Features

  • RFC-Compliant Headers: Adds standard Deprecation and Sunset (RFC 8594) headers
  • Usage Tracking: Prometheus metrics for monitoring deprecated endpoint usage
  • Flexible Actions: Warn, redirect, or block deprecated endpoints
  • Automatic Redirects: Redirect old endpoints to new versions with query preservation
  • Migration Support: Include documentation links in deprecation notices
  • Glob Patterns: Match multiple endpoints with glob-style patterns

Installation

Using Cargo

cargo install sentinel-agent-api-deprecation

From Source

git clone https://github.com/raskell-io/sentinel-agent-api-deprecation
cd sentinel-agent-api-deprecation
cargo build --release

Quick Start

  1. Create a configuration file api-deprecation.yaml:
endpoints:
  - id: legacy-users-api
    path: /api/v1/users
    methods: [GET, POST]
    status: deprecated
    sunset_at: "2025-06-01T00:00:00Z"
    replacement:
      path: /api/v2/users
    documentation_url: https://docs.example.com/migration
    action:
      type: warn
  1. Add to your Sentinel configuration:
agents {
    api-deprecation socket="/tmp/sentinel-api-deprecation.sock"
}
  1. Start the agent:
sentinel-agent-api-deprecation -c api-deprecation.yaml

Configuration

Deprecated Endpoints

Each deprecated endpoint supports:

Field Type Description
id string Unique identifier for the endpoint
path string Path pattern (supports globs like /api/v1/*)
methods list HTTP methods to match (empty = all)
status enum deprecated, scheduled, or removed
deprecated_at datetime When the endpoint was deprecated
sunset_at datetime When the endpoint will be removed
replacement object Replacement endpoint info
documentation_url string Link to migration guide
message string Custom deprecation message
action object What to do when accessed
track_usage bool Track usage metrics (default: true)

Actions

Warn (default): Allow the request but add deprecation headers

action:
  type: warn

Redirect: Redirect to the replacement endpoint

action:
  type: redirect
  status_code: 308  # Permanent redirect

Block: Return an error response

action:
  type: block
  status_code: 410  # Gone

Custom: Return a custom response

action:
  type: custom
  status_code: 403
  body: '{"error": "This API version is no longer available"}'
  content_type: application/json

Replacement Info

replacement:
  path: /api/v2/users
  preserve_query: true  # Preserve query string in redirects
  method: POST         # Optional: if the method changed

Global Settings

settings:
  deprecation_header: Deprecation      # Header name
  sunset_header: Sunset                # Header name
  link_header: Link                    # Header name for docs/replacement
  notice_header: X-Deprecation-Notice  # Header for human-readable message
  include_headers: true                # Add headers to responses
  past_sunset_action: warn             # warn, block, or redirect
  log_access: true                     # Log deprecated endpoint access

Response Headers

When an endpoint is deprecated, the following headers are added:

Deprecation: @1704067200
Sunset: Sat, 01 Jun 2025 00:00:00 GMT
Link: <https://docs.example.com/migration>; rel="deprecation", </api/v2/users>; rel="successor-version"
X-Deprecation-Notice: This endpoint (/api/v1/users) is deprecated and will be removed on 2025-06-01. Please migrate to /api/v2/users.

Metrics

The agent exposes Prometheus metrics for monitoring:

Metric Type Description
sentinel_api_deprecation_requests_total counter Total requests to deprecated endpoints
sentinel_api_deprecation_redirects_total counter Total redirects performed
sentinel_api_deprecation_blocked_total counter Total blocked requests
sentinel_api_deprecation_days_until_sunset gauge Days until endpoint sunset
sentinel_api_deprecation_request_duration_seconds histogram Request duration

Enable metrics server:

sentinel-agent-api-deprecation --metrics --metrics-port 9090

CLI Options

sentinel-agent-api-deprecation [OPTIONS]

Options:
  -c, --config <PATH>        Configuration file [default: api-deprecation.yaml]
  -s, --socket <PATH>        Unix socket path [default: /tmp/sentinel-api-deprecation.sock]
  -L, --log-level <LEVEL>    Log level [default: info]
      --print-config         Print default configuration
      --validate             Validate configuration and exit
      --metrics              Enable metrics server
      --metrics-port <PORT>  Metrics server port [default: 9090]
  -h, --help                 Print help
  -V, --version              Print version

Use Cases

Gradual API Migration

Track usage of v1 endpoints while migrating clients to v2:

endpoints:
  - id: users-v1
    path: /api/v1/users
    status: deprecated
    sunset_at: "2025-06-01T00:00:00Z"
    replacement:
      path: /api/v2/users
    action:
      type: warn

Immediate Redirect

Force clients to use the new endpoint:

endpoints:
  - id: old-auth
    path: /auth/login
    status: deprecated
    replacement:
      path: /api/v2/auth/login
      preserve_query: true
    action:
      type: redirect
      status_code: 308

Removed Endpoint

Return 410 Gone for completely removed endpoints:

endpoints:
  - id: legacy-api
    path: /legacy/*
    status: removed
    documentation_url: https://docs.example.com/sunset-notice
    action:
      type: block
      status_code: 410

License

Apache-2.0