Ինչպես կառուցել և սպառել ծաղրական API-ներ React հավելվածներում՝ օգտագործելով Mirage.js-ը
API-ն պատրաստ չունե՞ք: Ոչ մի խնդիր! Մշակեք և օգտագործեք ծաղրական API-ներ Mirage.js-ի հետ:
Ամբողջ փաթեթային հավելվածներ մշակելիս, ճակատային աշխատանքի զգալի մասը հիմնված է իրական ժամանակի տվյալների վրա:
Սա կարող է նշանակել, որ դուք պետք է հետաձգեք օգտատիրոջ միջերեսի զարգացումը, մինչև որ API-ն հասանելի լինի օգտագործման համար: Այնուամենայնիվ, API-ի պատրաստ լինելուն սպասելը կարող է զգալիորեն նվազեցնել արտադրողականությունը և երկարացնել ծրագրի ժամկետները:
Այս մարտահրավերի հիանալի լուծումը ներառում է կեղծ API-ների օգտագործումը: Այս API-ները թույլ են տալիս մշակել և փորձարկել ձեր ճակատային մասը՝ օգտագործելով տվյալներ, որոնք ընդօրինակում են իրական տվյալների կառուցվածքը՝ այդ ամենը առանց իրական API-ի վրա հենվելու:
Ինչպես սկսել Mirage.js Mock API-ներով
Mirage.js-ը JavaScript գրադարան է, որը թույլ է տալիս ստեղծել կեղծ API-ներ, որոնք լրացվում են փորձնական սերվերով, որն աշխատում է ձեր վեբ հավելվածի հաճախորդի կողմից: Սա նշանակում է, որ դուք կարող եք փորձարկել ձեր ճակատային ծածկագիրը՝ առանց անհանգստանալու ձեր իրական հետնամասի API-ի առկայության կամ վարքագծի մասին:
Mirage.js-ն օգտագործելու համար նախ պետք է ստեղծել API-ի կեղծ վերջնակետեր և սահմանել պատասխանները, որոնք դրանք պետք է վերադարձնեն: Այնուհետև Mirage.js-ն ընդհատում է բոլոր HTTP հարցումները, որոնք կատարում է ձեր ճակատային կոդը և փոխարենը վերադարձնում է կեղծ պատասխանները:
Երբ ձեր API-ն պատրաստ լինի, կարող եք հեշտությամբ անցնել դրա օգտագործմանը՝ փոխելով միայն Mirage.js-ի կազմաձևումը:
Դուք կարող եք գտնել այս նախագծի սկզբնական կոդը այս GitHub պահոցում:
Ստեղծեք կեղծ API սերվեր Mirage.js-ով
Ցույց տալու համար, թե ինչպես կարգավորել ծաղրական API-ները, դուք կստեղծեք մի պարզ React հավելված, որն օգտագործում է Mirage.js հետնամասը: Բայց նախ ստեղծեք React հավելված՝ օգտագործելով create-react-app հրամանը: Որպես այլընտրանք, դուք կարող եք օգտագործել Vite-ը React նախագիծ ստեղծելու համար: Հաջորդը, տեղադրեք Mirage.js կախվածությունը:
npm install --save-dev miragejs
Այժմ Mirage.js սերվերի օրինակ ստեղծելու համար հարցումները ընդհատելու և API-ի պատասխանները ծաղրելու համար օգտագործեք createServer մեթոդը: Այս մեթոդը որպես պարամետր վերցնում է կազմաձևման օբյեկտը:
Այս օբյեկտը ներառում է միջավայր և անունների տարածություն API-ի համար: Շրջակա միջավայրը սահմանում է զարգացման այն փուլը, որում գտնվում է API-ն, օրինակ՝ զարգացումը, մինչդեռ անվանատարածքը նախածանցն է, որն ավելացվել է API-ի բոլոր վերջնակետերին:
Ստեղծեք նոր src/server.js ֆայլ և ներառեք հետևյալ կոդը.
import { createServer, Model } from 'miragejs';
const DEFAULT_CONFIG = {
environment: "development",
namespace: "api",
};
export function makeServer({ environment, namespace } =
DEFAULT_CONFIG) {
let server = createServer({
environment,
namespace,
models: {
Todo: Model,
},
});
return server;
}
Անհրաժեշտության դեպքում կարող եք հարմարեցնել անվանատարածքը՝ համապատասխանեցնելով ձեր իրական API-ի URL-ի կառուցվածքին, ներառյալ տարբերակի նշումը: Այս կերպ, երբ ձեր API-ն պատրաստ լինի, դուք կարող եք հեշտությամբ ինտեգրել այն ձեր առջևի հավելվածում՝ նվազագույն կոդի փոփոխություններով:
Բացի այդ, սերվերի օրինակի կոնֆիգուրացիայի շրջանակներում դուք կարող եք նաև սահմանել տվյալների մոդել՝ կեղծ միջավայրում տվյալների պահպանման և որոնման մոդելավորման համար:
Վերջապես, գործարկեք Mirage.js սերվերը՝ ներմուծելով սերվերի օբյեկտը ձեր index.jsx կամ main.jsx ֆայլում հետևյալ կերպ.
import React from 'react'
import ReactDOM from 'react-dom/client'
import App from './App.jsx'
import { makeServer } from './server';
if ( process.env.NODE_ENV === 'development' &&
typeof makeServer === 'function'
) {
makeServer();}
ReactDOM.createRoot(document.getElementById('root')).render(
<React.StrictMode>
<App />
</React.StrictMode>,
)
Ավելացնել Seed Data Mock API-ին
Mirage.js-ն ունի հիշողության տվյալների բազա, որը կարող եք օգտագործել կեղծ API-ը նախնական սկզբնական տվյալների հետ համալրելու և ձեր հաճախորդի հավելվածի փորձարկման տվյալները կառավարելու համար: Սա նշանակում է, որ դուք կարող եք պահել և վերցնել թեստի տվյալները կեղծ տվյալների բազայից և օգտագործել դրանք ձեր հաճախորդի հավելվածում:
Սերմերի տվյալները Mock API-ին ավելացնելու համար ավելացրեք հետևյալ կոդը server.js ֆայլում՝ հենց models օբյեկտի տակ:
seeds(server) {
server.create('Todo', {
title: 'item no 1',
body:
'Do something nice for someone I care about',
});
server.create('Todo', {
title: 'item no 2',
body:
'Memorize the fifty states and their capitals.',
});
server.create('Todo', {
title: 'item no 3',
body:
'Watch a classic movie.',
});
},
seeds ֆունկցիան լրացնում է Mirage.js սերվերը երեք անելիքներով, որոնցից յուրաքանչյուրն ունի վերնագիր և նկարագրություն: Ընտրովի, թեստի տվյալների կոշտ կոդավորման փոխարեն, դուք կարող եք ինտեգրել այնպիսի գրադարան, ինչպիսին է Faker.js-ը՝ պահանջվող թեստի տվյալները ստեղծելու համար:
Սահմանեք Mock API երթուղիները
Այժմ սահմանեք API-ի որոշ երթուղիներ կեղծ API-ի համար: Այս դեպքում նշեք երթուղիներ՝ կարգավորելու GET, POST և DELETE կեղծ API հարցումները:
Անմիջապես սերմերի տվյալների տակ ավելացրեք ստորև նշված կոդը.
routes() {
this.namespace = 'api/todos';
this.get('/', (schema, request) => {
return schema.all('Todo');
});
this.post('/', (schema, request) => {
let attrs = JSON.parse(request.requestBody);
return schema.create('Todo', attrs);
});
this.delete('/:id', (schema, request) => {
let id = request.params.id;
return schema.find('Todo', id).destroy();
});
}
Ստեղծեք React հաճախորդ
Այժմ, երբ ստեղծվել է կեղծ API-ն, եկեք ստեղծենք React հաճախորդ՝ API-ի վերջնակետերը փոխազդելու և սպառելու համար: Դուք ազատ եք օգտագործել ցանկացած UI բաղադրիչ գրադարան, որը Ձեզ դուր է գալիս, բայց այս ուղեցույցը կօգտագործի Chakra UI հավելվածը ոճավորելու համար:
Նախ, տեղադրեք այս կախվածությունները.
npm install @chakra-ui/react @emotion/react @emotion/styled framer-motion
Հաջորդը, ստեղծեք նոր src/components/TodoList.jsx ֆայլ և ներառեք հետևյալ կոդը.
import React, { useState, useEffect } from 'react';
import {
Button,
Box,
Container,
Text,
Input,
FormControl,
Flex,
} from '@chakra-ui/react';
Այժմ սահմանեք ֆունկցիոնալ բաղադրիչ՝ անելիքների ցանկի օգտատիրոջ միջերեսը ներկայացնելու համար, ներառյալ մուտքագրման դաշտերը՝ նոր առաջադրանքներ ավելացնելու համար և առկա առաջադրանքների ցանկը:
export default function TodoList() {
return (
<Container>
<Text fontSize="xl" mb={4}>Todo List</Text>
<FormControl mb={4}>
<Input
type="text"
name="body"
value={newTodo.body}
onChange={handleInputChange}
/>
</FormControl>
<Button colorScheme="teal" onClick={handleAddTodo}> Add Todo</Button>
{loading ? ( <Text>Loading...</Text> ) : (
todos.map((todo) => (
<Box key={todo.id} mb={2} p={2} borderWidth="1px">
<Flex align="center">
<Text flex="1">{todo.body}</Text>
<Button
colorScheme="red"
size="sm"
onClick={() => handleDelete(todo.id)}>Delete
</Button>
</Flex>
</Box>
))
)}
</Container>
);
}
Այժմ սահմանեք կարգավորիչի գործառույթները ավելացնելու և ջնջելու գործողությունների համար: Բայց նախ ավելացրեք այս վիճակները: Որպես այլընտրանք, դուք կարող եք օգտագործել useReducer մանգաղը՝ անելիքների ցուցակի հավելվածի պետական կառավարման տրամաբանությունը սահմանելու համար:
const [todos, setTodos] = useState([]);
const [newTodo, setNewTodo] = useState({ title: '', body: '' });
const [loading, setLoading] = useState(true);
const [renderKey, setRenderKey] = useState(0);
Այժմ սահմանեք հիշողության տվյալների բազայում սկզբնական տվյալների առբերման և ցուցադրման տրամաբանությունը, երբ հավելվածն առաջին անգամ բեռնվում է դիտարկիչում՝ fetch մեթոդը փաթաթելով useEffect կեռիկի մեջ:
useEffect(() => {
fetch('/api/todos')
.then((response) => response.json())
.then((data) => {
setTodos(data.todos);
setLoading(false);
});
}, [renderKey]);
renderKey վիճակը ներառված է նաև useEffect-ում՝ ապահովելու համար, որ կոդը գործարկի հիշողության տվյալների բազայում նոր ավելացված տվյալների վերարտադրումը, երբ սերվերը աշխատում է:
Պարզ ասած, ամեն անգամ, երբ օգտատերը նոր անելիքների տվյալներ է ավելացնում Mirage.js տվյալների բազայում, բաղադրիչը կվերարտադրվի՝ թարմացված տվյալները ցուցադրելու համար:
Տվյալների ավելացում API-ին
Այժմ սահմանեք POST հարցումների միջոցով API-ին տվյալներ ավելացնելու տրամաբանությունը: Անմիջապես useEffect կեռիկի տակ ներառեք հետևյալ կոդը.
const handleInputChange = (e) => {
const { name, value } = e.target;
setNewTodo((prevTodo) => ({ ...prevTodo, [name]: value }));
};
const handleAddTodo = () => {
setLoading(true);
fetch('/api/todos', {
method: 'POST',
headers: {
'Content-Type': 'application/json',
},
body: JSON.stringify(newTodo),
}).then((response) => response.json()).then((createdTodo) => {
setTodos((prevTodos) => [createdTodo, ...prevTodos]);
setNewTodo({ title: '', body: '' });
setRenderKey((prevKey) => prevKey + 1);
setLoading(false);
}).catch((error) => {
console.error('Error adding todo:', error);
setLoading(false);
});
};
Երբ օգտատերը տվյալներ է մուտքագրում անելիքների մուտքագրման դաշտում և սեղմում Ավելացնել անելիք կոճակը, կոդը թարմացնում է newTodo վիճակը օգտատիրոջ մուտքագրմամբ: Այնուհետև այն ուղարկում է կեղծ POST հարցում API-ին՝ նոր տվյալների օբյեկտի հետ հարցման մարմնի մեջ՝ այն պահելու հիշողության տվյալների բազայում:
Եթե POST հարցումը հաջողված է, կոդը ավելացնում է նոր տարրը todos զանգվածին, և վերջապես, գործարկում է բաղադրիչի վերաարտադրումը` նոր անելիքը ցուցադրելու համար:
Mock API DELETE հարցումներ
Այժմ սահմանեք տվյալների ջնջման տրամաբանությունը DELETE կեղծ API հարցումների միջոցով: Այս գործընթացը ներառում է DELETE հարցում ուղարկելը` անելիքները հիշողության տվյալների բազայից հեռացնելու համար: Եթե հաջողվի, թարմացրեք և՛ todos և՛ բեռնման վիճակը՝ արտացոլելու ջնջման գործընթացը:
const handleDelete = (id) => {
let deleteInProgress = true;
fetch(`/api/todos/${id}`, {
method: 'DELETE',
}).then((response) => {
if (response.status === 204) {
return null;
} else {
return response.json();
}
}) .then((data) => {
if (data && data.error) {
console.error('Error deleting todo:', data.error);
} else {
setTodos((prevTodos) => prevTodos.filter((todo) => todo.id !== id));
setRenderKey((prevKey) => prevKey + 1);
}
deleteInProgress = false;
}).catch((error) => {
console.error('Error deleting todo:', error);
deleteInProgress = false;
}) .finally(() => {
setLoading(deleteInProgress);
});
};
Հիշեք, որ այս գործընթացը կարող է ջնջել միայն նոր ավելացված տվյալները, այլ ոչ թե սերմերի տվյալները:
Ի վերջո, ներմուծեք TodoList բաղադրիչը App.jsx ֆայլում՝ այն DOM-ում ցուցադրելու համար:
import TodoList from './components/TodoList';
//code ...
<TodoList />
Հիանալի Զարգացման սերվերը գործարկելուց հետո դուք կարող եք բեռնել հիմնական տվյալները և ավելացնել և ջնջել նոր տվյալներ կեղծ API-ից ձեր React հավելվածում:
Օգտագործելով ծաղրական API-ներ՝ զարգացումն արագացնելու համար
Ծաղրող API-ները ֆրոնտենդի զարգացումն արագացնելու հիանալի միջոց է, անկախ նրանից՝ դուք աշխատում եք նախագծի վրա անհատապես, թե որպես թիմի մաս: Օգտագործելով Mock API-ները՝ դուք կարող եք արագ կառուցել միջերեսը և փորձարկել դրանց կոդը՝ չսպասելով, որ հետնախագիծը ավարտվի: