Nouveau gRPC dynamique & flux temps réel

Conçois ton API en local,
prouve-la en CI.

Collections en YAML versionnable, secrets dans le keychain de l’OS, tests QuickJS identiques en local et en CI. HTTP, GraphQL, WebSocket, SSE et gRPC dans un seul outil desktop — zéro cloud.

macOS Windows Linux 100 % local · open source

Un seul outil, tous tes protocoles

HTTP reqwest natifGraphQL POST queryWebSocket journal liveSSE event-streamgRPC reflectionQuickJS testsYAML git diffOpenAPI export 3.1
Un outil de dev, pas une vitrine

Tout ce qui bouge sert le workflow API.

Variables résolues, réponses, tests, runner, flux live, exports. L’interface est dense parce que ton travail l’est aussi — et chaque détail reste lisible.

Git-native

Collections diffables

Un dossier, des fichiers YAML, des descriptions Markdown. Chaque changement se relit proprement en pull request.

Local-first

Secrets hors du repo

La syntaxe {{secret:NOM}} garde le YAML partageable et délègue la valeur sensible au keychain de l’OS.

Même moteur

Tests QuickJS

preRequest, zapi.fetch, test() et expect() tournent à l’identique dans l’app et dans la CLI.

Sans CORS

Réseau natif Rust

reqwest envoie les requêtes côté natif : timings réels, pas de proxy navigateur, corps binaires préservés.

Contrat exécutable

Le YAML décrit,
le runner prouve.

Une requête n’est pas une capture d’écran : c’est un artefact versionné, exécutable en local, relu en équipe et publiable en JSON ou JUnit. Auth, variables et tests vivent dans le même fichier.

requests/create-invoice.yml
name: Créer une facture
kind: http
method: POST
url: "{{baseUrl}}/invoices"
headers:
  - key: Authorization
    value: "Bearer {{token}}"
    enabled: true
body:
  type: json
  content: |
    { "customerId": "{{customerId}}", "amount": 12900, "currency": "EUR" }
scripts:
  preRequest: |
    const auth = zapi.fetch(zapi.getVar("baseUrl") + "/auth/login", {
      method: "POST",
      body: { password: "{{secret:API_PASSWORD}}" }
    });
    zapi.setVar("token", auth.json.accessToken);
  tests: |
    test("facture créée", () => expect(res.status).toBe(201));
    test("id présent", () => expect(res.json.id).toBeDefined());
scripts.tests
// Les mêmes tests en local et en CI
test("status 200", () => expect(res.status).toBe(200));

test("contrat respecté", () => {
  expect(res.headers["content-type"]).toContain("application/json");
  expect(res.json.id).toBeDefined();
  expect(res.json.items).toHaveLength(3);
});

test("latence acceptable", () =>
  expect(res.durationMs).toBeLessThan(500));
Scripts & tests

Des assertions
qui voyagent avec toi.

Le moteur QuickJS embarqué est partagé entre l’app et la CLI. Un test qui passe sur ton poste passe en CI — mêmes helpers, même budget de timeout, mêmes matchers expect.

Tous les matchers
Documentation complète

Des guides qui vont jusqu’aux cas de bord.

Variables, secrets OS, GraphQL, flux live, gRPC dynamique et format de collection : chaque page est locale, statique et navigable avec View Transitions.

Prêt pour la collection suivante

Garde ton API sous contrôle, en local.

Télécharge Zapi, ouvre un dossier, et ta première requête part en quelques secondes. Gratuit et open source.

macOS · Windows · Linux · 100 % local