На главную

Схема и типы полей

Схема ресурса — это упорядоченный список полей. У каждого поля есть name, type и, в зависимости от типа, небольшой набор options. Порядок полей важен по одной конкретной причине: поле template может ссылаться только на поле, которое стоит раньше в том же списке — см. строку template ниже.

Имена полей должны начинаться со строчной буквы и содержать только буквы, цифры и подчёркивания. У ресурса может быть не более 30 полей. Каждая сгенерированная запись автоматически несёт id — вы никогда не определяете его сами, а поле, которое вы назовёте id, будет молча проигнорировано в пользу настоящего.

Справочная таблица

ТипОпцииПример результата
index0, 1, 2, … (позиция записи)
uuid"a1b2c3d4-5e6f-7890-abcd-ef1234567890"
firstName"Amelia"
lastName"Nguyen"
fullName"Amelia Nguyen"
email"[email protected]"
phone"+1 555 019 2231"
avatarURL аватара
imagewidth, height (оба необязательны)URL изображения заданного размера
city"Tashkent"
country"Uzbekistan"
street"482 Birchwood Ave"
word"vivid"
sentencemin, max — количество слов (необязательно)"The quiet fox waited by the door."
paragraphmin, max — количество предложений (необязательно)короткий абзац текста в стиле lorem ipsum
numbermin, max (по умолчанию 01000)742
pricemin, max, symbol (по умолчанию без символа)"48.19", или "$48.19" при symbol: "$"
booleanprobability для true, 01true
datefrom, to — строки ISO (по умолчанию 2015–2025)"2021-06-14T09:32:00.000Z"
enumvalues — непустой массив строкодно значение из values
staticvalue — любое фиксированное значение JSONвсегда точно value
templatetemplate — строка с плейсхолдерами {{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>;
}