Steeltoe icon indicating copy to clipboard operation
Steeltoe copied to clipboard

Actuator endpoints "templated" in hypermedia

Open TimHess opened this issue 3 months ago • 0 comments

Describe the bug

Prior to #1520, every endpoint listed in the response body for /actuator or /cloudfoundryapplication had "templated": false, which was not necessarily accurate since it should indicate whether the endpoint accepts parameters, and some of them do.

The change seems reasonable, but resulted in /loggers disappearing from Spring Boot Admin. I've not seen anywhere else that's affected.

As far as hypermedia goes, it seems like the responses should have additional data (like verb), but Steeltoe is not in control of the standard here, so our options seem to be either reverting to the old behavior or building new functionality to align with Spring's hypermedia response, which effectively duplicates the relevant endpoints (see a response below)

Steeltoe does not currently define named parameters for actuator routes (see the /mappings reponse), so it could get fairly involved to add this feature

This is the relevant portion of an /actuator response from a Spring app:

{
  "_links": {
    "caches-cache": {
      "href": "http://localhost:8080/actuator/caches/{cache}",
      "templated": true
    },
    "caches": {
      "href": "http://localhost:8080/actuator/caches",
      "templated": false
    },
    "health-path": {
      "href": "http://localhost:8080/actuator/health/{*path}",
      "templated": true
    },
    "health": {
      "href": "http://localhost:8080/actuator/health",
      "templated": false
    },
    "configprops": {
      "href": "http://localhost:8080/actuator/configprops",
      "templated": false
    },
    "configprops-prefix": {
      "href": "http://localhost:8080/actuator/configprops/{prefix}",
      "templated": true
    },
    "env": {
      "href": "http://localhost:8080/actuator/env",
      "templated": false
    },
    "env-toMatch": {
      "href": "http://localhost:8080/actuator/env/{toMatch}",
      "templated": true
    },
    "loggers-name": {
      "href": "http://localhost:8080/actuator/loggers/{name}",
      "templated": true
    },
    "loggers": {
      "href": "http://localhost:8080/actuator/loggers",
      "templated": false
    },
    "metrics": {
      "href": "http://localhost:8080/actuator/metrics",
      "templated": false
    },
    "metrics-requiredMetricName": {
      "href": "http://localhost:8080/actuator/metrics/{requiredMetricName}",
      "templated": true
    },
    "sbom": {
      "href": "http://localhost:8080/actuator/sbom",
      "templated": false
    },
    "sbom-id": {
      "href": "http://localhost:8080/actuator/sbom/{id}",
      "templated": true
    }
  }
}

TimHess avatar Sep 24 '25 18:09 TimHess