# Appeler une API derrière Flexway

> Guide développeur : ce que voit une application qui appelle une API servie par Flexway - identifiants, protocoles, erreurs, quotas, reprises. Il préfigure le…

Concept - Depuis la version 0.1.0 - Flexway v1.6.3 - https://flexway.io/docs/developer-overview/

> Guide développeur : ce que voit une application qui **appelle** une API servie par Flexway - identifiants, protocoles, erreurs, quotas, reprises. Il préfigure le portail développeur (prévu en `1.11.0`). La configuration de la passerelle est dans le [guide d'exploitation](https://flexway.io/docs/operations-overview/).
>
> Côté produit : [Flexway en une page](https://flexway.io/docs/product-overview/) ; côté exploitation : [Configurer et exploiter Flexway](https://flexway.io/docs/operations-overview/).

## Ce que la passerelle fait de votre requête

```mermaid
%%{init: {'theme':'base','themeVariables':{'fontSize':'14px','lineColor':'#94a3b8'}}}%%
graph TB
  APP["Votre application"]:::ext
  subgraph FW["Flexway"]
    R["Route déclarée ?"]:::hub
    I["Identité, portées"]:::hub
    Q["Débit, quota"]:::hub
    V["Validation du contrat"]:::hub
  end
  UP["API amont"]:::spoke
  ERR["Refus RFC 9457"]:::fail

  APP --> R --> I --> Q --> V --> UP
  R -.->|"404, 405"| ERR
  I -.->|"401, 403"| ERR
  Q -.->|"429, 503"| ERR
  V -.->|"400, 422"| ERR

  classDef hub   fill:#4f46e5,stroke:#3730a3,color:#fff,font-weight:bold
  classDef spoke fill:#0891b2,stroke:#155e75,color:#fff,font-weight:bold
  classDef ext   fill:#64748b,stroke:#334155,color:#fff,font-weight:bold
  classDef fail  fill:#ef4444,stroke:#b91c1c,color:#fff,font-weight:bold
```

| Règle | Ce qu'elle veut dire pour vous |
| --- | --- |
| **Le contrat fait foi** | Seules les opérations du contrat (OpenAPI, AsyncAPI, Protobuf) existent. Une route absente répond `404`, une méthode absente `405` avec `Allow` |
| **Fermé par défaut** | Un en-tête non déclaré est **retiré** avant l'amont ; un paramètre de requête non déclaré est **refusé** (`400`, nommé) ; une origine de navigateur non autorisée est refusée (`403`) |
| **Une seule décision** | REST, gRPC, outil MCP ou message : même identité, même quota, même audit |
| **Erreurs typées** | Toujours `application/problem+json` (RFC 9457) avec un `code` stable - sauf `/v1/*`, au format OpenAI ([erreurs](https://flexway.io/docs/developer-errors/)) |
| **Flux sans retenue** | SSE, WebSocket et flux gRPC arrivent au rythme où l'amont les produit |

## Les pages de ce guide

| Besoin | Page |
| --- | --- |
| Obtenir un jeton, une clé ou un certificat | [Identifiants](https://flexway.io/docs/developer-credentials/) |
| Appeler une opération REST, CORS, cache | [REST](https://flexway.io/docs/developer-rest/) |
| gRPC et gRPC-Web | [gRPC](https://flexway.io/docs/developer-grpc/) |
| Server-sent events et WebSocket | [Flux](https://flexway.io/docs/developer-streams/) |
| Outils pour agents | [MCP](https://flexway.io/docs/developer-mcp/) |
| Dialogue entre agents | [A2A](https://flexway.io/docs/developer-a2a/) |
| Modèles d'IA compatibles OpenAI | [Inférence](https://flexway.io/docs/developer-inference/) |
| Publier et s'abonner à des évènements | [Canaux asynchrones](https://flexway.io/docs/developer-async/) |
| Recevoir des webhooks | [Webhooks signés](https://flexway.io/docs/developer-webhooks/) |
| Producteurs et consommateurs Kafka | [Clients Kafka](https://flexway.io/docs/developer-kafka/) |
| Comprendre un refus | [Erreurs](https://flexway.io/docs/developer-errors/) |
| `429`, `Retry-After`, étranglement | [Débit et quotas](https://flexway.io/docs/developer-rate-limits/) |
| Rejouer sans dupliquer | [Reprises et idempotence](https://flexway.io/docs/developer-retries/) |
| Dépréciation et retrait | [Versions](https://flexway.io/docs/developer-versioning/) |
