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.
Transformations
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


Problème 1
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
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 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é.
Chaque étape est une décision lisible dans la trace et dans la console.
Transformations - Schéma du domaine : qui appelle, les étapes de décision, ce qui est appelé, et le cas de refus.
service de décision : 403 (deny)
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.
Trajets qui passent ici
Les entreprises partenaires qui consomment vos API : identifiées par certificat client ou clé d'API, sous un quota par tenant.
Trajets qui passent ici
Flexway remodèle la requête : en-têtes, chemin et paramètres, sans toucher à votre service.
Trajets qui passent ici
Une condition CEL, compilée au chargement, décide si une politique s'applique ; fausse, la politique est sautée.
Trajets qui passent ici
Flexway consulte votre service de décision sous un délai borné ; s'il refuse (deny), l'appelant reçoit 403.
Trajets qui passent ici
Une lecture déjà en cache est servie si le contrat le permet, isolée par tenant et par sujet.
Trajets qui passent ici
Flexway remodèle la réponse : projection de champs, masquage des données sensibles, code de statut.
Trajets qui passent ici
La chaîne de politiques se vérifie à blanc : route, chaîne effective et verdict, sans appeler l'amont.
Trajets qui passent ici
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.
Trajets qui passent ici
Votre service de décision, appelé par une politique sous délai borné ; sa réponse peut refuser la requête.
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 de requête se posent, se retirent ou se réécrivent par déclaration, sans rien programmer.
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.
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.
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.
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.
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.
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.
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.
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.
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.
L'exemple transformations, tel qu'il est livré avec Flexway v1.6.3.
# 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# 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 aloneCe 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ériver | Livré · v0.1.0 |
| Réécriture de chemin et paramètres de requête | Livré · v0.1.0 |
| Projection et filtrage de champs du corps, conformité au schéma vérifiée | Livré · v1.1.0 |
| Masquage de champs sensibles en réponse | Livré · v1.1.0 |
| Code de statut amont traduit en code sémantique | Livré · v1.1.0 |
| Éléments protégés inécrivables, refus au démarrage | Livré · v0.1.0 |
| Respect de Cache-Control, ETag et Vary de l'amont | Livré · v1.1.0 |
| Cache de réponses publiques, par opération | Livré · v1.1.0 |
| Cache authentifié, isolé par tenant et par sujet | Livré · v1.1.0 |
| Conditions CEL compilées au chargement | Livré · 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 politiques | Livré · v0.1.0 |
| Décodage et encodage JSON | Prévu |
| Décodeurs XML, YAML, formulaire | Prévu |
| Écran de simulation d'une chaîne de politiques | Livré · v1.2.0 |
| Chaîne de politiques effective par route | Livré · v0.1.0 |
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.