Запрос к серверному api это асинхронные функции, которые посылают запрос и ждут ответа, соответственно вы можете подменить их на свои, например у вас есть объект с функциями серверного запроса
const serverAPI = {
getCategories: () => fetch('/categories'),
getCategory: (id) => fetch('/categories/' + id)
}
И есть моковые запросы с теми же самыми ключами, что и serverAPI
// Создадим базу данных
const mockDB = {
categories: [
{ id: 1, name: 'products'},
{ id: 2, name: 'services'}
]
}
const mockAPI = {
getCategories: () => Promise.resolve(mockDB.categories),
getCategory: (id) => Promise.resolve(mockDB.categories.find(v => v.id === id)),
}
И создайте объект
const currentAPI = serverAPI
все запросы из кода делайте к currentAPI, переключать его с мокового на нормальный и наоборот можно
Object.assign(currentAPI, mockAPI)
Object.assign(currentAPI, serverAPI)
Сохранять данные мокового DB можно в localStorage между сеансами. естественно это будет работать только локально