Bosh sahifaga

So‘rov parametrlari

Ro‘yxat endpointi (GET /m/{project-key}/{resource-name}) belgilangan so‘rov parametrlari to‘plamini qabul qiladi. U doim toza JSON massivini qaytaradi — o‘rovchi obyekt yo‘q — sahifalash metama’lumotlari esa javob sarlavhalarida keladi: X-Total-Count, X-Page, X-Limit, va first/last/prev/next manzillarini olib yuruvchi Link sarlavhasi (RFC 5988).

Sahifalash

page (standart 1) va limit (standart 10, 100 bilan cheklangan — ko‘proq so‘rasangiz ham shunchaki 100 olasiz, so‘rov rad etilmaydi).

curl "https://mocklab.dev/m/demo7k2m9x/products?page=2&limit=20"

Saralash

sort maydon nomini bildiradi; order esa asc (standart) yoki desc.

curl "https://mocklab.dev/m/demo7k2m9x/products?sort=price&order=desc"

Saralash barqaror — saralash maydonida bir xil qiymatga ega yozuvlar o‘zaro tartibini saqlaydi — va price kabi formatlangan maydon uchun ham raqamlarni hisobga oladi: price bo‘yicha saralash 48.19ni 120.00 bilan matn sifatida emas, to‘g‘ri taqqoslaydi.

Filtrlash

Yuqoridagi zaxira nomlardan (page, limit, sort, order, search) biri bo‘lmagan har qanday so‘rov parametri o‘sha nomdagi maydon uchun filtr sifatida ko‘riladi. Oddiy field=value — aniq moslik; qolganini to‘rtta qo‘shimcha qamrab oladi:

ParametrNima bilan mos keladi
field=valueaniq moslik
field_ne=valueteng emas
field_gte=valuekatta yoki teng (raqamni hisobga oladi)
field_lte=valuekichik yoki teng (raqamni hisobga oladi)
field_like=valuekatta-kichik harfga sezgir bo‘lmagan qism moslik
curl "https://mocklab.dev/m/demo7k2m9x/products?inStock=true&price_gte=20&price_lte=100"

_gte/_lte taqqoslashdan oldin valyuta belgisi yoki boshqa formatlashni olib tashlaydi, shuning uchun price_gte=20 "$48.19" qaytaradigan price maydoniga to‘g‘ri mos keladi — filtrlash uchun maydonning aniq formatlashini bilishingiz shart emas.

Qidiruv

search — istalgan maydonning qiymati izlanayotgan so‘zni katta-kichik harfga qaramasdan o‘z ichiga olsa mos keladi — qaysi maydonda ekanini bilmasdan yozuvni topishning tezkor usuli.

curl "https://mocklab.dev/m/demo7k2m9x/products?search=vivid"

Noto‘g‘ri parametrlar

page, limit va order — qat’iy, tekshiriladigan shaklga ega yagona uchta parametr: page va limit musbat butun son bo‘lishi kerak, order esa aynan asc yoki desc bo‘lishi kerak. Boshqa narsa yuborsangiz, so‘rov hech qachon ma’lumotingizga yetib bormaydi: u darhol 422 Validation failed xatosi bilan to‘xtaydi, javob tanasida aniq qaysi parametr noto‘g‘ri ekani ko‘rsatiladi. Qolganlarining barchasi — sort, search va har qanday filtr — tekshirish uchun qat’iy lug‘atga ega emas, shuning uchun u yerdagi xato yozuv (masalan, mavjud bo‘lmagan maydon nomiga filtr) xato hisoblanmaydi; u shunchaki hech narsaga mos kelmaydi, chunki server "noto‘g‘ri maydon nomi"ni "haqiqatan ham mos yozuvi yo‘q maydon"dan farqlay olmaydi.

Parametrlarni birlashtirish

Yuqoridagilarning barchasi bitta so‘rovda birlashadi — filtr, qidiruv, saralash va sahifalash birgalikda:

const params = new URLSearchParams({
  inStock: "true",
  price_gte: "20",
  sort: "price",
  order: "asc",
  page: "1",
  limit: "20",
});
const response = await fetch(`https://mocklab.dev/m/demo7k2m9x/products?${params}`);
const products = await response.json();
const totalCount = response.headers.get("X-Total-Count");
import { useQuery } from "@tanstack/react-query";

function InStockProducts({ page }) {
  const { data: products } = useQuery({
    queryKey: ["products", "in-stock", page],
    queryFn: async () => {
      const params = new URLSearchParams({
        inStock: "true",
        sort: "price",
        order: "asc",
        page: String(page),
        limit: "20",
      });
      const res = await fetch(`https://mocklab.dev/m/demo7k2m9x/products?${params}`);
      return res.json();
    },
  });

  return (
    <ul>
      {products?.map((product) => (
        <li key={product.id}>{product.title}</li>
      ))}
    </ul>
  );
}

Oldindan bilib qo‘yish kerak bo‘lgan bitta chegara: filtrlash, qidiruv va saralash faqat 10 000 yoki undan kam yozuvga ega resurslarda ishlaydi. Undan yuqorida faqat sahifalash ishlaydi — buning sababi va javob buni qanday bildirishi haqida Generatsiya qanday ishlaydi sahifasiga qarang.