Схема и типы полей
Схема ресурса — это упорядоченный список полей. У каждого поля есть name, type и, в
зависимости от типа, небольшой набор options. Порядок полей важен по одной конкретной
причине: поле template может ссылаться только на поле, которое стоит раньше в том же списке —
см. строку template ниже.
Имена полей должны начинаться со строчной буквы и содержать только буквы, цифры и подчёркивания.
У ресурса может быть не более 30 полей. Каждая сгенерированная запись автоматически несёт id —
вы никогда не определяете его сами, а поле, которое вы назовёте id, будет молча
проигнорировано в пользу настоящего.
Справочная таблица
| Тип | Опции | Пример результата |
|---|---|---|
index | — | 0, 1, 2, … (позиция записи) |
uuid | — | "a1b2c3d4-5e6f-7890-abcd-ef1234567890" |
firstName | — | "Amelia" |
lastName | — | "Nguyen" |
fullName | — | "Amelia Nguyen" |
email | — | "[email protected]" |
phone | — | "+1 555 019 2231" |
avatar | — | URL аватара |
image | width, height (оба необязательны) | URL изображения заданного размера |
city | — | "Tashkent" |
country | — | "Uzbekistan" |
street | — | "482 Birchwood Ave" |
word | — | "vivid" |
sentence | min, max — количество слов (необязательно) | "The quiet fox waited by the door." |
paragraph | min, max — количество предложений (необязательно) | короткий абзац текста в стиле lorem ipsum |
number | min, max (по умолчанию 0–1000) | 742 |
price | min, max, symbol (по умолчанию без символа) | "48.19", или "$48.19" при symbol: "$" |
boolean | probability для true, 0–1 | true |
date | from, to — строки ISO (по умолчанию 2015–2025) | "2021-06-14T09:32:00.000Z" |
enum | values — непустой массив строк | одно значение из values |
static | value — любое фиксированное значение JSON | всегда точно value |
template | template — строка с плейсхолдерами {{field}} | строка, собранная из более ранних полей |
Тип template
template — единственный тип, который читает другие поля вместо генерации собственного
значения. Его опция template — это обычная строка; везде, где в ней встречается
{{fieldName}}, этот плейсхолдер заменяется значением, которое поле с именем fieldName уже
сгенерировало для этой же записи. Это работает только для полей, определённых раньше в схеме —
шаблон не может ссылаться на поле, которое ещё не выполнилось. Типичный пример: если раньше в
списке стоят поля firstName и lastName, более позднее поле email можно сделать полем
template со значением "{{firstName}}.{{lastName}}@example.com", чтобы email оставался
согласованным с именем, а не генерировался отдельно и независимо.
Детерминизм вкратце
Каждый тип поля берёт значение из той же засеянной псевдослучайной последовательности, что и любое другое поле той же записи, поэтому одна и та же схема, сид и индекс записи всегда дают одну и ту же запись, поле за полем. Как устроена генерация раскрывает механизм полностью; здесь же важно то, что изменение опций поля меняет будущий вывод именно этого поля, а перестановка или добавление полей в других местах схемы не перетасовывает id, уже выданные существующим записям, — id генерируются независимо от остальной схемы.
Получение данных ресурса
Ничто из этого не меняет способ чтения данных — любой ресурс, независимо от его полей, читается одинаково:
const response = await fetch("https://mocklab.dev/m/demo7k2m9x/products");
const products = await response.json();import { useQuery } from "@tanstack/react-query";
function ProductList() {
const { data: products } = useQuery({
queryKey: ["products"],
queryFn: () => fetch("https://mocklab.dev/m/demo7k2m9x/products").then((res) => res.json()),
});
return <pre>{JSON.stringify(products, null, 2)}</pre>;
}