Сурам параметрлери
Тизме эндпоинти (GET /m/{project-key}/{resource-name}) белгиленген сурам параметрлеринин
топтомун кабыл алат. Ал ар дайым таза JSON массивин кайтарат — эч кандай ороочу объект жок —
пагинация метадайындары анын ордуна жооп хедерлеринде жүрөт: X-Total-Count, X-Page,
X-Limit, жана first/last/prev/next URL'дарын алып жүргөн Link хедери (RFC 5988).
Пагинация
page (демейки 1) жана limit (демейки 10, 100гө чейин чектелген — көбүрөөккө сурам жөн
эле 100 алат, ал четке кагылбайт).
curl "https://mocklab.dev/m/demo7k2m9x/products?page=2&limit=20"Иреттөө
sort талааны атайт; order asc (демейки) же desc.
curl "https://mocklab.dev/m/demo7k2m9x/products?sort=price&order=desc"Иреттөө туруктуу — иреттөө талаасында бирдей маанилерге ээ жазуулар өз ара орундарын сактап
калышат — жана price сыяктуу форматталган талаа үчүн да сандык-сезимтал: price боюнча
иреттөө 48.19ду 120.00гө сап катары эмес, туура салыштырат.
Чыпкалоо
Жогорудагы корголгон аттардын бирине (page, limit, sort, order, search) кирбеген
каалаган сурам параметри ошол аттагы талаа боюнча чыпка катары каралат. Жөнөкөй field=value
так дал келүү болуп саналат; калганын төрт суффикс камтыйт:
| Параметр | Дал келет |
|---|---|
field=value | так дал келүү |
field_ne=value | тең эмес |
field_gte=value | чоң же барабар (сандык-сезимтал) |
field_lte=value | кичине же барабар (сандык-сезимтал) |
field_like=value | регистрге көз карандысыз ички сап дал келүү |
curl "https://mocklab.dev/m/demo7k2m9x/products?inStock=true&price_gte=20&price_lte=100"_gte/_lte салыштыруудан мурун валюта белгисин же башка форматтоону алып салат, ошондуктан
price_gte=20 "$48.19" кайтарган price талаасына туура дал келет — талааны сандык түрдө
чыпкалоо үчүн анын так форматын билишиңиз шарт эмес.
Издөө
search каалаган талаанын мааниси издеп жаткан сөздү камтыса, регистрге көз карандысыз дал
келет — жазууну кайсы талаада экенин билбестен тез табуунун жолу.
curl "https://mocklab.dev/m/demo7k2m9x/products?search=vivid"Туура эмес параметрлер
page, limit жана order — катуу, текшерилүүчү формага ээ жалгыз үч параметр: page жана
limit оң бүтүн сандар болушу керек, order так asc же desc болушу керек. Башка нерсе
жөнөтсөңүз, сурам эч качан дайындарыңызга жетпейт: ал дароо 422 Validation failed катасы менен
токтойт, жооптун денеси так кайсы параметр туура эмес экенин көрсөтөт. Калгандардын баары —
sort, search жана ар кандай чыпка — текшерүү үчүн катуу сөздүккө ээ эмес, ошондуктан ошол
жердеги жазуу катасы (мисалы, жок талаа атына чыпка) ката катары эсептелбейт; ал жөн эле эч
нерсеге дал келбейт, себеби сервер "туура эмес талаа аты" менен "чындап дал келүүчү жазуусу жок
талааны" ажырата албайт.
Параметрлерди айкалыштыруу
Жогорудагылардын баары бир сурамда бирге иштейт — чыпкалоо, издөө, иреттөө жана пагинация бирге:
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>
);
}Алдын ала билип коюу керек бир чек: чыпкалоо, издөө жана иреттөө 10 000 же андан аз жазуусу бар ресурстарда гана иштейт. Андан жогору болсо, пагинация гана иштейт — эмне үчүн экенин жана жооп муну кантип билдирерин Генерация кантип иштейт барагынан караңыз.