Files
podman-mvp/contracts/API_GOLDEN.md
T

182 lines
3.4 KiB
Markdown

# API_GOLDEN.md — podman-mvp
Purpose:
Freeze existing API response contracts used by the WebUI.
Existing response structures MUST remain backward compatible.
Rules:
- Existing JSON keys MUST NOT be removed.
- Existing JSON keys MUST NOT be renamed.
- Data types of listed keys MUST NOT change.
- New optional fields are allowed.
- New endpoints are allowed.
- Podman passthrough responses must remain raw Podman responses.
API accessed via proxy:
http://127.0.0.1:8081/api
==================================================
GET /api/containers-dashboard
==================================================
Curl:
curl -s http://127.0.0.1:8081/api/containers-dashboard
Response type:
Array of container objects.
Golden keys per item:
- Names
- Image
- State
- Status
- Ports
- PodName
- _dashboard_source
- _dashboard_published_ports
- _dashboard_unit
- _dashboard_def_path
Golden example:
[
{
"Names": ["mvp-webui"],
"Image": "docker.io/library/httpd:2.4",
"State": "running",
"Status": "",
"Ports": [],
"PodName": "mvp-pod",
"_dashboard_source": "podman",
"_dashboard_published_ports": [
"8080:8000/tcp",
"8081:8081/tcp"
],
"_dashboard_unit": null,
"_dashboard_def_path": null
}
]
==================================================
GET /api/pods-dashboard
==================================================
Curl:
curl -s http://127.0.0.1:8081/api/pods-dashboard
Response type:
Array of pod dashboard objects.
Golden keys per item:
- Name
- Status
- Containers
- Unit
- Source
Golden example:
[
{
"Name": "mvp-pod",
"Status": "Running",
"Containers": [
"mvp-backend",
"mvp-webui"
],
"Unit": "pod-mvp-pod.service",
"Source": "podman"
}
]
==================================================
GET /api/images
==================================================
Curl:
curl -s http://127.0.0.1:8081/api/images
Response type:
Array of Podman image objects.
Golden keys per item:
- RepoTags
- RepoDigests
- Created
- Size
- Containers
- Digest
- Arch
- Os
Golden example:
[
{
"RepoTags": [
"docker.io/library/httpd:2.4"
],
"RepoDigests": [
"docker.io/library/httpd@sha256:..."
],
"Created": 1770085385,
"Size": 120210217,
"Containers": 1,
"Digest": "sha256:...",
"Arch": "amd64",
"Os": "linux"
}
]
==================================================
GET /api/networks/meta
==================================================
Curl:
curl -s http://127.0.0.1:8081/api/networks/meta
Golden keys:
- networkBackend
- rootless
- infoEndpoint
Golden example:
{
"networkBackend": "netavark",
"rootless": true,
"infoEndpoint": "http+unix://%2Frun%2Fuser%2F1000%2Fpodman%2Fpodman.sock/v5.4.2/libpod/info"
}
==================================================
GET /api/openapi.json
==================================================
Curl:
curl -s http://127.0.0.1:8081/api/openapi.json
Contract:
OpenAPI schema must remain available for tooling and inspection.
Required top-level keys:
- openapi
- info
- paths
==================================================
GENERAL BACKWARD COMPATIBILITY RULE
==================================================
The following dashboard endpoints are considered UI-critical:
- /containers-dashboard
- /pods-dashboard
- /images
- /networks/meta
Changes affecting these endpoints must be proposed before implementation.
System stability has priority over structural refactoring.