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:
| Parametr | Nima bilan mos keladi |
|---|---|
field=value | aniq moslik |
field_ne=value | teng emas |
field_gte=value | katta yoki teng (raqamni hisobga oladi) |
field_lte=value | kichik yoki teng (raqamni hisobga oladi) |
field_like=value | katta-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.