flexway
FRENParler à un expert

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

  1. ReprendreLa configuration existante devient un flexway.yaml et un contrat annoté, avec un rapport de ce qui ne se reprend pas
  2. Validerflexway validate hors ligne, en CI, avant tout trafic
  3. Servir à côtéFlexway et l'ancienne passerelle en parallèle ; les routes basculent une à une
  4. 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.

Ouvrir ce modèle dans l'éditeur

Configuration

L'exemple replace-gateway, tel qu'il est livré avec Flexway v1.6.3.

examples/replace-gateway/flexway.yaml
# 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 couvertureLivré · v1.1.0
Un contrat OpenAPI 3.1 chargé ; ce qui est servi en est déduitLivré · v0.1.0
flexway validate hors ligne, sortie exploitable en CILivré · v0.1.0
Refus de démarrage si une opération déclarée n'a pas d'amontLivré · v0.1.0
Une configuration invalide ne remplace jamais celle en coursLivré · v0.1.0
Rechargement à chaud par instantané immuable, sans requête perdueLivré · v0.1.0
Validation JWT, clés JWKS en cache avec rotationLivré · v0.1.0

Pour aller plus loin

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.