JavaScript · API · Середній
Кошик
Додавайте, оновлюйте і видаляйте товари з кошика за допомогою автентифікованих запитів.
Короткий вступ до теми та пояснення перед вправами (вправи нижче):
Додавання, оновлення та видалення позицій кошика
#Довідник API кошика
#Вправи:
Переглянути кошик
#Авторизуйтесь та надішліть GET до `/api/cart/`. Виведіть кількість товарів у кошику та `total_price`.
const BASE_URL = 'https://apilearn.tukas.dev';
async function main() {
// 1. отримати токен
// 2. GET /api/cart/ і вивести кількість товарів та total_price
}
main();
Рішення
const BASE_URL = 'https://apilearn.tukas.dev';
async function main() {
const { token } = await fetch(`${BASE_URL}/api/auth/token/`, {
method: 'POST',
headers: { 'Content-Type': 'application/json' },
body: JSON.stringify({ username: 'YOUR_USERNAME', password: 'YOUR_PASSWORD' }),
}).then(r => r.json());
const headers = { 'Authorization': `Token ${token}` };
const cart = await fetch(`${BASE_URL}/api/cart/`, { headers }).then(r => r.json());
console.log(cart.items.length);
console.log(cart.total_price);
}
main();
Додати товар до кошика
#Знайдіть будь-який товар у `/api/products/` і додайте його до кошика з кількістю 1. Виведіть `id` позиції кошика з відповіді.
const BASE_URL = 'https://apilearn.tukas.dev';
async function main() {
// 1. отримати токен
// 2. отримати slug товару з /api/products/
// 3. POST до /api/cart/items/ і вивести id позиції
}
main();
Рішення
const BASE_URL = 'https://apilearn.tukas.dev';
async function main() {
const { token } = await fetch(`${BASE_URL}/api/auth/token/`, {
method: 'POST',
headers: { 'Content-Type': 'application/json' },
body: JSON.stringify({ username: 'YOUR_USERNAME', password: 'YOUR_PASSWORD' }),
}).then(r => r.json());
const headers = {
'Authorization': `Token ${token}`,
'Content-Type': 'application/json',
};
const slug = await fetch(`${BASE_URL}/api/products/`).then(r => r.json())
.then(d => d.results[0].slug);
const item = await fetch(`${BASE_URL}/api/cart/items/`, {
method: 'POST',
headers,
body: JSON.stringify({ product_slug: slug, quantity: 1 }),
}).then(r => r.json());
console.log(item.id);
}
main();
Оновити кількість товару
#Додайте товар до кошика, потім оновіть його кількість до 3 за допомогою PATCH. Виведіть оновлену кількість із відповіді.
const BASE_URL = 'https://apilearn.tukas.dev';
async function main() {
// 1. авторизуватись
// 2. додати товар
// 3. PATCH кількість до 3
// 4. вивести оновлену кількість
}
main();
Рішення
const BASE_URL = 'https://apilearn.tukas.dev';
async function main() {
const { token } = await fetch(`${BASE_URL}/api/auth/token/`, {
method: 'POST',
headers: { 'Content-Type': 'application/json' },
body: JSON.stringify({ username: 'YOUR_USERNAME', password: 'YOUR_PASSWORD' }),
}).then(r => r.json());
const headers = {
'Authorization': `Token ${token}`,
'Content-Type': 'application/json',
};
const slug = await fetch(`${BASE_URL}/api/products/`).then(r => r.json())
.then(d => d.results[0].slug);
const item = await fetch(`${BASE_URL}/api/cart/items/`, {
method: 'POST',
headers,
body: JSON.stringify({ product_slug: slug, quantity: 1 }),
}).then(r => r.json());
const updated = await fetch(`${BASE_URL}/api/cart/items/${item.id}/`, {
method: 'PATCH',
headers,
body: JSON.stringify({ quantity: 3 }),
}).then(r => r.json());
console.log(updated.quantity);
}
main();
Видалити одну позицію
#Додайте товар до кошика, потім видаліть його через DELETE `/api/cart/items/{id}/`. Переконайтесь, що кошик порожній, запитавши його знову і вивівши кількість товарів.
const BASE_URL = 'https://apilearn.tukas.dev';
async function main() {
// додати товар, видалити його, перевірити що кошик порожній
}
main();
Рішення
const BASE_URL = 'https://apilearn.tukas.dev';
async function main() {
const { token } = await fetch(`${BASE_URL}/api/auth/token/`, {
method: 'POST',
headers: { 'Content-Type': 'application/json' },
body: JSON.stringify({ username: 'YOUR_USERNAME', password: 'YOUR_PASSWORD' }),
}).then(r => r.json());
const headers = {
'Authorization': `Token ${token}`,
'Content-Type': 'application/json',
};
const slug = await fetch(`${BASE_URL}/api/products/`).then(r => r.json())
.then(d => d.results[0].slug);
const item = await fetch(`${BASE_URL}/api/cart/items/`, {
method: 'POST', headers,
body: JSON.stringify({ product_slug: slug, quantity: 1 }),
}).then(r => r.json());
await fetch(`${BASE_URL}/api/cart/items/${item.id}/`, { method: 'DELETE', headers });
const cart = await fetch(`${BASE_URL}/api/cart/`, { headers }).then(r => r.json());
console.log(cart.items.length); // 0
}
main();
Додати два товари і очистити кошик
#Додайте два різних товари до кошика. Виведіть `total_price`. Потім очистіть весь кошик через DELETE `/api/cart/items/` і перевірте, що він порожній.
const BASE_URL = 'https://apilearn.tukas.dev';
async function main() {
// додати 2 товари, вивести total_price, очистити кошик, перевірити що порожній
}
main();
Рішення
const BASE_URL = 'https://apilearn.tukas.dev';
async function main() {
const { token } = await fetch(`${BASE_URL}/api/auth/token/`, {
method: 'POST',
headers: { 'Content-Type': 'application/json' },
body: JSON.stringify({ username: 'YOUR_USERNAME', password: 'YOUR_PASSWORD' }),
}).then(r => r.json());
const headers = {
'Authorization': `Token ${token}`,
'Content-Type': 'application/json',
};
const products = await fetch(`${BASE_URL}/api/products/`).then(r => r.json())
.then(d => d.results);
for (const p of products.slice(0, 2)) {
await fetch(`${BASE_URL}/api/cart/items/`, {
method: 'POST', headers,
body: JSON.stringify({ product_slug: p.slug, quantity: 1 }),
});
}
const cart = await fetch(`${BASE_URL}/api/cart/`, { headers }).then(r => r.json());
console.log('Total:', cart.total_price);
await fetch(`${BASE_URL}/api/cart/items/`, { method: 'DELETE', headers });
const empty = await fetch(`${BASE_URL}/api/cart/`, { headers }).then(r => r.json());
console.log('After clear:', empty.items.length);
}
main();