JavaScript · API · Начальный
Параметры запроса
Фильтруйте, ищите, сортируйте и пагинируйте результаты API с помощью URLSearchParams.
Краткое введение в тему и пояснения перед упражнениями (упражнения ниже):
Фильтрация, сортировка и поиск — паттерны
#Справочник параметров запроса
#Упражнения:
Фильтрация по категории
#Получите все товары категории "bedroom" с помощью `URLSearchParams`. Выведите количество результатов и название первого товара.
const BASE_URL = 'https://apilearn.tukas.dev';
async function main() {
// URLSearchParams для фильтрации category='bedroom'
// вывести count и название первого товара
}
main();
Решение
const BASE_URL = 'https://apilearn.tukas.dev';
async function main() {
const params = new URLSearchParams({ category: 'bedroom' });
const response = await fetch(`${BASE_URL}/api/products/?${params}`);
const data = await response.json();
console.log(data.count);
console.log(data.results[0].name);
}
main();
Сортировка по цене
#Получите 5 самых дешёвых товаров с помощью `ordering=price` и `page_size=5`. Выведите название и цену каждого.
const BASE_URL = 'https://apilearn.tukas.dev';
async function main() {
// ordering=price, page_size=5
// вывести название и цену каждого
}
main();
Решение
const BASE_URL = 'https://apilearn.tukas.dev';
async function main() {
const params = new URLSearchParams({ ordering: 'price', page_size: 5 });
const response = await fetch(`${BASE_URL}/api/products/?${params}`);
const data = await response.json();
for (const p of data.results) {
console.log(p.name, p.price);
}
}
main();
Поиск товаров
#Найдите товары по запросу "oak" с помощью параметра `search`. Выведите общее количество найденных и название каждого.
const BASE_URL = 'https://apilearn.tukas.dev';
async function main() {
// search=oak, вывести count и каждое название
}
main();
Решение
const BASE_URL = 'https://apilearn.tukas.dev';
async function main() {
const params = new URLSearchParams({ search: 'oak' });
const response = await fetch(`${BASE_URL}/api/products/?${params}`);
const data = await response.json();
console.log(`${data.count} результатов`);
for (const p of data.results) {
console.log(p.name);
}
}
main();
Комбинация категории и сортировки
#Получите самые дорогие товары категории "dining-room" — объедините `category=dining-room` и `ordering=-price`. Выведите название и цену каждого результата на первой странице.
const BASE_URL = 'https://apilearn.tukas.dev';
async function main() {
// category=dining-room, ordering=-price
}
main();
Решение
const BASE_URL = 'https://apilearn.tukas.dev';
async function main() {
const params = new URLSearchParams({ category: 'dining-room', ordering: '-price' });
const response = await fetch(`${BASE_URL}/api/products/?${params}`);
const data = await response.json();
for (const p of data.results) {
console.log(p.name, p.price);
}
}
main();
Переиспользуемая функция getProducts()
#Напишите функцию `getProducts(params = {})`, которая принимает объект параметров запроса и возвращает массив `results`. Вызовите её тремя способами: без параметров, с `category` и с `search` + `ordering`.
const BASE_URL = 'https://apilearn.tukas.dev';
async function getProducts(params = {}) {
// построить URL из params, вернуть массив results
}
async function main() {
const all = await getProducts();
console.log('all:', all.length);
const bedroom = await getProducts({ category: 'bedroom' });
console.log('bedroom:', bedroom.length);
const found = await getProducts({ search: 'wood', ordering: 'price' });
console.log('wood asc:', found.length);
}
main();
Решение
const BASE_URL = 'https://apilearn.tukas.dev';
async function getProducts(params = {}) {
const qs = new URLSearchParams(params);
const response = await fetch(`${BASE_URL}/api/products/?${qs}`);
const data = await response.json();
return data.results;
}
async function main() {
const all = await getProducts();
console.log('all:', all.length);
const bedroom = await getProducts({ category: 'bedroom' });
console.log('bedroom:', bedroom.length);
const found = await getProducts({ search: 'wood', ordering: 'price' });
console.log('wood asc:', found.length);
}
main();