Formatter
/api/v1

Documentazione dell’API

Una richiesta POST formatta un file. Nessuna chiave, nessun account, nessuna firma — l’indirizzo e un corpo sono tutto il contratto.

Avvio rapido

Minifica un foglio di stile e stampa il risultato:

curl
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}

Sostituisci {css} con {js} o {html}, e {minify} con {beautify}. Ogni combinazione funziona.

Endpoint

L’indirizzo di base è {base}. Tutto ciò che segue è un POST, se non indicato diversamente.

Metodo Percorso Scopo
POST/api/v1/minify/{lang}Minifica, risposta JSON
POST/api/v1/minify/{lang}/rawMinifica, risposta in testo semplice
POST/api/v1/beautify/{lang}Formatta, risposta JSON
POST/api/v1/beautify/{lang}/rawFormatta, risposta in testo semplice
GET/api/v1/limitsQuanto resta a questo IP, senza consumare una richiesta
GET/api/v1/healthControllo di attività, mai soggetto a limiti

{lang} è css, js oppure html.

Inviare il codice

Su ogni endpoint sono accettate tre forme di corpo — scegli quella che il tuo client rende più semplice.

Codificato come modulo

Un campo {input}, {type}. È la forma che le API di minificazione accettano per convenzione, quindi uno script esistente cambia solo indirizzo.

curl
curl --data-urlencode 'input=body{margin:0;padding:0}' \
  https://formatter.nextwell.top/api/v1/beautify/css

JSON

{type} con una stringa {input}.

curl
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

Corpo grezzo

Qualsiasi altro content type: il corpo è il codice. Comodo per {example}.

curl
curl --data-binary @style.css \
  -H 'Content-Type: text/css' \
  https://formatter.nextwell.top/api/v1/minify/css

Dimensione

2 MB per richiesta. Tutto ciò che è più grande torna come 413 senza essere letto.

Parametri di query

Nome Valori Significato
indent 2 4 tab Solo per la formattazione: quanto vale un livello di indentazione.
curl
curl --data-urlencode 'input=.a{color:red}' \
  'https://formatter.nextwell.top/api/v1/beautify/css?indent=tab'

La risposta

Una chiamata riuscita restituisce JSON:

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}"
}
Campo Tipo Significato
okbooleanSempre true in caso di successo.
actionstringminify o beautify — ciò che è stato richiesto.
languagestringcss, js o html.
input_bytesnumberDimensione di ciò che è stato inviato, in byte.
output_bytesnumberDimensione del risultato, in byte.
saved_bytesnumberLa differenza; negativa quando si formatta.
saved_percentnumberLa stessa differenza in percentuale, con un decimale.
duration_msnumberQuanto è durato il lavoro, in millisecondi.
outputstringIl codice formattato.

Risposte in testo semplice

Aggiungi {raw} a un qualsiasi endpoint di formattazione e il corpo è il risultato e nient’altro, come {type}. Le intestazioni restano le stesse. Utile quando a chiamare è una shell:

curl
curl -s --data-binary @app.js \
  -H 'Content-Type: text/javascript' \
  https://formatter.nextwell.top/api/v1/minify/js/raw > app.min.js

Intestazioni della risposta

Intestazione Significato
X-Formatter-DurationTempo di elaborazione in millisecondi.
X-RateLimit-Remaining-Second … -MonthQuanto resta a questo IP in ciascuna finestra.
Retry-AfterSu un 429: secondi che mancano alla riapertura della finestra esaurita più stretta.
curl
curl -s -D - -o /dev/null --data-urlencode 'input=.a{color:red}' \
  https://formatter.nextwell.top/api/v1/minify/css

Errori

Ogni errore è JSON con la stessa forma:

JSON
{
  "errors": [
    { "status": 429, "title": "Too many requests", "detail": "…" }
  ]
}
Stato Titolo Quando
400Missing input Bad requestNessun corpo, oppure un campo input vuoto.
404Not foundIl percorso non esiste.
405Method not allowedUn endpoint di formattazione chiamato con qualcosa di diverso da POST.
413Payload too largeIl corpo supera i 2 MB.
415Unsupported languageIl linguaggio nel percorso non è css, js o html.
422Malformed inputIl formattatore ha rifiutato il sorgente — di solito un errore di sintassi — oppure l’elaborazione ha richiesto troppo tempo.
429Too many requestsUna delle finestre di limite è esaurita. Leggi Retry-After.
500Internal errorTutto il resto.

Limiti di frequenza

Per indirizzo IP, cinque finestre scorrevoli, applicate tutte insieme. Una richiesta deve stare in tutte e cinque.

Finestra Limite
Al secondo{n} richieste
Al minuto{n} richieste
All’ora{n} richieste
Al giorno{n} richieste
Al mese{n} richieste

Quando una finestra è esaurita la risposta è 429 con un’intestazione Retry-After che indica i secondi mancanti alla riapertura della più stretta. Nulla viene messo in coda.

I contatori stanno in un piccolo database su disco, quindi riavviare il servizio non regala a nessuno una giornata nuova.

{endpoint} riporta lo stato attuale di tutte e cinque le finestre senza consumarne una.

curl
curl https://formatter.nextwell.top/api/v1/limits

Che cosa viene conservato

Niente. Il codice viene inviato al nostro server, tenuto in memoria per la durata della richiesta e scartato. Non viene scritto su disco e non compare mai in un log. I log riportano soltanto: un hash troncato dell’IP, il linguaggio, l’azione, il numero di byte e la durata.

Domande

Serve una chiave?

No. Il servizio è aperto e il limite è invece per indirizzo IP.

Il mio codice viene inviato da qualche parte?

Solo al nostro server. Lì viene elaborato tutto, in memoria; il codice non viene né conservato né registrato nei log.

Posso usarlo in uno script di build?

Sì, è a questo che servono gli endpoint raw. Resta entro i limiti.

Perché il mio JavaScript minificato è rinominato?

Il minificatore accorcia i nomi delle variabili locali: è sicuro ed è da lì che viene gran parte del risparmio. Formattare non riporta indietro i nomi originali — non può farlo nulla.

Qual è il file più grande che posso inviare?

2 MB in una richiesta. I file più grandi vengono rifiutati con 413 invece di essere troncati.