# Valider dans son éditeur

> Brancher le schéma publié de flexway.yaml dans son éditeur : complétion de chaque clé et faute soulignée à l'écriture, plutôt qu'au démarrage.

Guide - Depuis la version 1.7.0 - Flexway v1.7.1 - https://flexway.io/docs/operations-editor-validation/

> Guide d'exploitation : configurer, déployer et observer la passerelle. Ce que fait la fonctionnalité côté produit : [guide produit](https://flexway.io/docs/product-overview/) ; l'appeler : [guide développeur](https://flexway.io/docs/developer-overview/).

Que l'éditeur complète `flexway.yaml` et souligne une faute **à l'écriture** - clé
inconnue, valeur hors liste, durée mal écrite, secret écrit en clair -, plutôt qu'au démarrage.

Flexway publie un **schéma JSON** (JSON Schema 2020-12) de sa configuration, écrit depuis le modèle
de la passerelle à chaque version : chaque clé avec son type, ses valeurs admises, sa valeur par
défaut, la version qui l'a apportée, si un rechargement l'applique, et une description en français et
en anglais. Le détail clé par clé : [référence de la configuration](https://flexway.io/docs/operations-configuration-reference/).

## Étapes

1. Ajouter une ligne en tête de `flexway.yaml` - elle suffit aux éditeurs qui utilisent
   `yaml-language-server` (VS Code avec l'extension YAML de Red Hat, Neovim, JetBrains, Helix) :

```yaml title="flexway.yaml"
# yaml-language-server: $schema=https://flexway.io/schema/v1/flexway.schema.json
version: 1
contracts:
  openapi: ./openapi.yaml
upstreams:
  orders:
    url: http://orders.internal:8080
    timeout: 3s
```

2. Hors ligne, ou pour figer le schéma de la version déployée, l'écrire depuis l'image de cette version :

```bash
docker run --rm -v "$PWD:/out" -u "$(id -u)" ghcr.io/flexwiz/flexway:<version> schema --out /out
# /out/flexway.schema.json
# /out/contract-extensions.schema.json
# /out/policy-fragment.schema.json       (a fragment file, kind: PolicyFragment)
```

3. Pointer la ligne vers le fichier local : `# yaml-language-server: $schema=./flexway.schema.json`.

### Les extensions du contrat

Les extensions `x-flexway-*` d'un document OpenAPI, AsyncAPI ou d'une carte A2A
sont décrites par `contract-extensions.schema.json` (une définition par extension sous `$defs`, avec
les emplacements où elle est lue). Les politiques sont dans `flexway.schema.json` : la forme de
`config` suit le `type` de la définition (`cors`, `rate-limit`, `quota`, `cache`, `header-inject`,
`header-remove`, `rewrite-path`, `query-inject`, `query-remove`, `transform-body`, `redact`,
`map-status`, `external-call`).

## Vérifier

Écrire `timeouts: { conect: 5s }` sous `server` - l'éditeur souligne `conect` (clé
inconnue) ; la complétion propose `connect` avec sa description et son défaut `5s`. Écrire `log_level: verbose` sous
`observability` - l'éditeur liste `debug`, `info`, `warn`, `error`, `fatal`.

## À savoir

> [!IMPORTANT]
> Le schéma **décrit** ; `flexway validate` **décide**. Ce qui croise plusieurs fichiers - un amont
> pour chaque opération du contrat, une route déclarée deux fois, une politique nommée qui n'existe
> pas - n'est vérifié que par `flexway validate` et au démarrage. Gardez `flexway validate` dans la CI.
