На главную

Сброс данных

Каждая запись в ресурс — каждый POST, PUT, PATCH и DELETE — сохраняется как небольшое переопределение поверх сгенерированных данных, а не как изменение самой генерации. Это значит, что отмена всех этих изменений — единая, полная, мгновенная операция: сбросьте ресурс, и каждое переопределение будет удалено. Следующее чтение регенерирует те же данные, что вы получили бы от совершенно нового ресурса с той же схемой, сидом и count — байт в байт, потому что логика генерации ни разу никуда не сдвинулась.

Почему это безопасно

Сравните это с инструментом для фейковых API на базе настоящей базы данных вставленных строк: там «сброс» обычно означает повторный запуск скрипта заполнения, и нет никакой гарантии, что он воспроизведёт в точности то же самое, что было раньше, если скрипт или его источник случайности хоть немного изменился. У сброса в MockLab такого риска нет, потому что сгенерированная базовая версия изначально не затрагивалась — ваши записи целиком жили в отдельном слое переопределений. Удаление этого слоя и есть сброс, и регенерировать заново нечего и негде ошибиться.

Откуда сбрасывать

Сброс — это действие владельца проекта, а не то, что вызывает публичный потребитель API: оно доступно через вашу сессию в дашборде, а не через эндпоинт /m/..., который вызывает ваше приложение. На странице ресурса в дашборде используйте действие сброса, чтобы очистить все переопределения для этого ресурса. Здесь нет шага подтверждения, который можно было бы автоматизировать скриптом, и нет частичного сброса: это всё или ничего, намеренно, поскольку выборочный сброс потребовал бы отличать «это осознанная правка, которую я хочу сохранить» от «это были тестовые данные» — а такое различие API знать не может.

Что происходит на самом деле

Под капотом сброс удаляет каждую строку переопределения, принадлежащую ресурсу, и увеличивает его внутреннюю версию данных — тот самый номер версии, который служит ключом кеша в памяти, из которого обслуживаются ваши чтения. Именно это единственное увеличение делает недействительной каждую закешированную страницу для этого ресурса на каждом серверном процессе; самый первый следующий GET, откуда бы он ни пришёл, регенерирует данные и кеширует их заново с чистого листа.

Когда это пригодится

Сброс полезнее всего в процессе разработки: вы поигрались с ресурсом через интерфейс своего приложения — создали тестовые записи, удалили несколько, поправили цены, чтобы проверить граничный случай, — и хотите снова получить чистую базовую версию перед демонстрацией, тестированием или передачей эндпоинта кому-то ещё. Поскольку генерация детерминирована, каждый, кто обращается к сброшенному ресурсу после этого, видит абсолютно одинаковые данные, а значит проще писать тесты или документацию с опорой на фиксированные ожидаемые значения.

Чтение данных после сброса

Чтение ресурса после сброса использует тот же самый эндпоинт, что и всегда — ничего в URL или форме ответа не меняется:

const response = await fetch("https://mocklab.dev/m/demo7k2m9x/products");
const products = await response.json();
// Identical to a fresh resource with the same schema, seed and count.
import { useQuery, useQueryClient } from "@tanstack/react-query";

function ProductList() {
  const queryClient = useQueryClient();
  const { data: products } = useQuery({
    queryKey: ["products"],
    queryFn: () => fetch("https://mocklab.dev/m/demo7k2m9x/products").then((res) => res.json()),
  });

  // After resetting from the dashboard, invalidate the cached query so the
  // next render reflects the clean baseline instead of stale overridden data.
  const refetchAfterReset = () => queryClient.invalidateQueries({ queryKey: ["products"] });

  return (
    <>
      <button onClick={refetchAfterReset}>Refresh</button>
      <ul>
        {products?.map((p) => (
          <li key={p.id}>{p.title}</li>
        ))}
      </ul>
    </>
  );
}