Expand description
breathe-api-server — the REST surface over the breathe_facade core.
Every route is a thin call into the same BreatheStore the MCP drives, so the
two surfaces can never diverge. The path/verb set mirrors
spec/breathe.openapi.yaml (the source of truth); the handlers are kube-rs
facade calls — the one place breathe legitimately hand-serves (a generic
kube::Api<T> dispatch that forge-gen’s HTTP-client model fits poorly).
Modules§
- graphql
- The GraphQL surface (async-graphql) over the same facade. Resolvers return
the CRD JSON via the
Jsonscalar so there is one typed source of truth. - grpc
- The gRPC surface (tonic) over the same facade — now with TYPED proto messages
(no JSON-string envelope).
proto/breathe.protois generated by grpc-forge fromspec/breathe.openapi.yaml; pbjson makes the messages serde-capable, so the facade’sserde_json::Valuebridges straight into the typed responses via [typed]. The handler is the one place breathe legitimately hand-serves (a generickube::Api<T>dispatch) — it just maps facade JSON ↔ typed proto.
Functions§
- router
- The full HTTP router: REST + a
/graphqlendpoint, both over the shared facade.storeis the realKubeStoreor a mock.