flexway
FRENParler à un expert

Enrichir un flux sans toucher l'amont

Remodeler un flux sans toucher au service.

Une politique nommée, conditionnée, attachée à un hôte ou à une opération ajoute un en-tête, masque un champ, met une réponse en cache ou consulte un service de décision. Le service derrière ne change pas.

Le trajet

  1. NommerUne politique déclarée une fois, réutilisée
  2. ConditionnerUne condition CEL, compilée au chargement : fausse, la politique est sautée
  3. AttacherÀ la passerelle, à un hôte, à une route ou à une opération
  4. SimulerLa chaîne vérifiée à blanc avant de servir

Une condition invalide ou un élément protégé réécrit est refusé au chargement : l'erreur se voit avant la production. À l'exécution, une condition fausse saute la politique ; un service de décision qui répond deny donne un 403.

Ouvrir ce modèle dans l'éditeur

Configuration

L'exemple transformations, tel qu'il est livré avec Flexway v1.6.3.

examples/transformations/flexway.yaml
# Enriching a flow without touching the upstream: named policies, a CEL condition, composed
# global -> host -> routes -> operation, the most precise wins, `!name` removes.
version: 1
contracts:
  openapi: ./openapi.yaml
upstreams:
  default:
    url: http://orders.internal:8080
auth:
  issuers:
    - name: customers
      discovery: https://login.example.net/.well-known/openid-configuration
      audience: api
policies:
  definitions:
    plan-header:
      type: header-inject
      when: "has(auth.subject)"                   # CEL: authenticated callers only
      config:
        set: { x-plan: "{{ auth.claims.plan }}", x-operation: "{{ route.operation_id }}" }
        on_missing: skip                          # skip | empty | fail - required for an expression
    strip-server:
      type: header-remove
      phase: response                             # on what the upstream answers
      config: { names: [server, x-powered-by] }
    v2-path:
      type: rewrite-path                          # the upstream's path, never the served one
      config: { to: "/v2/orders/{id}" }
    channel:
      type: query-inject
      config: { set: { channel: gateway } }
  chains:
    global: [strip-server]
    routes:
      "/orders/*": [v2-path, channel]             # * one segment, ** any number

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
En-têtes de requête et de réponse : poser, retirer, renommer, dériverLivré · v0.1.0
Réécriture de chemin et paramètres de requêteLivré · v0.1.0
Projection et filtrage de champs du corps, conformité au schéma vérifiéeLivré · v1.1.0
Masquage de champs sensibles en réponseLivré · v1.1.0
Respect de Cache-Control, ETag et Vary de l'amontLivré · v1.1.0
Cache de réponses publiques, par opérationLivré · v1.1.0
Appel externe : budget de délai et comportement de panne déclaréLivré · v1.1.0
Simulation à blanc d'une chaîne de politiquesLivré · 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.