# API-Spine

> Das maschinenlesbare Rückgrat (OpenAPI) hinter den Fassaden der Website.

## Was es tut {#was}

Der API-Spine ist der eine typisierte Kern hinter den Fassaden: die REST-Spezifikation wird aus dem Code erzeugt, der Client wird aus der Spezifikation erzeugt, und die MCP-Werkzeugfläche bindet an dieselben Funktionen — nie eine zweite Implementierung derselben Semantik. Vierzehn Operationen, jede genau einer Zeile eines im Code stehenden Fähigkeitsregisters zugeordnet; ein Test prüft, dass Register und Spezifikation sich exakt decken, statt es zu behaupten. Datenquelle ist in dieser Phase das Register-Repository selbst, streng lesend: einen Schreibpfad gibt es im Code nicht, und /directory liefert heute null Einträge. Bei jedem Commit laufen vier Abgleiche zwischen dem, was der Code erzeugt, und dem, was eingecheckt ist — Spezifikation, erzeugter Client, RFC-9728-Metadaten und Werkzeug-Inventar; jeder Unterschied hält den Commit an. Was der Spine nicht tut: nach aussen servieren — oh-api serve bindet an 127.0.0.1, und die Website erzeugt ihre Fassaden statisch und ruft ihn nie auf; geteilt wird das Schema, nicht der Prozess.


## Selbst betreiben {#betreiben}

**Sie brauchen:**

- Rust (stable über rustup) und Git; alle Befehle laufen aus der Wurzel des Korpus-Checkouts.

Aus der Wurzel des Korpus-Checkouts, Zeile für Zeile:

```bash
cargo run --locked --manifest-path registry/api/spine/Cargo.toml -- serve --root . --port 8710
```

Danach sehen Sie:

```text
oh-api serving on 127.0.0.1:8710
```

## Testen {#testen}

```bash
cargo test --locked --manifest-path registry/api/spine/Cargo.toml
```
- Läuft ohne Netz: jede Antwort kommt aus dem Repository, das Ergebnis ist bei jedem Lauf gleich.

## Ansteuern {#ansteuern}

- **Öffentlich:** *noch nicht* — Kein öffentlicher Endpunkt: weder Zone noch Route noch Deployment sind aufgeschaltet.
- **Lokal:** http://127.0.0.1:8710

### Verträge

- **OpenAPI 3.0.3** `registry/api/openapi.json`
- **Erzeugter Client** `registry/api/client`

### Das Fähigkeitsregister

```bash
curl -s http://127.0.0.1:8710/capabilities
```

Antwort (Auszug):

```json
[{"id":"meta.capabilities","operation_id":"get_capabilities","method":"GET","path":"/capabilities","summary":"The machine-readable capability register with published client coverage", …}, … 14 rows]
```

### Aufruf und Optionen

```text
usage: oh-api emit-openapi | serve --root <dir> [--port <n>]
```

## Mitwirken {#mitwirken}

Änderungen laufen über Merge Request und dieselben Gates wie für den Verein: Formatierung, Clippy ohne Warnungen, Tests, Siegel- und Drift-Prüfungen. Sicherheitsmeldungen vertraulich an admin@openhelvetia.swiss.

Die Basis-Stufe kostet nichts; wovon der Betrieb lebt, steht unter [Über uns, Finanzierung](../../../about/financing/index.html).

## Steckbrief {#steckbrief}

Zustand, Belege, Download und Abhängigkeiten stehen auf der Infrastruktur-Seite: [API-Spine](../../../directory/building-blocks/api-spine/index.html).

---

Quelle: erzeugt aus public/web/modules.json
