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();