Записаться на курс
Основы технической грамотности

Что такое REST API

Основано на статье: https://appmaster.io/ru/blog/kak-sozdat-api-bez-koda

Вводная информация

API означает Application Programming Interface, программный интерфейс приложения. Это способы, с помощью которых клиент и сервер могут взаимодействовать друг с другом. Клиент и сервер отправляют запросы и ответы, а API выступает посредником между ними. 

Важно, чтобы взаимодействие сервера и клиента было легким, понятным и удобным. Это упрощает задачу как разработчиков (не нужно заново изобретать новый сервис), так и пользователей (сервис проще освоить, если он работает по знакомому принципу). Существует несколько видов API:
  • Web service APIs, XML-RPC, and JSON-RPC, SOAP;
  • WebSockets APIs;
  • Library-based APIs, Java Script;
  • Class-based APIs, C# API, Java.

REST или целиком Representational State Transfer — архитектурный стиль взаимодействия (обмена информацией) между клиентом и сервером. Сервисы в REST API взаимодействуют по протоколу HTTP.
Стиль REST обладает определенными преимуществами. Главное преимущество REST — большая гибкость. REST состоит из простых рекомендаций, давая возможность разработчикам реализовывать требования в своем формате. REST имеет высокую производительность, что очень важно, например, для быстрой загрузки на мобильных устройствах. Именно поэтому все крупные компании такие, как Twitter и Google, уже давно внедрили REST API для своих продуктов. Более детально про работу и главные преимущества REST API вы можете прочитать в нашей статье.

Структура запроса

Структура любого запроса включает в себя пять основных компонентов: HTTP метод, эндпоинты, заголовки(header) и тело(body), параметры запроса.

В REST API используются 4 основных HTTP-метода для работы с ресурсом (информацией) и каждый из них описывает, что должно быть сделано с ресурсом:
POST — создание ресурса
Например, когда вы заказываете пиццу и добавляете её в корзину, вы отправляете POST-запрос на сервер и сообщаете ему, что хотите создать новую корзину

GET — получение ресурса
Когда вы открываете сайт любимой пиццерии, вы отправляете GET-запрос с помощью которого сообщаете серверу, что хотите получить список доступных для заказа пицц, а сервер возвращает список пицц вам в браузер и вы видите их на сайте

PUT — обновление ресурса
Когда вы изменяете количество определенной пиццы в корзине, вы отправляете PUT-запрос и сообщаете серверу, что хотите обновить информацию в уже созданной корзине

DELETE — удаление ресурса
Когда вы нажимаете на кнопку "Очистить корзину", вы отправляете на сервер DELETE-запрос, который сообщает ему какую корзину удалить из базы данных

Ресурс — это любой вид информации (документ, изображение, видео, текст и так далее) в базе данных.

Эндпоинт(конечная точка) - по сути, это ссылка по которой пользователь отправляет запрос и по которой сервер определяет какую команду нужно выполнить. Содержит URI — Uniform Resource Identifier (унифицированный идентификатор ресурса), который указывает, где и как найти ресурс в Интернете и включает в себя URL (URL или Uniform Resource Location является полноценным веб-адресом).

Например, если мы отправляем POST-запрос на эндпоинт 
https://graph.facebook.com/{page-id}/feed?message=Hello Fans!&access_token={page-access-token}
То мы сообщаем серверу Facebook, что хотим разместить пост на определенной странице и если запрос корректный, то Facebook создаст этот пост и он станет виден на указанной нами странице

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

Тело необходимо для передачи серверу дополнительной информации: данные тела запроса — это данные, которые вы, например, хотите добавить или заменить.

Например, для примера выше, в тело запроса мы бы отправили такие данные как:
  • page-id - указываем ID страницы, чтобы Facebook точно определил на какой странице нужно опубликовать пост
  • message - указываем текст поста, который должен быть размещён на странице
  • access-token - уникальный токен, по которому facebook определяет авторизованный ли пользователь отправляет запрос или нет. Часто такие данные отправляются в заголовке запроса, но всё уникально и нужно читать документацию, чтобы определить  в каком формате нужно составить и отправить запрос для корректной работы