feat(bff): committed OpenAPI contract + drift guard (refs #8)

Document typed responses (202 SubmitAccepted / 400 / 401 on self-service; 200
OpenbaarEntry[] on openbaar) so the generated spec carries real schemas for S-08's
client. A document transformer clears the auto-populated servers block so the spec
is host-independent and deterministic. Commit services/bff/openapi.json and add a
test asserting it matches the served /openapi/v1.json (fails on drift).

Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>
This commit is contained in:
2026-07-01 11:07:55 +02:00
parent 5d32d4f15e
commit 69d6e80378
3 changed files with 153 additions and 3 deletions

104
services/bff/openapi.json Normal file
View File

@@ -0,0 +1,104 @@
{
"openapi": "3.1.1",
"info": {
"title": "Bff.Api | v1",
"version": "1.0.0"
},
"paths": {
"/self-service/registrations": {
"post": {
"tags": [
"Bff.Api"
],
"responses": {
"202": {
"description": "Accepted",
"content": {
"application/json": {
"schema": {
"$ref": "#/components/schemas/SubmitAccepted"
}
}
}
},
"400": {
"description": "Bad Request"
},
"401": {
"description": "Unauthorized"
}
}
}
},
"/openbaar/register": {
"get": {
"tags": [
"Bff.Api"
],
"parameters": [
{
"name": "q",
"in": "query",
"schema": {
"type": "string"
}
}
],
"responses": {
"200": {
"description": "OK",
"content": {
"application/json": {
"schema": {
"type": "array",
"items": {
"$ref": "#/components/schemas/OpenbaarEntry"
}
}
}
}
}
}
}
}
},
"components": {
"schemas": {
"OpenbaarEntry": {
"required": [
"id",
"status"
],
"type": "object",
"properties": {
"id": {
"type": "string"
},
"status": {
"type": "string"
}
}
},
"SubmitAccepted": {
"required": [
"registrationId",
"status"
],
"type": "object",
"properties": {
"registrationId": {
"type": "string"
},
"status": {
"type": "string"
}
}
}
}
},
"tags": [
{
"name": "Bff.Api"
}
]
}