Formatter
/api/v1

Dokumentacja API

Jedno żądanie POST formatuje plik. Bez klucza, bez konta, bez podpisu — cały kontrakt to adres i treść żądania.

Szybki start

Zminifikuj arkusz stylów i wypisz wynik:

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}

Zamień {css} na {js} albo {html}, a {minify} na {beautify} — działa każda kombinacja.

Endpointy

Adres bazowy to {base}. Wszystko poniżej to POST, o ile nie napisano inaczej.

Metoda Ścieżka Przeznaczenie
POST/api/v1/minify/{lang}Minifikacja, odpowiedź JSON
POST/api/v1/minify/{lang}/rawMinifikacja, odpowiedź zwykłym tekstem
POST/api/v1/beautify/{lang}Formatowanie, odpowiedź JSON
POST/api/v1/beautify/{lang}/rawFormatowanie, odpowiedź zwykłym tekstem
GET/api/v1/limitsIle zostało temu adresowi IP, bez zużywania żądania
GET/api/v1/healthSprawdzenie działania, nigdy nie limitowane

{lang} to css, js albo html.

Wysyłanie kodu

Każdy endpoint przyjmuje treść w trzech postaciach — wybierz tę, którą łatwiej złożyć twojemu klientowi.

Formularz urlencoded

Pole {input}, {type}. Taką postać przyjmują zwyczajowo API minifikacji, więc istniejący skrypt zmienia tylko adres.

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

JSON

{type} z łańcuchem znaków w polu {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

Surowa treść

Dowolny inny content type: treścią jest sam kod. Wygodne przy {example}.

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

Rozmiar

2 MB na żądanie. Wszystko większe wraca jako 413 i nie jest nawet czytane.

Parametry zapytania

Nazwa Wartości Opis
indent 2 4 tab Tylko przy formatowaniu: czym jest jeden poziom wcięcia.
curl
curl --data-urlencode 'input=.a{color:red}' \
  'https://formatter.nextwell.top/api/v1/beautify/css?indent=tab'

Odpowiedź

Udane wywołanie zwraca 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}"
}
Pole Typ Opis
okbooleanPrzy powodzeniu zawsze true.
actionstringminify albo beautify — o co poproszono.
languagestringcss, js albo html.
input_bytesnumberRozmiar tego, co wysłano, w bajtach.
output_bytesnumberRozmiar wyniku, w bajtach.
saved_bytesnumberRóżnica; przy formatowaniu ujemna.
saved_percentnumberTa sama różnica w procentach, z jednym miejscem po przecinku.
duration_msnumberIle trwała praca, w milisekundach.
outputstringPrzetworzony kod.

Odpowiedzi zwykłym tekstem

Dopisz {raw} do dowolnego endpointu formatowania, a treścią odpowiedzi będzie wyłącznie wynik, jako {type}. Nagłówki są te same. Przydatne, gdy wywołanie idzie z powłoki:

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

Nagłówki odpowiedzi

Nagłówek Opis
X-Formatter-DurationCzas przetwarzania w milisekundach.
X-RateLimit-Remaining-Second … -MonthIle zostało w każdym oknie dla tego adresu IP.
Retry-AfterPrzy 429: sekundy do otwarcia najciaśniejszego wyczerpanego okna.
curl
curl -s -D - -o /dev/null --data-urlencode 'input=.a{color:red}' \
  https://formatter.nextwell.top/api/v1/minify/css

Błędy

Każdy błąd to JSON o tym samym kształcie:

JSON
{
  "errors": [
    { "status": 429, "title": "Too many requests", "detail": "…" }
  ]
}
Kod Pole title Kiedy
400Missing input Bad requestBrak treści albo puste pole input.
404Not foundNie ma takiej ścieżki.
405Method not allowedDo endpointu formatowania trafiło coś innego niż POST.
413Payload too largeTreść przekracza 2 MB.
415Unsupported languageJęzyk w ścieżce to nie css, js ani html.
422Malformed inputNarzędzie formatujące odrzuciło źródło — zwykle to błąd składni — albo przetwarzanie trwało zbyt długo.
429Too many requestsJedno z okien limitu jest wyczerpane. Sprawdź Retry-After.
500Internal errorWszystko inne.

Limity żądań

Na adres IP, pięć okien przesuwnych, wszystkie egzekwowane naraz. Żądanie musi zmieścić się we wszystkich pięciu.

Okno Limit
Na sekund꯹dań: {n}
Na minut꯹dań: {n}
Na godzin꯹dań: {n}
Na dob꯹dań: {n}
Na miesiącŻądań: {n}

Gdy okno jest wyczerpane, wraca 429 z nagłówkiem Retry-After podającym sekundy do otwarcia najciaśniejszego z nich. Nic nie jest kolejkowane.

Liczniki leżą w małej bazie na dysku, więc restart usługi nikomu nie daje nowej doby.

{endpoint} pokazuje bieżący stan wszystkich pięciu okien, nie zużywając żadnego z nich.

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

Co jest przechowywane

Nic. Kod trafia na nasz serwer, jest trzymany w pamięci przez czas trwania żądania i odrzucany. Nie jest zapisywany na dysku i nigdy nie pojawia się w logach. W logach znajdują się tylko: skrócony skrót IP, język, akcja, liczba bajtów i czas trwania.

Pytania

Czy potrzebuję klucza?

Nie. Usługa jest otwarta, a limity liczone są po adresie IP.

Czy mój kod jest gdzieś wysyłany?

Tylko na nasz własny serwer. Całe przetwarzanie odbywa się tam, w pamięci; kod nie jest ani przechowywany, ani logowany.

Czy mogę użyć tego w skrypcie budowania?

Tak, po to są endpointy /raw. Trzymaj się limitów.

Dlaczego w zminifikowanym kodzie JavaScript zmieniły się nazwy?

Minifikator skraca nazwy zmiennych lokalnych — to bezpieczne i stąd bierze się większość oszczędności. Formatowanie nie przywróci oryginalnych nazw: nie przywróci ich już nic.

Jaki największy plik mogę wysłać?

2 MB w jednym żądaniu. Większe pliki są odrzucane z 413, a nie obcinane.