/api/v1
Documentation de l’API
Une seule requête POST formate un fichier. Pas de clé, pas de compte, pas de signature — l’adresse et un corps, c’est tout le contrat.
Démarrage rapide
Minifier une feuille de style et afficher le résultat :
curl --data-urlencode 'input=.card { padding: 8px; margin: 0 auto; }' \
https://formatter.nextwell.top/api/v1/minify/css/raw
# .card{padding:8px;margin:0 auto}
Remplacez {css} par {js} ou {html}, et {minify} par {beautify}. Toutes les combinaisons fonctionnent.
Points de terminaison
L’adresse de base est {base}. Tout ce qui suit est un POST, sauf mention contraire.
| Méthode | Chemin | Rôle |
|---|---|---|
| POST | /api/v1/minify/{lang} | Minifier, réponse JSON |
| POST | /api/v1/minify/{lang}/raw | Minifier, réponse en texte brut |
| POST | /api/v1/beautify/{lang} | Formater, réponse JSON |
| POST | /api/v1/beautify/{lang}/raw | Formater, réponse en texte brut |
| GET | /api/v1/limits | Ce qu’il reste à cette IP, sans consommer de requête |
| GET | /api/v1/health | Test de disponibilité, jamais limité |
{lang} vaut css, js ou html.
Envoyer le code
Trois formes de corps sont acceptées sur chaque point de terminaison — prenez celle que votre client rend la plus simple.
Encodé en formulaire
Un champ {input}, {type}. C’est la forme qu’attendent habituellement les API de minification : un script existant n’a qu’à changer d’adresse.
curl --data-urlencode 'input=body{margin:0;padding:0}' \
https://formatter.nextwell.top/api/v1/beautify/css
JSON
{type} avec une chaîne {input}.
curl -H 'Content-Type: application/json' \
-d '{"input":"const a=1;const b=a+1;console.log(b)"}' \
https://formatter.nextwell.top/api/v1/beautify/js
Corps brut
Tout autre type de contenu : le corps est le code. Pratique pour {example}.
curl --data-binary @style.css \
-H 'Content-Type: text/css' \
https://formatter.nextwell.top/api/v1/minify/css
Taille
2 Mo par requête. Tout ce qui dépasse revient en 413 sans être lu.
Paramètres de requête
| Nom | Valeurs | Signification |
|---|---|---|
indent |
2 4 tab |
Formatage uniquement : ce que vaut un niveau d’indentation. |
curl --data-urlencode 'input=.a{color:red}' \
'https://formatter.nextwell.top/api/v1/beautify/css?indent=tab'
La réponse
Un appel réussi renvoie du JSON :
{
"ok": true,
"action": "minify",
"language": "css",
"input_bytes": 1024,
"output_bytes": 640,
"saved_bytes": 384,
"saved_percent": 37.5,
"duration_ms": 42,
"output": "p{color:red}"
}
| Champ | Type | Signification |
|---|---|---|
ok | boolean | Toujours true en cas de succès. |
action | string | minify ou beautify — ce qui a été demandé. |
language | string | css, js ou html. |
input_bytes | number | Taille de ce qui a été envoyé, en octets. |
output_bytes | number | Taille du résultat, en octets. |
saved_bytes | number | La différence ; négative lors d’un formatage. |
saved_percent | number | La même différence en pourcentage, une décimale. |
duration_ms | number | Durée du traitement, en millisecondes. |
output | string | Le code formaté. |
Réponses en texte brut
Ajoutez {raw} à n’importe quel point de terminaison de formatage et le corps est le résultat, rien d’autre, en {type}. Les en-têtes sont les mêmes. Utile quand l’appelant est un shell :
curl -s --data-binary @app.js \
-H 'Content-Type: text/javascript' \
https://formatter.nextwell.top/api/v1/minify/js/raw > app.min.js
En-têtes de réponse
| En-tête | Signification |
|---|---|
X-Formatter-Duration | Temps de traitement en millisecondes. |
X-RateLimit-Remaining-Second … -Month | Ce qu’il reste à cette IP dans chaque fenêtre. |
Retry-After | Sur un 429 : secondes avant la réouverture de la fenêtre épuisée la plus stricte. |
curl -s -D - -o /dev/null --data-urlencode 'input=.a{color:red}' \
https://formatter.nextwell.top/api/v1/minify/css
Erreurs
Chaque erreur est du JSON, toujours de la même forme :
{
"errors": [
{ "status": 429, "title": "Too many requests", "detail": "…" }
]
}
| Statut | Titre | Quand |
|---|---|---|
| 400 | Missing input Bad request | Aucun corps, ou un champ input vide. |
| 404 | Not found | Ce chemin n’existe pas. |
| 405 | Method not allowed | Un point de terminaison de formatage appelé avec autre chose que POST. |
| 413 | Payload too large | Le corps dépasse 2 Mo. |
| 415 | Unsupported language | Le langage dans le chemin n’est ni css, ni js, ni html. |
| 422 | Malformed input | Le formateur a refusé la source (en général une erreur de syntaxe) ou le traitement a pris trop de temps. |
| 429 | Too many requests | Une des fenêtres de limitation est épuisée. Lisez Retry-After. |
| 500 | Internal error | Tout le reste. |
Limites de débit
Par adresse IP, cinq fenêtres glissantes, toutes appliquées en même temps. Une requête doit tenir dans les cinq.
| Fenêtre | Limite |
|---|---|
| Par seconde | {n} requêtes |
| Par minute | {n} requêtes |
| Par heure | {n} requêtes |
| Par jour | {n} requêtes |
| Par mois | {n} requêtes |
Quand une fenêtre est épuisée, la réponse est un 429 avec un en-tête Retry-After donnant les secondes avant la réouverture de la plus stricte. Rien n’est mis en file d’attente.
Les compteurs vivent dans une petite base de données sur disque : redémarrer le service n’offre à personne une journée neuve.
{endpoint} rapporte l’état courant des cinq fenêtres sans en consommer une.
curl https://formatter.nextwell.top/api/v1/limits
Ce qui est conservé
Rien. Le code est envoyé à notre serveur, conservé en mémoire le temps de la requête, puis abandonné. Il n’est pas écrit sur disque et n’apparaît jamais dans un journal. Les journaux ne contiennent que : un hachage tronqué de l’IP, le langage, l’action, le nombre d’octets et la durée.
Questions
Ai-je besoin d’une clé ?
Non. Le service est ouvert ; la limite porte sur l’adresse IP.
Mon code est-il envoyé quelque part ?
Uniquement vers notre propre serveur. Tout y est traité, en mémoire ; le code n’est ni conservé ni journalisé.
Puis-je l’utiliser dans un script de build ?
Oui, c’est à cela que servent les points de terminaison raw. Restez dans les limites.
Pourquoi mon JavaScript minifié est-il renommé ?
Le minificateur raccourcit les noms des variables locales, ce qui est sans risque et représente l’essentiel du gain. Le formatage ne ramènera pas les noms d’origine — rien ne le peut.
Quelle est la taille maximale d’un fichier ?
2 Mo en une requête. Les fichiers plus gros sont refusés avec un 413 plutôt que tronqués.