IlmHamroh
JavaScript Full-stack/25-qism. HTTP, Express va REST API20/51-dars16 daqiqa
Mundarija (21)

HTTP status kodlari: 201, 204, 400 va 422, 409, 429 — qaysi birini tanlash

Qisqacha: Status kod — javobning birinchi va eng qisqa xabari. Yaratildi — 201 va Location sarlavhasi, tanasiz muvaffaqiyat — 204. Mijoz xatosi — 4xx: buzuq JSON 400, tushunarli, lekin qoidaga zid ma'lumot 422, yo'q resurs 404, noto'g'ri metod 405 va Allow, ziddiyat 409, noto'g'ri Content-Type 415, juda ko'p so'rov 429 va Retry-After. Server xatosi — 5xx. Yo'naltirishda 307/308 metodni saqlaydi, 301/302 esa POST'ni GET'ga aylantiradi — biz tekshirdik.

Bu darsda

  • Muvaffaqiyat kodlarini (200, 201, 202, 204) to'g'ri tanlaysiz va Location qo'yasiz.
  • 301, 302, 303, 307, 308 farqini haqiqiy natija bilan bilasiz.
  • 400 va 422, 401 va 403, 404 va 410 farqini tushuntira olasiz.
  • 409, 415, 429, 503 va Retry-After ni qachon ishlatishni bilasiz.
  • vazifalar-api ning to'liq status kodlar jadvalini tekshirasiz.

Oldin bilishingiz kerak: HTTP metodlari va status kodlari, HTTP metodlari semantikasi, res obyekti.

1. Nega bu kerak?

Mijoz — frontend, mobil ilova yoki boshqa server — javobni o'qishdan oldin status kodga qaraydi. Uning keyingi harakati shu bitta raqamga bog'liq:

  • 2xx — muvaffaqiyat, natijani ko'rsat.
  • 4xx — mijoz xatosi, foydalanuvchiga ayt, qayta yuborma (o'zgartirmaguncha).
  • 5xx — server xatosi, keyinroq qayta urinish mumkin.
  • 429, 503 — kut va qayta urin.

Agar server hamma narsaga 200 qaytarib, tanasida {"xato": "topilmadi"} yozsa, nima bo'ladi? fetch res.ok ni true deydi (fetch darsi). Kesh xato javobni saqlab qoladi. Monitoring "hammasi joyida" ko'rsatadi. Qayta urinish mexanizmi nima qilishni bilmaydi.

O'xshatish: svetofor. Uchta rang butun chorrahani boshqaradi. Haydovchi har mashina bilan gaplashmaydi — rangga qaraydi. Status kod — API'ning svetofori.

2. 2xx — muvaffaqiyat

Kod Nomi Qachon
200 OK Tanali muvaffaqiyat: GET, PUT, PATCH natijasi
201 Created Yangi resurs yaratildi; Location — uning manzili
202 Accepted Qabul qilindi, lekin hali bajarilmadi (fon ishi)
204 No Content Muvaffaqiyat, tana yo'q: DELETE

201 va Location. POST yangi resurs yaratganda mijoz uning manzilini bilishi kerak. Holat 22 da biz yubordik:

text
POST /vazifalar → 201 location: /vazifalar/1 {"id":1,"matn":"Non olish #uy",…}

Location sarlavhasi frontend'ga ID'ni tanadan qidirmasdan olish imkonini beradi. CORS bilan u faqat exposedHeaders da bo'lsa ko'rinadi (Mashhur middleware'lar). Kodda — bitta zanjir:

ts
res.status(201).location(`${req.baseUrl}/${String(v.id)}`).json(v);

204 — tanasiz. DELETE /vazifalar/1 → 204. Tana yozish taqiqlanadi: Express 204 da tanani o'zi tashlab yuboradi. Frontend'da res.json() chaqirsangiz, bo'sh tana SyntaxError beradi — 204 da tanani o'qimang.

202 — keyin bajariladi. "Hisobotni tayyorlash 2 daqiqa oladi" — server darhol 202 va kuzatish manzilini qaytaradi. Bu Bulk va uzoq operatsiyalar darsida.

3. 3xx — yo'naltirish

3.1 Beshta yo'naltirish

Kod Doimiymi Metod saqlanadimi
301 Moved Permanently ha POST → GET bo'lishi mumkin
302 Found yo'q POST → GET bo'lishi mumkin
303 See Other yo'q doim GET
307 Temporary Redirect yo'q saqlanadi
308 Permanent Redirect ha saqlanadi
304 Not Modified — yo'naltirish emas: "keshdagisi yangi"

"Bo'lishi mumkin" — tarixiy sabab. Brauzerlar 301/302 da POST'ni GET'ga aylantirgan, standart buni keyin qonuniylashtirgan. 307 va 308 shu noaniqlikni tuzatish uchun qo'shilgan.

Buni o'z ko'zingiz bilan ko'ring. Quyidagi blok lokal server ochadi: /eski-NNN — NNN kodi bilan /yangi ga yo'naltiradi, /yangi esa kelgan metod va tana hajmini aytadi. fetch har kodga POST yuboradi va yo'naltirishga o'zi ergashadi. Chiqishda har qatorga qarang: /yangi ga qaysi metod va necha bayt tana yetib keldi? Blok Node uchun — o'z terminalingizda ishga tushiring:

js
import { createServer } from "node:http";

const server = createServer((req, res) => {
  const m = req.url.match(/^\/eski-(\d{3})$/);
  if (m) {
    res.writeHead(Number(m[1]), { location: "/yangi" });
    return res.end();
  }
  let hajm = 0;
  req.on("data", (b) => { hajm += b.length; });
  req.on("end", () => res.end(`${req.method}, tana ${hajm} bayt`));
});
await new Promise((ok) => server.listen(0, "127.0.0.1", ok));
const A = `http://127.0.0.1:${server.address().port}`;

for (const kod of [301, 302, 303, 307, 308]) {
  const r = await fetch(`${A}/eski-${kod}`, {
    method: "POST", body: '{"matn":"Non"}',
  });
  console.log(`${kod} → ${await r.text()}`);
}
server.closeAllConnections();
server.close();

Konsolda:

text
301 → GET, tana 0 bayt
302 → GET, tana 0 bayt
303 → GET, tana 0 bayt
307 → POST, tana 14 bayt
308 → POST, tana 14 bayt

Nima bo'ldi? 301 va 302 da yangi vazifa jim yo'qoldi: fetch POST'ni GET'ga aylantirdi va tanani tashladi. 303 ham shunday qildi — lekin u buni ochiq va'da qiladi. Server "200 OK" qaytardi, mijoz hech narsa sezmadi. Shuning uchun API'da:

  • Endpoint doimiy ko'chdi (/v1/vazifalar → /v2/vazifalar) — 308.
  • Vaqtinchalik — 307.
  • "POST'dan keyin natija sahifasiga o't" (HTML forma) — 303.

Express'da res.redirect(url) sukut bo'yicha 302 beradi. Kod kerak bo'lsa: res.redirect(308, url). Eslatma: res.redirect("back") Express 5 da olib tashlangan (Express 5 darsi).

3.2 304 — keshdagisi yangi

Mijoz If-None-Match: <ETag> yuboradi. Resurs o'zgarmagan bo'lsa, server tanasiz 304 qaytaradi va trafik tejaladi. Express buni ETag bilan o'zi qiladi. Kanondagi tuzoq: Node fetch (undici) shartli sarlavha bor so'rovga o'zi Cache-Control: no-cache qo'shadi. Shuning uchun Express 200 beradi; curl bilan esa 304. Tafsiloti — HTTP caching darsida.

Tekshirib ko'ring: Siz POST /vazifa ni POST /vazifalar ga ko'chirdingiz va eski manzilga res.redirect(301, "/vazifalar") qo'ydingiz. Eski mobil ilova nima ko'radi?

Javob

Ko'p mijozlar 301 dan keyin GET /vazifalar yuboradi — tanasiz. Ilova vazifa yaratildi deb o'ylaydi (javob 200, ro'yxat keldi), lekin vazifa yaratilmagan. To'g'risi — 308: metod va tana saqlanadi. Yoki eski manzilda bir muddat to'liq ishlovchi qoldirish.

4. 4xx — mijoz xatosi

4.1 400 va 422

Ikkalasi ham "so'rov noto'g'ri", lekin har xil bosqichda:

  • 400 Bad Request — so'rovni o'qib bo'lmadi: JSON buzuq, query parametri noto'g'ri formatda, id raqam emas.
  • 422 Unprocessable Content — so'rov o'qildi, shakli to'g'ri, lekin mazmuni qoidaga zid: matn bo'sh, noma'lum maydon, PUT'da bajarildi yo'q.

Biz holat 22 ga yubordik:

text
POST buzuq JSON → 400  {"xato":"Tana yaroqli JSON emas"}
POST matn bo'sh → 422  {"xato":"matn 1–200 belgi bo'lishi kerak"}
POST ortiqcha → 422  {"xato":"noma'lum maydon: id"}

(Holat 22 da chegara hali 200 belgi; kanon qarori bilan keyinroq — holat 40 da — 100 ga tushadi, frontend'dagi chegara bilan bir xil.)

O'xshatish: pochta. 400 — konvertdagi manzil o'qib bo'lmaydigan darajada xira. 422 — manzil aniq, lekin xatda imzo yo'q.

Ba'zi API'lar hamma narsaga 400 ishlatadi — bu ham qabul qilingan uslub. Muhimi — bitta API ichida izchil bo'lish. vazifalar-api qoidasi: tahlil (parse) xatosi — 400, validatsiya — 422.

4.2 Boshqa 4xx kodlar

Kod Ma'nosi vazifalar-api misoli
401 Unauthorized Kimligingiz noma'lum (kirmagansiz) auth qismida
403 Forbidden Kimligingiz ma'lum, lekin ruxsat yo'q auth qismida
404 Not Found Resurs yo'q Vazifa 999 topilmadi
405 Method Not Allowed URI bor, metod yo'q; Allow majburiy POST /vazifalar/1
409 Conflict Joriy holat bilan ziddiyat Ro'yxat to'lgan (1000)
410 Gone Bor edi, butunlay o'chirildi eski API versiyasi
413 Content Too Large Tana juda katta 16 KB dan katta
415 Unsupported Media Type Content-Type noto'g'ri text/plain
429 Too Many Requests Juda ko'p so'rov; Retry-After rate limit

Ba'zi juftlarni ajratamiz:

401 va 403. Nomi chalg'itadi: 401 "Unauthorized", lekin ma'nosi "autentifikatsiya yo'q" — siz kimligingizni aytmadingiz. 403 — "bilaman kimligingizni, lekin bu sizga mumkin emas". 401 javobida WWW-Authenticate sarlavhasi bo'lishi kerak.

404 va 403 — maxfiylik uchun. Begona foydalanuvchining vazifasini so'ragan odamga 403 bersangiz, "bunday vazifa bor" deb aytgan bo'lasiz. Ko'p API'lar bunday holatda 404 qaytaradi — mavjudlikni ham yashiradi.

405 va Allow. Kanon topilmasi: Express noto'g'ri metodga o'zi 404 beradi (HTML "Cannot POST"), 405 emas (holat 13). Shuning uchun marshrut oxiriga .all(metodYoq(...)) qo'yilgan. Holat 22 da:

text
POST /vazifalar/1 → 405 allow: GET, HEAD, PUT, PATCH, DELETE {"xato":"POST bu manzilda yo'q"}

409 — ziddiyat. So'rov o'zi to'g'ri, lekin serverdagi joriy holat bilan sig'maydi. Biz 1000 ta vazifa yaratib, 1001-chisini yubordik:

text
POST 1001-chi → 409  {"xato":"Ro'yxat to'lgan (1000)"}

Boshqa 409 misollari: "bu login band", "bu versiya allaqachon o'zgargan".

415. Server Content-Type: text/plain bilan kelgan JSON'ni o'qimaydi (Express 5 tuzog'i — req.body undefined):

text
POST text/plain → 415  {"xato":"Content-Type: application/json bo'lishi kerak"}

4.3 429 va Retry-After

Retry-After — "shuncha vaqtdan keyin qayta urining". Qiymati ikki xil bo'lishi mumkin (RFC 9110): soniyalar soni (60) yoki HTTP sana (Sat, 24 Oct 2026 10:00:00 GMT). Rate-limit tajribasida Retry-After: 60 keldi. Mijoz ikkala shaklni ham tushunishi kerak. «Ishga tushir» bilan sinang:

js
function kutishMs(retryAfter, hozir = Date.now()) {
  if (retryAfter === null) return null;
  if (/^\d+$/.test(retryAfter)) return Number(retryAfter) * 1000;
  const sana = Date.parse(retryAfter);
  // tushunarsiz qiymat — o'z siyosatingiz
  if (Number.isNaN(sana)) return null;
  return Math.max(0, sana - hozir);
}

const hozir = Date.parse("Sat, 24 Oct 2026 10:00:00 GMT");
console.log(kutishMs("60", hozir));
console.log(kutishMs("Sat, 24 Oct 2026 10:02:30 GMT", hozir));
console.log(kutishMs("Sat, 24 Oct 2026 09:00:00 GMT", hozir));
console.log(kutishMs("ertaga", hozir), kutishMs(null, hozir));

Konsolda:

text
60000
150000
0
null null

Uchinchi qatorga qarang: o'tib ketgan sana — 0, darhol urinish mumkin. Manfiy kutish bo'lmaydi.

Tekshirib ko'ring: Foydalanuvchi {"matn": ""} yubordi. Hamkasbingiz 400, siz 422 deysiz. Ikkalangiz ham to'g'rimi? Va {"matn": "Non" (yopilmagan qavs) uchun-chi?

Javob

Birinchisida ikkala uslub ham uchraydi — muhimi API bo'ylab izchillik. vazifalar-api qoidasi bo'yicha 422: JSON to'g'ri o'qildi, mazmun qoidaga zid. Ikkinchisida — faqat 400: JSON'ni o'qib bo'lmadi, mazmun haqida gapirib bo'lmaydi.

5. 5xx — server xatosi

Kod Kim qaytaradi Ma'nosi
500 Internal Server Error Ilovaning o'zi Kutilmagan xato (bug)
502 Bad Gateway Proxy (nginx) Orqadagi server noto'g'ri javob berdi yoki ulanish uzildi
503 Service Unavailable Ilova yoki proxy Vaqtincha ishlamayapti; Retry-After bilan
504 Gateway Timeout Proxy Orqadagi server vaqtida javob bermadi

Qoida: 500 — sizning xatongiz. Mijozning ma'lumoti qanchalik yomon bo'lmasin, unga 500 qaytarish — tekshiruv yetishmayotganini bildiradi. Kanonda shunday holat bo'lgan: Range: bytes=99999- so'roviga 500 chiqqan — aslida 416 bo'lishi kerak edi (holat 13).

500 javobida ichki tafsilot (stack, SQL, fayl yo'li) ko'rsatilmaydi. vazifalar-api tanaga faqat {"xato":"Server xatosi"} yozadi, tafsilot — [sorovId] bilan logga (Express + TypeScript).

502 va 504 ni ko'pincha Node emas, oldidagi proxy qaytaradi (reverse proxy darsi). Node yiqilgan bo'lsa — 502; javob proxy_read_timeout dan uzoq cho'zilsa — 504.

flowchart TD
  A["Xato bormi?"] -- "yo'q" --> B{"Yangi resurs?"}
  B -- "ha" --> B1["201 + Location"]
  B -- "yo'q" --> B2["200 yoki 204"]
  A -- "ha" --> C{"Kim aybdor?"}
  C -- "mijoz" --> D{"O'qib bo'ldimi?"}
  D -- "yo'q" --> D1["400 / 413 / 415"]
  D -- "ha" --> D2["404 / 405 / 409 / 422"]
  C -- "server" --> E["500 / 503"]

Diagrammani chap yuqoridan pastga kuzating. Har javobdan oldin ikki savol: "kim aybdor?" va "so'rovni o'qib bo'ldimi?". Shu ikki savol kodlarning ko'pini ajratadi.

6. API qadami: status kodlar jadvali (holat 22, 3-qism)

Bu qismda kod deyarli o'zgarmaydi — holat 22 dagi status kodlar jadvali tekshiriladi. Hali commit qilmang.

Metod va yo'l Muvaffaqiyat Xatolar
GET /vazifalar 200 + Link 400
POST /vazifalar 201 + Location 400, 409, 413, 415, 422
GET/HEAD /vazifalar/:id 200 400, 404
PUT /vazifalar/:id 200 400, 404, 415, 422
PATCH /vazifalar/:id 200 400, 404, 415, 422
DELETE /vazifalar/:id 204 400, 404
boshqa metod — 405 + Allow
GET /teglar 200 405

Bitta o'zgarish — 409 tekshiruvi. Holat 17 da xizmat sonni bilish uchun butun ro'yxatni o'qirdi:

diff
-if ((await ombor.royxat({})).length >= MAKS_VAZIFA) throw …
+if ((await ombor.soni({})) >= MAKS_VAZIFA) throw new HttpXato(409, …

Omborga soni(filtr) metodi qo'shildi. 1000 ta vazifani xotiraga olib, length ni o'qish — isrof. Postgres'da bu SELECT count(*) bo'ladi (SQL qismi). Ro'yxat formati ham o'zgaradi (sahifalash) — royxat({}).length umuman ishlamay qoladi.

7. Ko'p uchraydigan xatolar

Xato Oqibat To'g'risi
Hamma narsaga 200 + {"xato"} res.ok aldaydi, kesh xatoni saqlaydi To'g'ri 4xx/5xx
POST → 200, Location yo'q Mijoz yangi manzilni bilmaydi 201 + Location
204 bilan tana Tana tashlanadi, mijoz json() da yiqiladi 204 — tanasiz
Validatsiya xatosiga 500 Monitoring "server buzildi" deydi 400/422
301 bilan POST yo'naltirish Tana yo'qoladi 308
401 va 403 almashgan Mijoz noto'g'ri harakat qiladi 401 — kirish, 403 — ruxsat
405 o'rniga 404 Mijoz manzil xato deb o'ylaydi .all() + Allow

8. Mashqlar

Yechimlar kurs/mashqlar/25/20-status-kodlar/ da.

1-mashq (oson): kodni tanlang

  • Yangi buyurtma yaratildi —
  • Buyurtma o'chirildi, javob tanasiz —
  • JSON'da qavs yopilmagan —
  • Bu login allaqachon band —
  • Kirmagan foydalanuvchi profilni so'radi —
Yechim
  • 201 — Location: /buyurtmalar/17 bilan.
  • 204 — DELETE, tana yo'q.
  • 400 — tana o'qilmadi.
  • 409 — joriy holat bilan ziddiyat.
  • 401 — kimligi noma'lum; ruxsat yo'q bo'lsa 403.

2-mashq (o'rta): javobni tasniflash

javobniTasnifla(res) funksiyasini yozing — res — fetch qaytaradigan Response (status va sarlavhalar uning ichida). U mijoz nima qilishi kerakligini qaytarsin: "natija" (2xx, 204 dan tashqari), "bosh" (204), "qayta-urin <ms>" (429 va 503 — Retry-After dan, bo'lmasa 1000 ms), "qayta-urin 1000" (502, 504), "xato" (boshqa 4xx/5xx). Soxta Response obyektlari bilan sinang: new Response(null, { status: 429, headers: { "retry-after": "5" } }). Yordam: kutishMs — «429 va Retry-After» bo'limida; Response — Request va Response darsi.

Yechim
js
function kutishMs(retryAfter, hozir = Date.now()) {
  if (retryAfter === null) return null;
  if (/^\d+$/.test(retryAfter)) return Number(retryAfter) * 1000;
  const sana = Date.parse(retryAfter);
  return Number.isNaN(sana) ? null : Math.max(0, sana - hozir);
}

function javobniTasnifla(res) {
  if (res.status === 204) return "bosh";
  if (res.ok) return "natija";
  if (res.status === 429 || res.status === 503) {
    const ms = kutishMs(res.headers.get("retry-after")) ?? 1000;
    return `qayta-urin ${ms}`;
  }
  if (res.status === 502 || res.status === 504) {
    return "qayta-urin 1000";
  }
  return "xato";
}

const javoblar = [
  new Response('{"id":1}', { status: 201 }),
  new Response(null, { status: 204 }),
  new Response(null, {
    status: 429, headers: { "retry-after": "5" },
  }),
  new Response(null, { status: 503 }),
  new Response('{"xato":"…"}', { status: 422 }),
  new Response(null, { status: 504 }),
];
for (const r of javoblar) console.log(r.status, javobniTasnifla(r));

Konsolda:

text
201 natija
204 bosh
429 qayta-urin 5000
503 qayta-urin 1000
422 xato
504 qayta-urin 1000

422 — qayta urinilmaydi: ma'lumot o'zgarmasa, natija ham o'zgarmaydi. Bu toza funksiya — test yozish oson (fetch darsidagi qayta urinish bilan birlashtiring).

3-mashq (qiyin): 405 + Allow ni node:http da

Express'siz node:http server yozing: /vazifalar — GET va POST, /vazifalar/1 — GET va DELETE. Boshqa metodga — 405, Allow sarlavhasi va JSON xato; noma'lum yo'lga — 404. HEAD'ni GET bilan bir qatorda qo'llang (tanasiz). listen(0) bilan ishga tushirib, fetch bilan to'rt so'rov yuboring: GET /vazifalar, PUT /vazifalar, HEAD /vazifalar/1, GET /yoq. Oxirida close(). Yordam: qo'lda routing darsi.

Yechim
js
import { createServer } from "node:http";

const MARSHRUTLAR = {
  "/vazifalar": ["GET", "HEAD", "POST"],
  "/vazifalar/1": ["GET", "HEAD", "DELETE"],
};

const server = createServer((req, res) => {
  const ruxsat = MARSHRUTLAR[req.url];
  const json = (holat, tana, sarlavha = {}) => {
    res.writeHead(holat, { "content-type": "application/json",
      ...sarlavha });
    res.end(req.method === "HEAD" ? undefined : JSON.stringify(tana));
  };
  if (!ruxsat) return json(404, { xato: `${req.url} topilmadi` });
  if (!ruxsat.includes(req.method)) {
    return json(405, { xato: `${req.method} bu manzilda yo'q` },
      { allow: ruxsat.join(", ") });
  }
  json(200, { yol: req.url, metod: req.method });
});
await new Promise((ok) => server.listen(0, "127.0.0.1", ok));
const A = `http://127.0.0.1:${server.address().port}`;

const sorovlar = [["GET", "/vazifalar"], ["PUT", "/vazifalar"],
  ["HEAD", "/vazifalar/1"], ["GET", "/yoq"]];
for (const [metod, yol] of sorovlar) {
  const r = await fetch(A + yol, { method: metod });
  const allow = r.headers.get("allow") ?? "-";
  const qator = [metod, yol, r.status, allow, await r.text()];
  console.log(qator.filter((x) => x !== "").join(" "));
}
server.closeAllConnections();
server.close();

Konsolda:

text
GET /vazifalar 200 - {"yol":"/vazifalar","metod":"GET"}
PUT /vazifalar 405 GET, HEAD, POST {"xato":"PUT bu manzilda yo'q"}
HEAD /vazifalar/1 200 -
GET /yoq 404 - {"xato":"/yoq topilmadi"}

HEAD javobining tanasi bo'sh — fetch uni bo'sh satr qilib beradi.

4-mashq: API qadami

Omborga soni(filtr): Promise<number> qo'shing (XotiraOmbori da — filtrla(...).length), xizmatdagi 409 tekshiruvini unga o'tkazing. "Status kodlar jadvali"dagi har qatorga kamida bitta test borligini tekshiring; yo'g'ini qo'shing (masalan, 1001-vazifa → 409 — MAKS_VAZIFA ni testda kichik qilib). Commit qilmang.

Yechim
ts
// xotira-ombor.ts
soni(filtr: Filtr): Promise<number> {
  return Promise.resolve(filtrla([...this.#vazifalar.values()], filtr)
    .length);
}

// xizmat.ts
async yarat(yangi: YangiVazifa): Promise<Vazifa> {
  if ((await ombor.soni({})) >= MAKS_VAZIFA) {
    const xabar = `Ro'yxat to'lgan (${String(MAKS_VAZIFA)})`;
    throw new HttpXato(409, xabar);
  }
  return ombor.yarat(yangi);
},

409 testi uchun 1000 ta POST sekin emas (xotirada), lekin MAKS_VAZIFA ni xizmat parametriga aylantirish testni tezlashtiradi — bu sizning tanlovingiz, kanonda konstanta.

9. Real ishda

  • Frontend bilan shartnoma. vazifalar frontend'i 422 da maydon xatosini, 409 da "ro'yxat to'lgan" xabarini, 5xx da "keyinroq urinib ko'ring" ni ko'rsatadi. Status kod — ikki jamoa orasidagi til.
  • Monitoring. Grafana/Sentry'da 5xx ulushi — asosiy signal. Validatsiya xatolariga 500 qaytarish bu signalni "shovqin"ga aylantiradi.
  • Intervyu: "401 va 403 farqi?", "PUT 200 yoki 204 qaytaradimi?", "301 va 308 farqi?".

Xulosa

  • 201 + Location — yaratildi; 204 — tanasiz; 202 — keyin bajariladi.
  • 301/302 POST'ni GET'ga aylantiradi (biz ko'rdik: tana 0 bayt), 307/308 — metod va tana saqlanadi.
  • 400 — o'qib bo'lmadi, 422 — mazmun noto'g'ri; 405 — Allow bilan (Express o'zi bermaydi); 409 — holat bilan ziddiyat; 415 — Content-Type.
  • 429/503 + Retry-After (soniya yoki sana); 500 — sizning xatongiz, tafsilot logga.
  • vazifalar-api jadvali — har kod uchun test.

Keyingi dars: Filtrlash, saralash va maydon tanlash — ?teg=uy&sort=-yaratildi&fields=matn va oq ro'yxat.

Manbalar

Ulashish:Telegram'da

Izohlar (0)

Izoh yozish uchun kiring.

  • Hozircha izoh yo'q. Birinchi bo'ling!
HTTP status kodlari: 201, 204, 400 va 422, 409, 429 — qaysi birini tanlash — IlmHamroh