External API Contract — Northbound / Public (REST)
*Status:* v1.0 authoritative · Owner: Backend team (CTO ruling) · Last reviewed: 2026-06-26 · Review cadence: quarterly
This is the outward-facing API consumed by other systems — OSS/BSS, integrators, partner services
(repos: ft-northbound-api, ft-service-api, ft-provision-api).
Unlike the internal UI↔BE contract, it is proper REST and its living contract is the OpenAPI spec (springdoc / Swagger UI) — that is what external consumers read.
The rules below are the FT conventions that spec must follow. See also Java standard §J12.
| Two surfaces, don’t mix them. Internal UI↔BE = POST-RPC (that contract). External = this page. |
The contract
| Element | Shape | Notes |
|---|---|---|
Style |
REST — |
|
DTOs |
request |
no |
Ack / error envelope |
|
the external catalog — distinct from the internal |
Error transport |
a real HTTP status ( |
external layer (J12); ❌ not "always 200" |
Auth |
|
see J14 |
Docs |
OpenAPI via springdoc — |
a public endpoint without OpenAPI is incomplete |
Operations — verb per kind (REST)
| Operation | Verb | Path & body | Response |
|---|---|---|---|
List / query |
|
|
|
Get by id |
|
|
|
Create |
|
|
|
Update |
|
|
|
Delete |
|
|
|
Action / RPC-ish |
|
|
|
The northbound surface is verb-by-semantics but action-heavy — many operations are POST/PUT with a
request DTO in the body (not resource-id-in-path REST). Use GET for simple, side-effect-free reads.
|
Validation & errors
Implemented per the Java standard — see §J12 HTTP APIs: @Valid/@Validated
at the boundary, one global @RestControllerAdvice per service, ❌ no per-controller try/catch,
❌ never leak stack traces. On this surface the advice maps exceptions → real HTTP status + StatusResponse.
Stability & change control
|
This API is consumed by outside systems — treat changes as breaking-by-default:
|
| Back to Internal API (UI↔BE) · Java standard · Overview. |