Различия
Показаны различия между двумя версиями страницы.
| Предыдущая версия справа и слева Предыдущая версия Следующая версия | Предыдущая версия | ||
|
zaprosi_do_http_api [2024/01/24 19:30] tro |
zaprosi_do_http_api [2024/01/24 19:56] (текущий) tro |
||
|---|---|---|---|
| Строка 1: | Строка 1: | ||
| ====== Запроси до HTTP / Api ====== | ====== Запроси до HTTP / Api ====== | ||
| - | ===== fetch (відправка запиту) ===== | + | ====== fetch (відправка запиту) |
| Набір властивостей і методів, | Набір властивостей і методів, | ||
| < | < | ||
| Строка 54: | Строка 54: | ||
| }); | }); | ||
| </ | </ | ||
| - | ===== HTTP-методи ===== | + | ===== HTTP-методи |
| - | * **POST** — створити новий ресурс | + | * **POST** — створити новий ресурс |
| - | * **GET** — отримати набір ресурсів або один ресурс | + | * **GET** — отримати набір ресурсів або один ресурс |
| - | * **PUT** — оновити існуючий або створити новий ресурс | + | * **PUT** — оновити існуючий або створити новий ресурс |
| - | * **PATCH** — оновити існуючий ресурс | + | * **PATCH** — оновити існуючий ресурс |
| - | * **DELETE** — видалити ресурс | + | * **DELETE** — видалити ресурс(**D**elete) |
| + | |||
| + | = CRUD | ||
| < | < | ||
| const options = { | const options = { | ||
| Строка 89: | Строка 91: | ||
| Наприклад, | Наприклад, | ||
| < | < | ||
| - | fetch(" | + | fetch(" |
| headers: { | headers: { | ||
| Accept: " | Accept: " | ||
| Строка 97: | Строка 99: | ||
| }); | }); | ||
| </ | </ | ||
| + | ===== Кросдоменні запити ===== | ||
| + | За замовчуванням HTTP-запит можна робити тільки в рамках поточного сайту. При спробі запиту на інший домен, порт або протокол (тобто при спробі виконати кросдоменний запит), | ||
| + | На кожному запиті браузер сам додає HTTP-заголовок Origin, де вказує адресу вебсторінки, | ||
| + | < | ||
| + | GET /users | ||
| + | Host: my-api.com | ||
| + | Origin: < | ||
| + | </ | ||
| + | ===== AJAX (Asynchronous JavaScript and XML) ===== | ||
| + | Метод отримання або відправлення даних з подальшим оновленням інтерфейсу за цими даними, | ||
| + | Незважаючи на те, що в назві технології присутній XML, у сучасному інтернеті його замінив JSON, а назву залишили як данину пам' | ||
| + | < | ||
| + | const fetchUsersBtn = document.querySelector(" | ||
| + | const userList = document.querySelector(" | ||
| + | |||
| + | fetchUsersBtn.addEventListener(" | ||
| + | fetch("< | ||
| + | .then((response) => { | ||
| + | if (!response.ok) { | ||
| + | throw new Error(response.status); | ||
| + | } | ||
| + | return response.json(); | ||
| + | }) | ||
| + | .then((users) => { | ||
| + | const markup = users.map((user) => { | ||
| + | return `<li> | ||
| + | < | ||
| + | < | ||
| + | < | ||
| + | </ | ||
| + | }) | ||
| + | .join("" | ||
| + | |||
| + | userList.insertAdjacentHTML(" | ||
| + | }) | ||
| + | .catch((error) => console.log(error)); | ||
| + | }); | ||
| + | </ | ||
| + | ====== GET (Запит) ====== | ||
| + | ===== Параметри рядка запиту ===== | ||
| + | Символ ? вказує на початок параметрів запиту. Кожен параметр — це пара ім' | ||
| + | < | ||
| + | fetch(" | ||
| + | </ | ||
| + | ==== Клас URLSearchParams ==== | ||
| + | Параметрів може бути багато, | ||
| + | Під час складання рядків параметрів, | ||
| + | |||
| + | **Приклад 1** | ||
| + | < | ||
| + | const searchParams = new URLSearchParams({ | ||
| + | _limit: 5, | ||
| + | _sort: " | ||
| + | }); | ||
| + | |||
| + | console.log(searchParams.toString()); | ||
| + | const url = `https:// | ||
| + | |||
| + | console.log(url); | ||
| + | </ | ||
| + | У разі інтерполяції значення в шаблонних рядках відбувається його неявне перетворення в рядок, тому не потрібно викликати метод toString() під час складання URL. Не забувай вказувати початок рядка запиту символом ?. | ||
| + | |||
| + | **Приклад 2** | ||
| + | < | ||
| + | // Change this number to fetch different post | ||
| + | const postId = 1; | ||
| + | |||
| + | fetch(`https:// | ||
| + | .then((response) => { | ||
| + | if (!response.ok) { | ||
| + | throw new Error(response.status); | ||
| + | } | ||
| + | return response.json(); | ||
| + | }) | ||
| + | .then(post => console.log(post)) | ||
| + | .catch(error => console.log(error)); | ||
| + | </ | ||
| + | ====== Post (Створення) ====== | ||
| + | Метод POST використовується для додавання нового ресурсу. | ||
| + | < | ||
| + | const postToAdd = { | ||
| + | title: " | ||
| + | body: "CRUD is awesome!", | ||
| + | }; | ||
| + | |||
| + | const options = { | ||
| + | method: " | ||
| + | body: JSON.stringify(postToAdd), | ||
| + | headers: { | ||
| + | " | ||
| + | }, | ||
| + | }; | ||
| + | |||
| + | fetch("< | ||
| + | .then((response) => { | ||
| + | if (!response.ok) { | ||
| + | throw new Error(response.status); | ||
| + | } | ||
| + | return response.json(); | ||
| + | }) | ||
| + | .then(post => console.log(post)) | ||
| + | .catch(error => console.log(error)); | ||
| + | </ | ||
| + | ====== PUT і PATCH (Оновлення) ====== | ||
| + | Використовуються для оновлення існуючих даних. | ||
| + | За HTTP-стандартом: | ||
| + | * PATCH замінює в наявному ресурсі значення, | ||
| + | * PUT повністю замінює ресурс. Значення ресурсу, | ||
| + | |||
| + | < | ||
| + | // Change value of id property to update different post | ||
| + | const postToUpdate = { | ||
| + | id: 1, | ||
| + | body: "CRUD is really awesome!", | ||
| + | }; | ||
| + | |||
| + | const options = { | ||
| + | method: " | ||
| + | body: JSON.stringify(postToUpdate), | ||
| + | headers: { | ||
| + | " | ||
| + | }, | ||
| + | }; | ||
| + | |||
| + | fetch(`https:// | ||
| + | .then((response) => { | ||
| + | if (!response.ok) { | ||
| + | throw new Error(response.status); | ||
| + | } | ||
| + | return response.json(); | ||
| + | }) | ||
| + | .then(post => console.log(post)) | ||
| + | .catch(error => console.log(" | ||
| + | </ | ||
| + | ====== DELETE (Видалення) ====== | ||
| + | використовується для видалення існуючих даних | ||
| + | < | ||
| + | const postIdToDelete = 1; | ||
| + | |||
| + | fetch(`https:// | ||
| + | method: " | ||
| + | }) | ||
| + | .then((response) => { | ||
| + | if (!response.ok) { | ||
| + | throw new Error(response.status); | ||
| + | } | ||
| + | return response.json(); | ||
| + | }) | ||
| + | .then((deletedPost) => console.log(deletedPost)) | ||
| + | .catch(error => console.log(" | ||
| + | </ | ||
| + | |||