JavaScript · API · Начальный
Категории
Получите категории товаров и используйте их для фильтрации списка продуктов.
Краткое введение в тему и пояснения перед упражнениями (упражнения ниже):
Практические паттерны с категориями
#Справочник эндпоинтов категорий
#Упражнения:
Список всех категорий
#Получите `/api/categories/` и выведите общее количество категорий (`count`) и `name` каждой.
const BASE_URL = 'https://apilearn.tukas.dev';
async function main() {
// fetch /api/categories/ и вывести count + названия
}
main();
Решение
const BASE_URL = 'https://apilearn.tukas.dev';
async function main() {
const response = await fetch(`${BASE_URL}/api/categories/`);
const data = await response.json();
console.log(data.count);
for (const cat of data.results) {
console.log(cat.name);
}
}
main();
Найти категорию по названию
#Получите все категории, затем найдите ту, что называется "Bedroom", с помощью `.find()` на `data.results`. Выведите её `id`, `name` и `slug`.
const BASE_URL = 'https://apilearn.tukas.dev';
async function main() {
// найти категорию "Bedroom" и вывести id, name, slug
}
main();
Решение
const BASE_URL = 'https://apilearn.tukas.dev';
async function main() {
const response = await fetch(`${BASE_URL}/api/categories/`);
const data = await response.json();
const bedroom = data.results.find(c => c.name === 'Bedroom');
console.log(bedroom.id);
console.log(bedroom.name);
console.log(bedroom.slug);
}
main();
Товары в категории
#Получите все категории, возьмите первую из `results`, затем получите её товары с помощью `category=<slug>`. Выведите название категории и количество товаров.
const BASE_URL = 'https://apilearn.tukas.dev';
async function main() {
// 1. получить категории (использовать data.results)
// 2. взять slug первой категории для фильтрации товаров
// 3. вывести название категории и количество товаров
}
main();
Решение
const BASE_URL = 'https://apilearn.tukas.dev';
async function main() {
const catResponse = await fetch(`${BASE_URL}/api/categories/`);
const catData = await catResponse.json();
const first = catData.results[0];
const params = new URLSearchParams({ category: first.slug });
const prodResponse = await fetch(`${BASE_URL}/api/products/?${params}`);
const prodData = await prodResponse.json();
console.log(first.name);
console.log(prodData.count);
}
main();
Количество товаров в каждой категории
#Для каждой категории из `data.results` получите количество товаров и выведите `"НазваниеКатегории: N товаров"`. Используйте `page_size=1`, чтобы не загружать лишние данные.
const BASE_URL = 'https://apilearn.tukas.dev';
async function main() {
// для каждой категории в data.results: fetch count и вывести "Name: N products"
}
main();
Решение
const BASE_URL = 'https://apilearn.tukas.dev';
async function main() {
const catResponse = await fetch(`${BASE_URL}/api/categories/`);
const catData = await catResponse.json();
for (const cat of catData.results) {
const params = new URLSearchParams({ category: cat.slug, page_size: 1 });
const prodResponse = await fetch(`${BASE_URL}/api/products/?${params}`);
const data = await prodResponse.json();
console.log(`${cat.name}: ${data.count} products`);
}
}
main();
Map slug → name для категорий
#Получите все категории и постройте обычный объект, отображающий каждый `slug` на его `name`. Выведите map и найдите название для slug `"bedroom"`.
const BASE_URL = 'https://apilearn.tukas.dev';
async function main() {
// построить { slug: name } map из data.results
// вывести map и найти 'bedroom'
}
main();
Решение
const BASE_URL = 'https://apilearn.tukas.dev';
async function main() {
const response = await fetch(`${BASE_URL}/api/categories/`);
const data = await response.json();
const categoryMap = Object.fromEntries(data.results.map(c => [c.slug, c.name]));
console.log(categoryMap);
console.log(categoryMap['bedroom']);
}
main();