flexway
FRENParler à un expert

Transformations

Remodeler un flux sans toucher l'amont.

En-têtes, chemin, paramètres, corps et codes de statut transformés de façon déclarative, réponses mises en cache, décision déléguée à un service : chaque politique s'attache au bon niveau et se simule avant d'être appliquée.

14 livrées sur les 16 présentées · depuis v0.1.0

Ce que vous attendez de ce domaine

  • BFF : adapter et agréger plusieurs microservicesProjection de corps construite ; l'agrégation exige un arbitrage ; la composition par écran reste au BFF du clientEn partie · suite en 1.10
  • Conformité des ressources FHIR à leurs profilsValidation au schéma JSON du contrat seulement ; profils FHIR : candidatÀ dater
Toutes les attentes du marché
Étape d'une politiqueÉtape d'une politique
Une étape de politique ouverte : sa condition CEL, sa configuration, son budget de délai et le comportement de panne déclaré.Capture réelle, données de démonstration · v1.6.3

Ce que ça résout

Problème 1

Chaque client veut une forme différente

L'amont renvoie trop de champs, ou des champs que certains clients ne doivent pas voir.

Réponse de Flexway : Projection et masquage déclarés au contrat ; la conformité au schéma est vérifiée.

Problème 2

Un amont coûteux est appelé pour rien

La même lecture repart vers l'amont à chaque requête.

Réponse de Flexway : Cache de réponses opt-in par opération, isolé par tenant et par sujet, testé en continu.

Problème 3

Une règle métier vit ailleurs

Une autorisation dépend d'un service de risque ou d'éligibilité.

Réponse de Flexway : Appel externe avec budget de délai et comportement de panne déclaré.

Fonctionnement

Chaque étape est une décision lisible dans la trace et dans la console.

Votre infrastructureflexwayPasserelle API, IA et agentsChaîne de décision unifiée403service de décision : 403 (deny)01 Requête02 Condition03 Appel externe04 Cache05 Réponse06 SimulationApplicationsPartenairesServicesService de décision (appelé par une politique)Votre infrastructureflexwayPasserelle API, IA et agentsChaîne de décision unifiée40301 Requêteen-têtes, chemin, paramètres02 ConditionCEL compilée au chargement : vraie, la politique s'applique ; fausse, elle est sautée03 Appel externeservice de décision, délai borné ; deny : 40304 Cachelecture servie si permise05 Réponseprojection, masquage, statut06 Simulationchaîne vérifiée à blancApplicationsPartenairesServicesService de décision (appelé par une politique)

Transformations - Schéma du domaine : qui appelle, les étapes de décision, ce qui est appelé, et le cas de refus.

  • Applications
  • Partenaires
  1. Requête
  2. Condition
  3. Appel externe
  4. Cache
  5. Réponse
  6. Simulation
  • Services
  • Service de décision (appelé par une politique)

service de décision : 403 (deny)

Applications
Les applications qui appellent vos API : chaque requête passe par Flexway, qui vérifie le contrat et l'identité avant d'atteindre vos systèmes.
Partenaires
Les entreprises partenaires qui consomment vos API : identifiées par certificat client ou clé d'API, sous un quota par tenant.
Requête
Flexway remodèle la requête : en-têtes, chemin et paramètres, sans toucher à votre service.
Condition
Une condition CEL, compilée au chargement, décide si une politique s'applique ; fausse, la politique est sautée.
Appel externe
Flexway consulte votre service de décision sous un délai borné ; s'il refuse (deny), l'appelant reçoit 403.
Cache
Une lecture déjà en cache est servie si le contrat le permet, isolée par tenant et par sujet.
Réponse
Flexway remodèle la réponse : projection de champs, masquage des données sensibles, code de statut.
Simulation
La chaîne de politiques se vérifie à blanc : route, chaîne effective et verdict, sans appeler l'amont.
Services
Vos services REST et gRPC : ils ne reçoivent que les requêtes que Flexway a laissées passer, sous délai et coupe-circuit.
Service de décision (appelé par une politique)
Votre service de décision, appelé par une politique sous délai borné ; sa réponse peut refuser la requête.
  • Ligne : un trajet
  • Correspondance : décision partagée
  • Requête
  • Refus
  • Votre infrastructure
  1. Requêteen-têtes, chemin, paramètres
  2. ConditionCEL compilée au chargement : vraie, la politique s'applique ; fausse, elle est sautée
  3. Appel externeservice de décision, délai borné ; deny : 403
  4. Cachelecture servie si permise
  5. Réponseprojection, masquage, statut
  6. Simulationchaîne vérifiée à blanc

En détail

L'essentiel de chaque sujet, avec son statut dans la version publiée ; dépliez une carte pour le texte complet.

En-têtes, chemin et paramètres

Livré · v0.1.0

En-têtes, chemin et paramètres de requête se posent, se retirent ou se réécrivent par déclaration, sans rien programmer.

  • Poser, retirer, renommer, dériver
  • Réécriture de chemin
  • Paramètres de requête
Voir le détailMasquer le détail - En-têtes, chemin et paramètres

Les en-têtes de requête et de réponse se posent, se retirent, se renomment ou se dérivent ; le chemin se réécrit, les paramètres de requête s'ajoutent ou se retirent. Tout se déclare, rien ne se programme.

Tous les points

  • Poser, retirer, renommer, dériver
  • Réécriture de chemin
  • Paramètres de requête

Fonctionnalités et 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
Lire dans la documentation : Enrichir un flux

Corps et codes de statut

Livré · v1.1.0

Une réponse se projette sur une liste fermée de champs, ses champs sensibles sont masqués et les codes de l'amont traduits pour les clients.

  • Projection sur une liste fermée de champs
  • Masquage des champs sensibles
  • Codes de statut traduits
Voir le détailMasquer le détail - Corps et codes de statut

Une réponse peut être projetée sur une liste fermée de champs, et la conformité au schéma du contrat est vérifiée. Des champs sensibles sont masqués avant de quitter la passerelle. Un code de statut de l'amont se traduit en code sémantique pour les clients.

Tous les points

  • Projection sur une liste fermée de champs
  • Masquage des champs sensibles
  • Codes de statut traduits

Fonctionnalités et statut

  • 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
  • Code de statut amont traduit en code sémantiqueLivré · v1.1.0
Lire dans la documentation : Remodeler une réponse

Cache de réponses

Livré · v1.1.0

Le cache, opt-in par opération, respecte Cache-Control, ETag et Vary, et ne partage jamais une réponse authentifiée entre deux appelants.

  • Opt-in par opération
  • Clé de tenant et de sujet
  • Isolation testée en continu
Voir le détailMasquer le détail - Cache de réponses

Le cache respecte Cache-Control, ETag et Vary de l'amont. Il est opt-in par opération : une réponse publique se partage, une réponse authentifiée est mise en cache sous la clé du tenant et du sujet, jamais partagée entre deux appelants.

L'isolation entre tenants est testée en continu : c'est un préalable à toute mise en cache authentifiée.

Tous les points

  • Opt-in par opération
  • Clé de tenant et de sujet
  • Isolation testée en continu

Fonctionnalités et statut

  • Respect de Cache-Control, ETag et Vary de l'amontLivré · v1.1.0
  • Cache de réponses publiques, par opérationLivré · v1.1.0
  • Cache authentifié, isolé par tenant et par sujetLivré · v1.1.0
Lire dans la documentation : Mettre une lecture en cache

Déléguer une décision à un service

Livré · v1.1.0

Une décision de votre système se délègue par un appel externe déclaré, avec un budget de délai et un comportement de panne choisi à l'avance.

  • Budget de délai
  • Comportement de panne déclaré
Voir le détailMasquer le détail - Déléguer une décision à un service

Une décision qui appartient à votre système - risque, éligibilité, droits métier - se délègue par un appel externe déclaré, avec un budget de délai et un comportement de panne choisi à l'avance : refuser ou laisser passer, jamais au hasard.

Tous les points

  • Budget de délai
  • Comportement de panne déclaré

Fonctionnalités et statut

  • Appel externe : budget de délai et comportement de panne déclaréLivré · v1.1.0
Lire dans la documentation : Déléguer une décision à un service

Politiques, conditions et simulation

En partie

Les politiques s'attachent à quatre niveaux, leurs conditions CEL sont compilées au chargement et une chaîne se simule à blanc sans appeler l'amont.

  • Quatre niveaux d'attachement
  • Conditions CEL compilées
  • Simulation à blanc
Voir le détailMasquer le détail - Politiques, conditions et simulation

Les politiques s'attachent à quatre niveaux, de la passerelle entière à l'opération, la plus précise l'emportant. Leurs conditions CEL sont compilées au chargement : une condition invalide est refusée avant de servir ; à l'exécution, une condition fausse saute la politique. Une chaîne se simule à blanc, sans appeler l'amont.

Les éléments protégés ne peuvent pas être réécrits, et une configuration qui l'essaie est refusée au démarrage. Les décodeurs JSON, XML et SOAP sont à venir.

Tous les points

  • Quatre niveaux d'attachement
  • Conditions CEL compilées
  • Simulation à blanc
  • Décodeurs XML et SOAP : à venir

Fonctionnalités et statut

  • Conditions CEL compilées au chargementLivré · v0.1.0
  • Simulation à blanc d'une chaîne de politiquesLivré · v0.1.0
  • Éléments protégés inécrivables, refus au démarrageLivré · v0.1.0
  • Décodeurs XML, YAML, formulairePrévu
Lire dans la documentation : Politiques

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
examples/response-cache/flexway.yaml
# Responses kept by the gateway (1.2.0): opt-in, per operation in the contract
# (x-flexway-cache) or by a cache policy over routes - the operation's own wins. Public by default: an
# identified caller is never served from, nor stored into, a public entry; per tenant and subject only
# when the operation declares it. The upstream's Cache-Control only shortens the ttl; no-store,
# private, Set-Cookie and streams are never kept.
version: 1
contracts:
  openapi: ./openapi.yaml
upstreams:
  default:
    url: http://catalog.internal:8080
server:
  cache:
    max_bytes: 64MiB                             # per replica; past it, the least recently used goes
    max_entry_bytes: 512KiB                      # a larger response is relayed, never kept
auth:
  issuers:
    - name: customers
      discovery: https://login.example.com/.well-known/openid-configuration
      audience: api
      tenant_claim: org                          # a cache per subject keys by tenant and subject
policies:
  definitions:
    catalog-cache:
      type: cache
      config: { ttl: 5m }                        # public, always: a policy never caches per subject
  chains:
    routes:
      "/products/**": [catalog-cache]            # the reads under it; the writes are left alone

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
Code de statut amont traduit en code sémantiqueLivré · v1.1.0
Éléments protégés inécrivables, refus au démarrageLivré · v0.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
Cache authentifié, isolé par tenant et par sujetLivré · v1.1.0
Conditions CEL compilées au chargementLivré · v0.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
Décodage et encodage JSONPrévu
Décodeurs XML, YAML, formulairePrévu
Écran de simulation d'une chaîne de politiquesLivré · v1.2.0
Chaîne de politiques effective par routeLivré · v0.1.0

Toutes les fonctionnalités

Les autres domaines

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.