fetch() запросы в JavaScript: отправка и обработка запросов
JavaScript

fetch() запросы в JavaScript: отправка и обработка запросов

Razilator

Fetch - это стандартный способ отправки HTTP-запросов в браузере. Он позволяет асинхронно получать ресурсы с сервера и работать с ними в JavaScript.

Fetch API поддерживается во всех современных браузерах и предоставляет мощный и удобный интерфейс для работы с сетью. В этой статье мы рассмотрим, как использовать fetch() для отправки запросов и обработки ответов.

Основы fetch

Fetch - это функция, которая принимает URL ресурса, который вы хотите получить, и возвращает Promise, который разрешается, когда ответ получен. Обычно вы будете использовать fetch() для получения JSON-данных, изображений, HTML-файлов и других ресурсов.

Пример использования fetch для получения JSON-данных:

index.js
fetch('https://jsonplaceholder.typicode.com/posts/1')
  .then(response => response.json())
  .then(data => console.log(data))
  .catch(error => console.error(error));

В этом примере мы отправляем GET-запрос по URL-адресу https://jsonplaceholder.typicode.com/posts/1, который возвращает JSON-объект. Мы вызываем метод json() для извлечения данных из ответа и обрабатываем результаты в следующем блоке, используя методы then() и catch().

Заголовки запросов fetch

Fetch позволяет добавлять заголовки к запросу, которые определяют, как сервер должен обработать запрос. Например, вы можете указать заголовок Content-Type, чтобы определить тип данных, которые вы отправляете на сервер, или заголовок Authorization, чтобы предоставить доступ к защищенным ресурсам.

Пример использования fetch с заголовками:

index.js
fetch('https://example.com/data', {
  headers: {
    'Content-Type': 'application/json',
    'Authorization': 'Bearer ' + token
  }
})
  .then(response => response.json())
  .then(data => console.log(data))
  .catch(error => console.error(error));

В этом примере мы добавляем заголовки к запросу, передавая объект options со свойством headers. Мы указываем тип данных, отправляемых на сервер, и передаем токен авторизации.

Методы HTTP-запросов в fetch()

Fetch поддерживает все методы HTTP-запросов: GET, POST, PUT, DELETE и другие. По умолчанию fetch() использует метод GET, но вы можете изменить это, передав метод в объект options.

GET-запрос

GET-запрос используется для получения данных с сервера. Он не изменяет данные на сервере и не имеет побочных эффектов.

index.js
fetch('https://jsonplaceholder.typicode.com/posts')
  .then(response => response.json())
  .then(data => console.log(data))
  .catch(error => console.error(error));

POST-запрос

POST-запрос используется для отправки данных на сервер. Он может изменять данные на сервере и имеет побочные эффекты.

index.js
const post = {
  title: 'foo',
  body: 'bar',
  userId: 1
};

fetch('https://jsonplaceholder.typicode.com/posts', {
  method: 'POST',
  headers: {
    'Content-Type': 'application/json'
  },
  body: JSON.stringify(post)
})
  .then(response => response.json())
  .then(data => console.log(data))
  .catch(error => console.error(error));

PUT-запрос

PUT-запрос используется для обновления данных на сервере.

index.js
const post = {
  id: 1,
  title: 'foo',
  body: 'bar',
  userId: 1
};

fetch('https://jsonplaceholder.typicode.com/posts/1', {
  method: 'PUT',
  headers: {
    'Content-Type': 'application/json'
  },
  body: JSON.stringify(post)
})
  .then(response => response.json())
  .then(data => console.log(data))
  .catch(error => console.error(error));

DELETE-запрос

DELETE-запрос используется для удаления данных на сервере.

index.js
fetch('https://jsonplaceholder.typicode.com/posts/1', {
  method: 'DELETE'
})
  .then(response => console.log(response))
  .catch(error => console.error(error));

Кроме основных методов HTTP-запросов GET, POST, PUT и DELETE, с помощью функции fetch() также можно отправлять запросы с использованием других HTTP-методов, таких как OPTIONS, HEAD, PATCH и других. Для этого нужно указать необходимый метод в настройках объекта init.

HTTP-метод OPTIONS

Метод OPTIONS используется для запроса информации о возможностях сервера или параметрах соединения. Например, можно отправить запрос, чтобы узнать, какие методы и заголовки поддерживает сервер для данного ресурса.

Пример запроса OPTIONS:

index.js
fetch('https://example.com/api', {
  method: 'OPTIONS'
})
.then(response => response.json())
.then(data => console.log(data))
.catch(error => console.error(error))

HTTP-метод HEAD

Метод HEAD используется для запроса только заголовков ответа, без тела ответа. Например, можно отправить запрос, чтобы узнать, какие заголовки возвращаются сервером для данного ресурса.

Пример запроса HEAD:

index.js
fetch('https://example.com/api', {
  method: 'HEAD'
})
.then(response => {
  console.log(response.headers.get('content-type'))
})
.catch(error => console.error(error))

HTTP-метод PATCH

Метод PATCH используется для частичного обновления ресурса на сервере. Например, можно отправить запрос, чтобы изменить только одно поле объекта, не обновляя остальные поля.

Пример запроса PATCH:

index.js
fetch('https://example.com/api/users/123', {
  method: 'PATCH',
  headers: {
    'Content-Type': 'application/json'
  },
  body: JSON.stringify({
    name: 'John Doe'
  })
})
.then(response => response.json())
.then(data => console.log(data))
.catch(error => console.error(error))

Другие методы

Кроме указанных выше методов, с помощью функции fetch() также можно отправлять запросы с использованием других HTTP-методов, таких как CONNECT, TRACE, MOVE и др. Для этого нужно указать необходимый метод в настройках объекта init.

index.js
fetch('https://example.com/api', {
  method: 'CONNECT'
})
.then(response => response.text())
.then(data => console.log(data))
.catch(error => console.error(error))

Однако, не все серверы поддерживают эти методы, поэтому перед их использованием необходимо проверить документацию API или связаться с разработчиками сервера.

Обработка ошибок при использовании fetch

При использовании fetch() может возникнуть ряд ошибок, связанных с сетью, сервером и другими факторами. Например, сервер может вернуть ошибку в ответ на запрос или сетевое соединение может быть прервано. Чтобы обрабатывать такие ошибки, мы можем использовать метод catch().

Вот пример использования метода catch() при выполнении запроса:

index.js
fetch('https://example.com/api/data')
  .then(response => {
    if (!response.ok) {
      throw new Error('Network response was not ok');
    }
    return response.json();
  })
  .then(data => {
    console.log(data);
  })
  .catch(error => {
    console.error('There has been a problem with your fetch operation:', error);
  });

В этом примере мы добавили обработку ошибок с помощью метода catch(). Если при выполнении запроса произойдет ошибка, мы выведем сообщение об ошибке в консоль.

Заключение

Функция fetch() - это удобный способ отправки HTTP-запросов в JavaScript. Она позволяет получать данные с сервера и отправлять данные на сервер, используя различные методы HTTP-запросов. Кроме того, функция fetch() позволяет устанавливать различные параметры запроса, такие как заголовки, методы, тело запроса и т.д.

;