/api/v1
API belgeleri
Tek bir POST isteği bir dosyayı biçimlendirir. Anahtar yok, hesap yok, imza yok: adres ile gövde, sözleşmenin tamamı.
Hızlı başlangıç
Bir stil dosyasını küçültün ve sonucu yazdırın:
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}
{css} yerine {js} ya da {html}, {minify} yerine {beautify} yazın. Her kombinasyon çalışır.
Uç noktalar
Temel adres {base}. Aksi belirtilmedikçe aşağıdakilerin hepsi POST'tur.
| Yöntem | Yol | Amaç |
|---|---|---|
| POST | /api/v1/minify/{lang} | Küçültme, JSON yanıt |
| POST | /api/v1/minify/{lang}/raw | Küçültme, düz metin yanıt |
| POST | /api/v1/beautify/{lang} | Biçimlendirme, JSON yanıt |
| POST | /api/v1/beautify/{lang}/raw | Biçimlendirme, düz metin yanıt |
| GET | /api/v1/limits | Bu IP'ye kalan hak, istek harcamadan |
| GET | /api/v1/health | Canlılık kontrolü, hiçbir zaman limite takılmaz |
{lang}, css, js veya html olabilir.
Kodu göndermek
Her uç nokta üç gövde biçimini kabul eder; istemcinizde hangisi kolaysa onu seçin.
Form kodlamalı
{type} olarak bir {input} alanı. Küçültme API’lerinin alışılmış olarak beklediği biçim budur, yani mevcut bir betikte yalnızca adres değişir.
curl --data-urlencode 'input=body{margin:0;padding:0}' \
https://formatter.nextwell.top/api/v1/beautify/css
JSON
{input} dizesini içeren {type}.
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
Ham gövde
Başka herhangi bir içerik türü: gövdenin kendisi koddur. {example} için kullanışlı.
curl --data-binary @style.css \
-H 'Content-Type: text/css' \
https://formatter.nextwell.top/api/v1/minify/css
Boyut
İstek başına 2 MB. Daha büyüğü okunmadan 413 ile geri döner.
Sorgu parametreleri
| Ad | Değerler | Anlamı |
|---|---|---|
engine |
auto upstream local |
Bu isteği hangi motorun karşılayacağı. Varsayılan olan {auto}, kota bitene kadar CSS ve JS küçültmesini dış servise gönderir, kota bittiğinde yerel motora düşer. {upstream} yerele düşmek yerine hata döndürür. {local} sunucudan hiç çıkmaz. |
indent |
2 4 tab |
Yalnızca biçimlendirmede: bir girinti seviyesinin ne olduğu. |
curl --data-urlencode 'input=.a{color:red}' \
'https://formatter.nextwell.top/api/v1/beautify/css?indent=tab&engine=local'
Yanıt
Başarılı bir çağrı JSON döndürür:
{
"ok": true,
"action": "minify",
"language": "css",
"engine": "upstream",
"input_bytes": 1024,
"output_bytes": 640,
"saved_bytes": 384,
"saved_percent": 37.5,
"duration_ms": 42,
"output": "p{color:red}"
}
| Alan | Tür | Anlamı |
|---|---|---|
ok | boolean | Başarı durumunda her zaman true. |
action | string | minify ya da beautify: ne istendiyse o. |
language | string | css, js veya html. |
engine | string | İşi dış servis yaptıysa upstream, bu sunucu yaptıysa local. |
input_bytes | number | Gönderilenin bayt cinsinden boyutu. |
output_bytes | number | Sonucun bayt cinsinden boyutu. |
saved_bytes | number | Aradaki fark; biçimlendirmede negatif olur. |
saved_percent | number | Aynı fark, tek ondalıklı yüzde olarak. |
duration_ms | number | İşin ne kadar sürdüğü, milisaniye. |
output | string | Biçimlenmiş kodun kendisi. |
Düz metin yanıtlar
Herhangi bir biçimlendirme uç noktasının sonuna {raw} ekleyin; gövde yalnızca sonuçtan ibaret olur, {type} olarak. Başlıklar aynıdır. Çağıran taraf bir kabuksa kullanışlıdır:
curl -s --data-binary @app.js \
-H 'Content-Type: text/javascript' \
https://formatter.nextwell.top/api/v1/minify/js/raw > app.min.js
Yanıt başlıkları
| Başlık | Anlamı |
|---|---|
X-Formatter-Engine | Sonucu hangi motorun ürettiği. |
X-Formatter-Duration | Milisaniye cinsinden işlem süresi. |
X-RateLimit-Remaining-Second … -Month | Bu IP için her pencerede kalan hak. |
Retry-After | 429 durumunda: tükenmiş pencerelerin en darının yeniden açılmasına kalan saniye. |
curl -s -D - -o /dev/null --data-urlencode 'input=.a{color:red}' \
https://formatter.nextwell.top/api/v1/minify/css
Hatalar
Her hata, bu türden bir API için alışılmış biçimde JSON’dur; yani o biçimi zaten işleyen bir istemci bizimkileri de işler:
{
"errors": [
{ "status": 429, "title": "Too many requests", "detail": "…" }
]
}
| Durum | Başlık | Ne zaman |
|---|---|---|
| 400 | Missing input Bad request | Gövde yok ya da input alanı boş. |
| 404 | Not found | Böyle bir yol yok. |
| 405 | Method not allowed | Bir biçimlendirme uç noktası POST dışında bir yöntemle çağrıldı. |
| 413 | Payload too large | Gövde 2 MB'ı aşıyor. |
| 415 | Unsupported language | Yoldaki dil css, js veya html değil. |
| 422 | Malformed input | Biçimlendirici kaynak kodu reddetti; genellikle bir sözdizimi hatası. |
| 429 | Too many requests | İstek limiti pencerelerinden biri tükendi. Retry-After değerine bakın. |
| 502 | Upstream failed | Yalnızca engine=upstream ile: dış servis yanıt vermedi. Bu ayar olmasaydı istek yerel motora düşerdi. |
| 500 | Internal error | Diğer her şey. |
İstek limitleri
IP adresi başına beş kayan pencere, hepsi aynı anda uygulanır. Bir isteğin beşine birden sığması gerekir.
| Pencere | Limit |
|---|---|
| Saniyede | {n} istek |
| Dakikada | {n} istek |
| Saatte | {n} istek |
| Günde | {n} istek |
| Ayda | {n} istek |
Bir pencere tükendiğinde yanıt 429 olur ve Retry-After başlığı en dar pencerenin yeniden açılmasına kaç saniye kaldığını verir. Hiçbir istek kuyruğa alınmaz.
Sayaçlar diskteki küçük bir veritabanında tutulur, bu yüzden servisi yeniden başlatmak kimseye yepyeni bir gün kazandırmaz.
{endpoint}, hiçbirini harcamadan beş pencerenin de güncel durumunu bildirir.
curl https://formatter.nextwell.top/api/v1/limits
Dış küçültme servisi, ziyaretçi başına değil, sitenin tamamı için dakikada 30 isteğe izin verir. Bunu ortak bir kova takip eder: kova boşaldığında CSS ve JS küçültme, beklemek ya da hata vermek yerine yerel motorla yapılır. Yoğunluk altında engine alanının değiştiğini görebilirsiniz; çıktı her iki durumda da geçerli kalır.
İşi hangi motor yapar
İki yol, tek sözleşme.
Bulut — CSS ve JS küçültme
Dış bir küçültme servisi; hızlı ve temkinlidir: kaldırılabilecek boşlukları kaldırır, kaldırılamayacakları korur, böylece {calc} gibi şeyler olduğu gibi kalır. Bu servis kodu yalnızca aktarır, kendinden hiçbir şey eklemez.
Yerel — geri kalan her şey
HTML küçültme, üç biçimlendiricinin hepsi ve ortak dış kota bittiğinde ya da servis çevrimdışı kalacak şekilde ayarlandığında CSS/JS küçültme. {tools} üzerine kuruludur; boştaki sürecin küçük kalması için bunlar yalnızca bir istek gerektirdiğinde yüklenir.
Bir isteği tek bir yola sabitlemek için {param} kullanın.
Ne saklanıyor
Hiçbir şey. Kod, istek süresince bellekte tutulur ve sonra atılır. Diske yazılmaz, hiçbir günlükte görünmez. Günlüklerde yer alanlar: IP'nin kısaltılmış bir hash'i, dil, işlem, bayt sayısı, motor ve süre.
Sorular
Anahtar gerekiyor mu?
Hayır. Servis herkese açıktır, bunun yerine IP adresine göre sınırlanır.
Kodum bir yere gönderiliyor mu?
CSS ve JavaScript küçültme, dış bir küçültme servisine yönlendirilir; yani o kod bu sunucudan çıkar. Biçimlendirme ve tüm HTML işleri bu sunucuda yapılır. Her şeyin burada kalması için engine=local kullanın.
Derleme betiğinde kullanabilir miyim?
Evet, raw uç noktaları tam da bunun için var. Limitlerin içinde kalın ve yoğunluk altında motorun yerele düşebileceğini unutmayın.
Küçültülmüş JavaScript'imdeki adlar neden değişmiş?
Dış küçültücü yerel değişken adlarını kısaltır; bu güvenlidir ve kazancın büyük kısmı buradan gelir. Biçimlendirmek özgün adları geri getirmez, hiçbir şey getiremez.
Gönderebileceğim en büyük dosya ne kadar?
Tek istekte 2 MB. Daha büyük dosyalar kırpılmaz, 413 ile reddedilir.