Reprendre une API existante
Reprendre une API existante, sans tout réécrire.
Votre passerelle actuelle porte des centaines de routes. Flexway reprend sa configuration, dit ce qui ne se reprend pas, et sert depuis votre contrat OpenAPI : la migration se fait route par route, l'ancienne passerelle à côté.
Le trajet
- ReprendreLa configuration existante devient un flexway.yaml et un contrat annoté, avec un rapport de ce qui ne se reprend pas
- Validerflexway validate hors ligne, en CI, avant tout trafic
- Servir à côtéFlexway et l'ancienne passerelle en parallèle ; les routes basculent une à une
- ObserverMêmes traces, refus lisibles dans la console
Ce qui n'est pas déclaré au contrat n'est pas servi : la reprise révèle souvent des routes que l'ancienne passerelle exposait sans que personne ne le sache. Un audit gratuit de la surface réellement exposée.
Configuration
L'exemple replace-gateway, tel qu'il est livré avec Flexway v1.6.3.
# What a team replacing its gateway usually needs on day one (1.0.0): anonymous
# users behind a BFF counted apart, a bucket per operation as most gateways count, errors typed under
# its own portal with field codes in its own words, the body left to the service, tokens of an old
# and a new audience accepted while the audience is renamed.
version: 1
contracts:
openapi: ./openapi.yaml
upstreams:
default:
url: http://shop.internal:8080
hosts:
api.example.com: { default_upstream: default, validation: params } # the services validate their bodies
server:
trusted_proxies: [local] # the mesh proxy: the pod's own addresses (not the loopback)
peer_identity_header: l5d-client-id # the mTLS identity that proxy verified
errors:
type_base: https://docs.example.com/errors/ # type = https://docs.example.com/errors/<code>
field_codes: { minLength: too_short, maxLength: too_long, minimum: out_of_range, maximum: out_of_range }
auth:
issuers:
- name: customers
discovery: https://login.example.com/.well-known/openid-configuration
audiences: [shop-api, api] # the old name and the new, during the rename
policies:
definitions:
per-user:
type: rate-limit
config:
key: header # anonymous: X-Client-Key, if the BFF set it
header: X-Client-Key
trusted: [web-bff.web.serviceaccount.identity.linkerd.cluster.local]
scope: operation # a bucket per operation and user, not one per class
classes:
read: { rps: 20, burst: 40 }
write: { rps: 5, burst: 10 }
chains:
global: [per-user]Fonctionnalités
Ce qui est livré dans la version publiée v1.6.3, et ce qui vient ; une fonctionnalité n'est jamais présentée comme livrée avant sa version.
| Fonctionnalité | Statut |
|---|---|
| Reprise de la configuration d'une passerelle existante, avec rapport de couverture | Livré · v1.1.0 |
| Un contrat OpenAPI 3.1 chargé ; ce qui est servi en est déduit | Livré · v0.1.0 |
| flexway validate hors ligne, sortie exploitable en CI | Livré · v0.1.0 |
| Refus de démarrage si une opération déclarée n'a pas d'amont | Livré · v0.1.0 |
| Une configuration invalide ne remplace jamais celle en cours | Livré · v0.1.0 |
| Rechargement à chaud par instantané immuable, sans requête perdue | Livré · v0.1.0 |
| Validation JWT, clés JWKS en cache avec rotation | Livré · v0.1.0 |
Pour aller plus loin
- Ouvrir ce modèle dans l'éditeurVotre architecture, son flexway.yaml et ses décisions simulées, dans le navigateur.
- Le guidePas à pas, dans la documentation de la version publiée
- APIREST, gRPC, SSE, WebSocket, depuis le contrat
- SécuritéOIDC, clés d'API, mTLS, fermé par défaut
- ExploitationOpenTelemetry, console, propositions en pull request
Parlons de votre passerelle
Flexwiz est une jeune entreprise : vous parlez directement avec la personne qui la fonde. Dites-nous ce que vous voulez faire passer par Flexway. Nous parlons de votre infrastructure et de vos exigences de souveraineté numérique.
La prise de rendez-vous en ligne arrive bientôt ; d'ici là, un e-mail suffit.