Une page, une config, un script.
L’installation complète
<!doctype html>
<html>
<head><title>My API docs</title></head>
<body>
<script id="api-doc-config" type="application/json">
{ "openapi": { "url": "https://example.com/openapi.json" } }
</script>
<script src="https://cdn.jsdelivr.net/npm/apiglow@0.1.0/dist/app.js" type="module"></script>
</body>
</html>Ce n’est pas un aperçu : c’est toute l’installation. app.js s’initialise seul — il lit le bloc de config, injecte son propre CSS (résolu à côté du bundle) et construit l’interface entière dans la page. Rien à builder, rien à générer, rien à faire tourner côté serveur.
Ce src pointe vers un CDN public. Si vous préférez ne dépendre de rien d’autre que votre propre origine, servez le bundle vous-même depuis npm — le bloc de config ci-dessous ne change pas, cette ligne-là seulement.
Deux détails sont volontaires et méritent d’être connus :
- L’id de l’élément de config est
api-doc-config, et le repli globalwindow.API_DOC_CONFIG. Le préfixeapidocest délibéré et stable, pour qu’un renommage du produit n’invalide jamais une page déployée ni les données stockées chez ses lecteurs — ne le « corrigez » pas enapiglow; recopiez-le tel quel. - La config est du JSON strict (elle vit dans un script
type="application/json") : pas de commentaires, pas de virgule finale. Pour garder une config commentée, passez par le repliwindow.API_DOC_CONFIGdans un script classique.
openapi.url ou openapi.spec
Une seule clé est requise : où se trouve le schéma.
openapi.urlpointe vers un document OpenAPI 3.0.x / 3.1.x / 3.2.x, JSON ou YAML (un document Swagger 2.0 est converti au chargement). Si le serveur qui l’héberge n’est pas l’origine de la doc, il doit autoriser la lecture cross-origin — voir Console d’essai & CORS.openapi.spectransporte le document lui-même, objet JS ou chaîne JSON : aucune requête, donc aucun CORS à négocier. En échange, la page porte le poids du schéma et doit être redéployée à chaque évolution de l’API. Si les deux sont posés,specgagne.
Plusieurs API dans la même installation ? C’est openapi.specs, qui a son propre guide.
Une config plus complète
Tout ce qui dépasse openapi a une valeur par défaut raisonnable ; le bloc ci-dessous montre la forme des options courantes. La référence de configuration documente chaque clé.
{
"openapi": { "url": "https://example.com/openapi.json" },
"theme": { "default": "light", "available": ["light", "dark", "corporate"] },
"language": { "default": "en", "available": ["en", "fr"] },
"environments": [],
"docsPages": [],
"scenarios": [],
"features": { "scenarios": true, "audit": true },
"tryIt": { "proxyUrl": null },
"history": { "maxEntries": 500, "maxAgeDays": 30 }
}Hébergement
N’importe quel hébergement statique HTTP(S) suffit — un bucket S3, GitHub Pages, un dossier derrière nginx. file:// ne fonctionne pas : l’app est un module ES et télécharge ses ressources, deux choses que le navigateur bloque depuis un fichier local. Pour un aperçu en local, un serveur statique en une ligne fait l’affaire (npx serve, python3 -m http.server).
L’héberger vous-même, depuis npm
Le snippet ci-dessus charge le bundle depuis un CDN public. Si vous préférez que votre documentation ne dépende de rien d’autre que votre propre origine — un intranet, un réseau coupé du monde, une CSP sans tiers dedans — installez le paquet et servez son dist/ vous-même. Une seule ligne du snippet change.
npm install apiglow
cp -r node_modules/apiglow/dist static/apiglow<script src="/apiglow/app.js" type="module"></script>Le bloc de config ne bouge pas. Ce que vous y gagnez : la version figée dans votre lockfile — relue, auditée et mise à jour comme n’importe quelle dépendance — et plus une seule requête qui sort de votre origine à l’exécution.
Ce que votre build fait déjà pour publier des fichiers statiques suffira : le publicDir de Vite, un plugin de copie webpack, un cp -r en CI. Il n’y a rien à compiler.
Gardez app.js avec le reste de dist/. Il trouve app.css, les packs de langue i18n/ et fonts/ relativement à lui-même : les quatre doivent rester voisins où que vous les publiiez — copiez le dossier, pas le fichier.
C’est cette même règle qui explique qu’ApiGlow ne passe pas par votre bundler JavaScript. Fondu dans l’un de vos chunks, app.js se met à chercher sa feuille de style et ses packs de langue à côté de votre code, ne trouve ni l’une ni les autres, et rend la documentation sans aucun style. L’installer, le servir, pointer une balise <script> dessus : c’est la forme prise en charge, et c’est celle qui garde l’app en un seul fichier lisible.
Laissez faire un agent
Si c’est un agent qui installe, donnez-lui ce prompt tel quel :
Add interactive API documentation to my project with ApiGlow
(https://apiglow.dev).
1. Create a static page (e.g. docs/index.html) containing exactly:
- a <script id="api-doc-config" type="application/json"> block with:
{ "openapi": { "url": "<my OpenAPI schema URL or relative path>" } }
- <script src="https://cdn.jsdelivr.net/npm/apiglow@0.1.0/dist/app.js"
type="module"></script>
2. My OpenAPI schema is at: [FILL IN — URL or path]
3. Serve the page over HTTP(S) — file:// does not work (ES modules).
4. If my API is on another origin, tell me it must allow CORS from the
docs origin for the try-it console to work.
Config reference: https://apiglow.dev/docs/configuration/