Aller au contenu principal

Toutes les clés, une page.

La config vit dans la page hôte, dans un bloc <script id="api-doc-config" type="application/json"> — ou dans la globale window.API_DOC_CONFIG quand vous voulez des commentaires autour. Seule openapi.url (ou spec, ou specs) est requise ; toutes les autres clés ont une valeur par défaut raisonnable. Les clés sont groupées ci-dessous comme dans la config elle-même ; les valeurs par défaut sont indiquées quand il en existe une, en date de la v0.1.0.

La config complète d'un coup d'œil — copiable, un commentaire par clé
config.js
// Le même objet, sans les commentaires, peut vivre inline dans la page en
// JSON strict : <script id="api-doc-config" type="application/json">{ … }</script>
window.API_DOC_CONFIG = {
  openapi: {
    // La seule clé requise : votre schéma, JSON ou YAML, lisible en CORS.
    url: "https://example.com/openapi.json",
    // …ou le schéma porté par la page — aucune requête, aucun CORS ; gagne sur url.
    // spec: { openapi: "3.1.0", … },
    // …ou plusieurs API dans une installation ; presque toutes les clés
    // ci-dessous sont redéclarables par entrée. Gagne sur url.
    // specs: [{ id: "payments", title: "API Paiements", url: "…" }],
    // default: "payments",              // spec affichée à l'arrivée (multi-spec)
    // Masquage documentaire, pas contrôle d'accès — par tag, méthode + chemin,
    // chemin, ou operationId.
    hide: ["tag:Internal", "DELETE /admin/*"],
    // Documents OpenAPI Overlay 1.1 appliqués au schéma au chargement, dans l'ordre.
    overlays: ["/overlays/fix-descriptions.json"],
    // Un correctif de départ amorcé dans l'éditeur d'overlay du lecteur.
    userOverlay: null
  },
  theme: {
    default: "light",                    // thème du premier chargement (défaut "system" : suit l'OS) ; le choix du lecteur prime ensuite
    available: ["light", "dark", "nord"], // entrées du sélecteur — les 35 thèmes daisyUI sont dans le bundle
    custom: [                            // votre thème, sans étape de build (racine uniquement en multi-spec)
      { name: "acme", extends: "dark", tokens: { "--color-primary": "#7c3aed" } }
    ]
  },
  language: {
    default: "browser",                  // suit les langues du navigateur ; ou épinglez un code
    available: ["en", "fr"]              // les langues non actives se téléchargent à la demande
  },
  environments: [                        // pré-remplis au premier chargement ; le stockage du lecteur prime ensuite
    {
      name: "sandbox",
      color: "green",                    // le rouge signale la production d'un coup d'œil
      baseUrl: "https://sandbox.example.com",
      variables: { "auth.bearerAuth": { value: "demo-token", sensitive: true } },
      defaultHeaders: { "X-Client": "docs" }
    }
  ],
  environmentsLocked: false,             // true retire tout point d'entrée de création ou d'édition
  docsPages: [                           // vos guides markdown, tissés dans la nav
    { slug: "premiers-pas", title: "Premiers pas", url: "/docs/premiers-pas.md" },
    { slug: "changelog", title: "Journal des versions", url: "/docs/changelog.md", kind: "changelog" },
    // nav: "bottom" envoie une entrée de premier niveau en zone d'annexe, sous la référence.
    { slug: "support", title: "Support", url: "/docs/support.md", nav: "bottom" }
  ],
  feedback: {
    url: null                            // votre endpoint pour « Cette page vous a-t-elle été utile ? » — null retire la ligne
  },
  scenarios: [                           // scénarios exécutables livrés avec la doc
    { id: "premiere-commande", title: "Commander un animal", url: "/scenarios/premiere-commande.json", pinned: true }
  ],
  features: {
    scenarios: true,                     // false retire la fonctionnalité en entier
    audit: true,                         // false retire l'audit de schéma
    onboarding: false,                   // true ajoute la page « Premier appel » générée (#/first-call)
    ci: true                             // false retire le panneau « Automatiser ce scénario »
  },
  branding: {
    productName: "API Acme",             // nom dans l'en-tête
    logoUrl: "/logo.svg",                // logo dans l'en-tête
    footerLinks: [{ label: "Statut", url: "https://status.example.com" }]
  },
  tryIt: {
    proxyUrl: null,                      // proxy CORS optionnel que vous hébergez — "{{target}}" = URL cible encodée
    requestCredentials: "same-origin"    // "include" pour l'auth par cookie de session cross-origin
  },
  history: {
    maxEntries: 500,                     // purge au-delà de ce nombre…
    maxAgeDays: 30                       // …ou de cet âge (racine uniquement en multi-spec)
  },
  oauth: {
    // Clé = le nom du scheme dans securitySchemes. Jamais de client secret.
    acme_auth: { clientId: "public-client-id" }
  },
  seo: {
    index: true                          // false injecte un noindex robots avant le premier rendu (racine uniquement)
  }
}

openapi

CléCe qu’elle fait
openapi.urlURL du schéma OpenAPI 3.0.x–3.2.x, JSON ou YAML. Le serveur qui l’héberge doit autoriser la lecture cross-origin (CORS).
openapi.specLe schéma lui-même — objet JS ou chaîne JSON — porté par la page : aucune requête, aucun CORS. Gagne sur url.
openapi.specsPlusieurs schémas dans une installation : des entrées [{ id, title, url }], presque toutes les clés surchargeables par entrée. Gagne sur url. Voir le guide multi-spec.
openapi.defaultLa spec affichée à l’arrivée en multi-spec (sinon la première entrée).
openapi.hideMotifs retirant des opérations de la nav, de la recherche et des exports : "tag:Internal", "DELETE /admin/*", "/admin/*", "resetDatabase" (operationId — l’id de repli {method}-{slug} matche aussi). Du masquage documentaire, pas de la sécurité — le navigateur télécharge toujours le schéma complet. Voir Couverture OpenAPI & contrôle du schéma.
openapi.overlaysDocuments OpenAPI Overlay 1.1 (URL ou objet inline) appliqués au schéma au chargement, dans l’ordre déclaré. Toute action en échec est signalée, jamais silencieuse. Sémantique complète dans le guide du schéma.
openapi.userOverlayUn correctif de départ amorcé dans l’éditeur d’overlay du lecteur (null par défaut). Par spec, il remplace le document de la racine au lieu de s’empiler, et ré-amorcer avec un autre document jette les modifications locales du lecteur.

theme

CléDéfautCe qu’elle fait
theme.default"system"Thème appliqué au premier chargement ; le choix persistant du lecteur prime ensuite. "system" suit le prefers-color-scheme de l’OS dans la première paire clair/sombre d’available.
theme.available["apiglow", "apiglow-dark"]Thèmes offerts dans le sélecteur — le défaut est la paire signature de l’app. Les 35 thèmes daisyUI standard sont dans le bundle : en lister un ne coûte rien.
theme.customVos propres thèmes, générés au démarrage depuis des tokens daisyUI — sans étape de build. Racine uniquement en multi-spec. Voir le guide des thèmes.

language

CléDéfautCe qu’elle fait
language.default"browser"Langue de l’interface au premier chargement : "browser" suit les navigator.languages du lecteur dans available ; un code de langue l’épingle. La préférence persistée du lecteur gagne ensuite.
language.availableLangues offertes. L’anglais est dans le bundle ; les autres se téléchargent à la demande.

Environnements

CléDéfautCe qu’elle fait
environments[]Environnements pré-remplis au premier chargement : { name, baseUrl, variables, defaultHeaders }. Une variable est { value, sensitive } ; les sensibles sont masquées à l’affichage et caviardées dans l’historique et les exports. Après le premier chargement, le stockage du lecteur fait foi.
environmentsLockedfalsetrue retire tout point d’entrée de création ou d’édition des environnements — seul le sélecteur reste. Pour les déploiements d’entreprise contrôlés.

Contenu : docsPages, feedback et scenarios

CléDéfautCe qu’elle fait
docsPages[]Pages de prose tissées dans la nav : { slug, title, url } — ou content (le texte lui-même) ou contentId (id d’un élément script non exécutable de la page hôte) à la place de url. Ajoutez kind: "changelog" pour rendre les h2 d’une page en frise de versions ; nav: "bottom" sur une entrée de premier niveau l’envoie en zone d’annexe sous la référence API. Groupes, liens externes, tables multilingues, prise de contrôle de l’accueil (home: true) et forme manifeste JSON : tout est dans le guide des pages de prose.
feedback.urlnullVotre endpoint pour la ligne « Cette page vous a-t-elle été utile ? » des pages de prose, qui envoie en POST { "page": "<slug>", "verdict": "up" | "down" } en JSON. Pas d’URL, pas de ligne — l’app n’envoie jamais rien nulle part d’elle-même. En cross-origin, le type de contenu JSON en fait une requête préliminaire. Surchargeable par spec.
scenarios[]Scénarios livrés avec la doc : { id, title, url } vers des fichiers exportés ; pinned: true en met un en avant sur la page d’accueil. En multi-spec, déclarés uniquement sur les entrées specs[]. Voir écrire des scénarios.

features

CléDéfautCe qu’elle fait
features.scenariostruefalse retire la fonctionnalité scénarios en entier — nav, boutons de capture, routes, index de recherche. Les scénarios locaux déjà stockés survivent, intacts, pour le jour où elle est réactivée.
features.audittruefalse retire l’audit de schéma : le bloc des réglages, la route #/audit, tout calcul.
features.onboardingfalsetrue ajoute une page « Premier appel » générée (#/first-call) en tête de la nav de référence : le GET le plus simple que le schéma déclare, guidé dans la vraie console — langage, identifiants, Envoyer. Absente quand le schéma ne déclare aucune lecture de ce genre. Voir Authentification & onboarding.
features.citruefalse retire le panneau « Automatiser ce scénario » — la remise CI. L’export Arazzo du menu du scénario reste.

branding

CléDéfautCe qu’elle fait
branding.productNameNom affiché dans l’en-tête.
branding.logoUrlnullURL d’un logo affiché dans l’en-tête.
branding.footerLinks[]Vos liens dans la barre de pied de page : [{ label, url }]. La barre elle-même reste — la boîte « À propos » porte les mentions de licence qu’une installation CDN n’embarque dans aucun fichier.

tryIt

CléDéfautCe qu’elle fait
tryIt.proxyUrlnullGabarit de proxy CORS optionnel, {{target}} = URL cible encodée. L’app ne fournit aucun proxy — vous l’hébergez.
tryIt.requestCredentials"same-origin"Mode credentials des fetch de la console d’essai : "omit", "same-origin" ou "include". "include" est requis pour l’auth par cookie de session cross-origin, avec les contraintes serveur détaillées dans Console d’essai & CORS.

history

CléDéfautCe qu’elle fait
history.maxEntries500Purge de l’historique au-delà de ce nombre (le premier seuil atteint l’emporte).
history.maxAgeDays30…ou au-delà de cet âge. Racine uniquement : la rétention est un plafond de stockage navigateur, partagé par toutes les specs.

oauth

CléDéfautCe qu’elle fait
oauth{}Par scheme OAuth2 (clé = son nom dans securitySchemes) : { clientId } utilisé par les flows dans le navigateur, surchargeable par la variable d’environnement auth.X.clientId. Jamais de client secret — la page hôte est publique.

seo

CléDéfautCe qu’elle fait
seo.indextruefalse injecte <meta name="robots" content="noindex"> avant le premier rendu. Racine uniquement : une page est servie à une URL, et un crawler la lit sans choisir de spec. Une requête aux crawlers de bonne volonté, pas une protection — et le CLI bake refuse de tourner sur un config noindex. Accompagnez d’un en-tête X-Robots-Tag pour les fichiers non HTML ; jamais d’un Disallow robots.txt.

Une capacité n’a délibérément aucune clé. Les identifiants fournis par l’hôte passent par une API d’exécution (window.apidoc), pour qu’un jeton ne puisse jamais finir écrit dans la config — voir le pont d’identifiants hôte. Et le correctif local de schéma d’un lecteur est presque aussi privé — openapi.userOverlay peut amorcer son état d’ouverture, mais il relève de ses données, pas de votre configuration : aucun drapeau ne le désactive, parce qu’il ne change que la vue d’un navigateur sur le document et que vos règles hide s’appliquent toujours après lui.

Surcharges par spec (multi-spec)

Dans une installation openapi.specs[], la config racine est le repli et presque toute clé peut être redéclarée sur une entrée. Quatre règles décident de la fusion :

  • Les objets de réglages (tryIt, branding, theme, language, features, oauth) fusionnent clé par clé, la spec gagne — une clé déclarée à null gagne aussi, donc une spec peut désactiver le proxy racine.
  • Les listes nommées (docsPages par slug, environments par nom) fusionnent par identifiant, la spec gagne.
  • hide et overlays s’accumulent — un masquage ne se démasque pas, et les overlays s’appliquent racine d’abord, puis ceux de l’entrée.
  • environmentsLocked est remplacé s’il est déclaré.

Quatre exceptions, chacune signalée nommément en console quand une config se trompe : history est racine uniquement, theme.custom est racine uniquement (les thèmes sont du chrome global, injecté une fois au démarrage), seo est racine uniquement (l’indexabilité décrit la page servie, que toutes les specs partagent), et scenarios va dans l’autre sens — déclarés uniquement sur les entrées specs[], parce qu’un scénario référence les opérations d’une spec précise.