API является аббревиатурой от Application Programming Interface, что в переводе означает программный интерфейс приложения. API представляет набор правил и функций, позволяющих двум разным приложениям взаимодействовать друг с другом. Подобные интерфейсы облегчают интеграцию приложений, давая возможность разработчикам создавать мощные диджитал решения.
API выступает посредником между приложениями, отправляя запросы и ответы. Например, регистрация в приложении через существующий аккаунт в Twitter пользователя происходит через API Twitter, который разработчики интегрировали в приложение.
Для отправки и получения тех самых запросов (функций) и в зависимости от назначения API следует разным протоколам и стандартам. Различают следующие типы протоколов и архитектур:
- XML-RPC — позволяет выполнять обмен функциями между двумя или более сетями. XML-RPC использует XML для описания запросов и ответов, и при помощи протоколов HTTP передает информацию от клиента к серверу.
- JSON-RPC — это облегченный RPC, похожий на XML. Протокол закодирован в JSON, позволяет получать вызовы на сервер с возможностью асинхронных ответов.
- SOAP — simple object access protocol — протокол для обмена структурированной информацией при реализации веб-сервисов в компьютерных сетях. SOAP использует XML для аутентификации, авторизации и взаимодействия процессов в операционных системах и позволяет клиентам вызывать веб-сервисы и получать ответы независимо от языка и платформы.
- REST API — репрезентативная передача состояния (REST) — это архитектурный стиль, который осуществляет реализацию клиента и сервера независимо друг от друга. Сервисы в REST API взаимодействуют по протоколу HTTP.
Именно на REST API мы заострим наше внимание и детально разберем, что это такое и чем интерфейс отличается от других типов API.
Что такое REST API
REST или Representational state transfer, что переводится как передача состояния представления — это архитектурный стиль проектирования API с использованием протокола HTTP. Главное преимущество REST — большая гибкость.
REST API применяется везде, где есть необходимость предоставления данных с сервера пользователю веб-приложения или сайта.
Главными компонентами REST API являются:
Client — клиент или программа, которая запущена на стороне пользователя (на его девайсе) и инициирует коммуникацию.
Server — сервер, который предоставляет API в качестве доступа к своим данным и функциям.
Resource — ресурс представляет собой любой вид контента (видео, текст, картинка), который сервер может передать клиенту.
Как работает REST API
REST API взаимодействует при помощи HTTP запросов, выполняя стандартные функции: создание, обновление, чтение, удаление записей в ресурсе. Существует четыре метода, описывающих, что нужно делать с ресурсом:
- POST — создание ресурса;
- GET — получение ресурса;
- PUT — обновление ресурса;
- DELETE — удаление ресурса.
Ресурс
Ресурс — это ключевая абстракция информации. Любой вид информации, который мы можем использовать, может быть ресурсом: документ, изображение, временный сервис.
Состояние ресурса в любой определенный момент называется представлением ресурса. Оно состоит из:
- данных;
- метаданных, описывающих данные;
- гипермедиа ссылок, которые помогают клиентам перейти в следующее состояние.
Эта информация доставляется клиенту в любом формате: JavaScript (JSON), HTML, XLT, Python, PHP или простой текст.
JSON наиболее популярен, потому что он читабелен для машин и людей и не зависит от языка программирования.
Чтобы получить доступ к ресурсу, клиент отправляет запрос. Сервер генерирует ответ с закодированными данными о ресурсе.
Структура любого запроса включает в себя четыре основных компонента: HTTP метод (о которых мы говорили ранее), эндпоинты, заголовки и тело.
HTTP метод описывает, что должно быть сделано с ресурсом. Чуть выше мы упоминали 4 доступных метода: POST, GET, PUT, DELETE.
Эндпоинт содержит URI — Uniform Resource Identifier (унифицированный идентификатор ресурса), который указывает, где и как найти ресурс в Интернете. Самый распространенный тип URI — это URL или Uniform Resource Location, который является полноценным веб-адресом.
Заголовки хранят информацию, относящуюся как к клиенту, так и к серверу. Главным образом, заголовки предоставляют аутентификационные данные: API ключ, название или IP адрес компьютера, на котором установлен сервер, а также информацию о формате ответа.
Тело необходимо для передачи серверу дополнительной информации: данные тела body — это данные, которые вы, к примеру, хотите добавить или заменить.
Принципы REST API
REST не привязан к какой-либо конкретной технологии или платформе, он не зависит от языка. Он также не указывает, как именно создавать API, но использует 6 архитектурных ограничений, которые должны быть соблюдены, чтобы интерфейс можно было назвать RESTful. Именно эти принципы REST API описывают, как сервер обрабатывает запросы и отвечает на них.
Client-server
Приложение REST имеет клиент-серверную архитектуру. Клиентом является тот, кто отправляет запросы на ресурсы и никак не связан с хранилищем данных. Хранение данных остается внутри сервера. Серверы же не связываются с пользовательским интерфейсом. Другими словами, клиент и сервер независимы друг от друга и могут развиваться отдельно, что делает REST API более гибким и масштабируемым.
Uniform Interface
Унифицированный интерфейс или единый интерфейс — это главное, что отличает REST API от других видов. Он предполагает наличие единого способа взаимодействия с сервером вне зависимости от типа устройства или приложения.
Единый интерфейс включает в себя четыре основных принципа:
- Identification of resources. Каждый ресурс в REST имеет идентификатор, который не зависит от состояния ресурса. В роли идентификатора выступает URL.
- Manipulation of resources through representations (манипулирование ресурсами через представления). Клиент имеет представление ресурса, которое содержит данные для его удаления или изменения. Клиент отправляет представление на сервер (объект JSON), который он хочет изменить, удалить или добавить.
- Self-descriptive messages (самодокументируемые сообщения). Такие сообщения содержат нужную информацию для получателя, чтобы понять ее. Никакой дополнительной информации не требуется в отдельной документации или сообщениях. Каждое сообщение имеет достаточную информацию, чтобы сервер легко проанализировал запрос.
- Hypermedia as the engine of application state (гипермедиа как двигатель состояния приложения). Гипермедиа подразумевает использование ссылок для каждого ответа, чтобы клиент мог найти другие ресурсы. Таким образом все взаимодействия в REST проходят через гипермедиа.
Stateless (без состояния)
Сервер не содержит никакой информации о клиенте. Каждый запрос включает всю необходимую информацию для обработки. Информация о сессии полностью хранится на стороне клиента.
Cacheable (кэшируемость)
Каждый ответ должен содержать данные о том, является ли он кэшируемым или нет и в течение какого времени ответ может быть кэширован на стороне клиента. Если ответ может быть кэширован, то в последующих похожих запросах клиент может использовать те же данные без повторного обращения на сервер. При правильном использовании это улучшает производительность и доступность.
Layered system (многоуровневая система)
В REST используется многоуровневая система — иерархия слоев, которая создает определенные ограничения на поведение компонентов. В многоуровневой системе, компоненты могут видеть только те компоненты, которые расположены на ближайших уровнях и с которыми они взаимодействуют.
Code on demand (код по запросу)
Это опциональная функция, которая позволяет клиенту загружать и выполнять код.
Главные отличия REST API от других API
Шесть принципов REST API являются основными отличиями интерфейса от других типов. Помимо этого, есть еще несколько параметров, которые отличают REST от других API.
В первую очередь, сама суть REST определяет его несопоставимость с другими протоколами. REST — это архитектурный стиль, где архитектура REST представляет набор требований, которым нужно следовать, чтобы предоставить веб-службу RESTful. A, например, SOAP и RPC являются протоколами обмена сообщениями. Протокол описывает эти сообщения, когда архитектурный REST API только определяет требования (в данном случае ограничения), которые сообщения должны выполнять.
Структура
Большинство программных интерфейсов работают в формате приложение-приложение, когда REST действует по принципе Клиент-Сервер. В данном случае клиент и сервер не зависят друг от друга, что дает больше гибкости в работе.
Формат обмена сообщениями
Обычно API используют конкретные форматы сообщений, например, SOAP использует XML. REST не придерживается такого строгого принципа. Обмен сообщений может происходить на основе JSON, XML или любого другого формата. Самым популярным является JSON (JavaScript Object Notation).
Популярность JSON вполне обоснована — это легко читаемый человеком и быстрый для анализа формат обмена данными. JSON независим от языка и может быть использован с любым языком программирования помимо JavaScript.
Гибкость
REST является более гибкой архитектурой, благодаря чему и стал таким популярным. Он решает проблемы, которые вызывает тот же SOAP, являясь сложным протоколом с расширенными функциями безопасности, что требует большей пропускной способности. REST состоит из простых рекомендаций, давая возможность разработчикам реализовывать требования в своем формате. Архитектурный стиль также имеет высокую производительность. Что сделало особенно востребованным для мобильных устройств, где быстрота загрузки особенно важна.
REST обладает определенными преимуществами над другими типами API. Именно поэтому все крупные компании такие, как Twitter и Google, уже давно внедрили REST API для своих продуктов. Ведь это идеальный способ передачи функций и данных разработчикам по всему миру и проверенный механизм для создания эффективных и масштабируемых интерфейсов для разработки ПО.