API (Application Programming Interface) — это набор инструментов и правил, которые позволяют различным программам взаимодействовать друг с другом и обмениваться данными. Для этого используются функции, классы, методы, структуры и иногда константы одной программы, к которым обращаются другие программы. Это основной принцип работы API. Например, когда вы покупаете билет в кино с помощью банковской карты, терминал обращается к API банка, который выпустил вашу карту, и отправляет запрос на оплату. А если вы заказываете такси через приложение, оно также обращается к платёжной системе через API. Таким образом, терминал отправляет запрос в банк, чтобы человек мог купить билет в кино.
Интерфейс программы напоминает соглашение между покупателем и продавцом. Только в этой ситуации покупателем выступает приложение, которое нуждается в информации, а продавцом — сервер или ресурс, откуда мы берём эти данные. В этом соглашении оговариваются условия, на которых клиент может получить информацию.
API можно встретить практически везде:
В языках программирования он служит для корректного взаимодействия функций между собой. Функция, которая вызывает другую функцию, должна строго соблюдать тип данных и порядок параметров вызываемой функции.
В операционной системе он позволяет программам получать данные из памяти или изменять настройки системы. Поэтому для разработки приложений для конкретной операционной системы необходимо знать её API.
В веб-среде сервисы взаимодействуют друг с другом через программный интерфейс. Если API является открытым, то создатели сервиса-источника публикуют официальную документацию по работе с ним. Примером такой документации может служить документация Telegram. Хотя термин имеет широкое значение, в большинстве случаев в вакансиях речь идёт о третьем варианте.
API — это граница между двумя функциональными системами, на которой происходит их взаимодействие и обмен информацией. При этом процессы внутри каждой из систем скрыты друг от друга.
С помощью API можно использовать возможности разных систем, не задумываясь о том, как они обрабатывают наши запросы и что у них «под капотом». Например, чтобы позвонить, не нужно знать, как смартфон обрабатывает нажатия на экран. Важно лишь, что в устройстве есть «кнопка», которая всегда даёт одинаковый результат в ответ на определённые действия. Точно так же с помощью вызовов API можно выполнить определённые функции программы, не зная, как она работает. Поэтому API и называют интерфейсом.
Как API способствует созданию надёжных программных продуктов
Обычно мы не вникаем в детали внутренней структуры программ. Однако это не всегда необходимо. Поэтому программную реализацию часто называют «чёрным ящиком» и скрывают за несколькими уровнями абстракции, чтобы пользователям было проще работать с программами.
Уровни абстракции значительно ускоряют процесс разработки, поскольку программисты могут использовать готовые функции API в других программах. Это обычная практика. Например, большинство операционных систем предоставляют свои API другим программам, чтобы те могли: взаимодействовать с файловой системой; отображать графику; хранить данные; использовать сетевые возможности; воспроизводить аудио и так далее.
Windows, Linux или macOS определяют, какие функции нужно вызвать и какие параметры передать для выполнения определённых действий. Это описывается в документации к API, с которой работают разработчики других программ.
Если API для облачных вычислений станет работать быстрее при извлечении квадратного корня, то и все программы, которые его используют — от онлайн-калькуляторов до нейросетей — также будут работать быстрее.
Виды API
Для различных проектов требуются разные API, поскольку в некоторых случаях важна скорость работы, а в других — надёжность и совместимость с определённой экосистемой.
Web API
Web API — это общее название для всех API, которые используются для взаимодействия между веб-сервисами через Интернет. Они позволяют приложениям обмениваться данными и выполнять действия по протоколу HTTP(S). Все перечисленные ниже интерфейсы относятся к Web API.
REST
REST API — это архитектурный подход к созданию веб-сервисов. Он определяет ограничения устройства и функциональности API. По сути, REST — это набор правил и принципов. Их всего шесть:
Архитектура клиент-сервер. В этом случае приложение состоит из двух частей: сервера и клиента. Например, код и ресурсы этой страницы хранятся на серверах Skillbox, а ваш браузер выступает в роли клиента, который получает нужные данные с сервера.
Отсутствие состояния. Сервер не хранит информацию о предыдущих взаимодействиях с клиентом, поэтому каждый запрос от клиента должен быть независимым. Это позволяет значительно снизить нагрузку на сервер, так как ему не нужно хранить информацию о каждой сессии обмена данными с клиентом.
Кэширование. Благодаря функции кэширования клиент может сохранять ответы API для последующего использования без необходимости повторного запроса. Это позволяет снизить задержку и нагрузку на сервер. Ответы REST API также должны содержать информацию о том, могут ли они быть кэшированы клиентом.
Единообразие интерфейса. REST API должны работать через унифицированный интерфейс, который упрощает взаимодействие между клиентами и серверами.. В REST API используются стандартные методы HTTP, такие как GET, POST, PUT и DELETE, а также чёткие правила именования ресурсов.
Также стоит упомянуть о методах GET и POST в HTTP и о концепции слоёв (layered system). Архитектура REST API представляет собой сложную систему, состоящую из множества компонентов, таких как серверы, прокси, шлюзы, балансировщики нагрузки и другие вспомогательные системы. Из-за этого клиенты не всегда могут точно определить, с кем они взаимодействуют — с основным сервером или с его дублирующей системой.
Кроме того, в REST API существует принцип code on demand, который позволяет серверу отправлять код, который будет выполняться на стороне клиента. Это может быть код JS-скриптов и других интерактивных элементов интерфейса.
Преимущества REST API:
- Освоить его проще, чем SOAP или GraphQL.
- Используются стандартные методы HTTP.
- Широкая поддержка и совместимость с веб-технологиями.
- Возможность кэширования и масштабирования.
Недостатки REST API:
- API использует текстовые форматы, такие как JSON, что приводит к увеличению объёма передаваемых данных по сравнению с бинарными форматами.
- Отсутствие единого стандарта
- У REST API нет строгой спецификации, и многие разработчики реализуют API в соответствии с требованиями конкретного проекта. Это усложняет интеграцию с другими сервисами.
- Недостаточная безопасность
- Разработчики должны самостоятельно внедрять средства авторизации и аутентификации, поскольку встроенных механизмов защиты нет.
- Отсутствие поддержки долгоживущих соединений
REST API построен на синхронном протоколе HTTP, который работает по принципу «запрос — ответ». Из-за этого разработчики не могут реализовать поддержку долгоживущих соединений, таких как веб-сокеты.
REST API широко применяется в веб-разработке для организации взаимодействия между клиентом и сервером. Например, на основе принципов REST разрабатывают API для социальных сетей, онлайн-магазинов и мобильных приложений.
Строгий протокол обмена сообщениями по сети SOAP требует использования языка разметки XML для форматирования сообщений. Правила описания, обработки и передачи сообщений строго стандартизированы.
Одной из главных особенностей SOAP является высокий уровень безопасности, который достигается за счёт механизмов шифрования, аутентификации сообщений и управления транзакциями.
Преимущества SOAP API:
- Стандартизация. SOAP — это стандартизированный протокол с чёткими правилами обмена сообщениями, что обеспечивает предсказуемость результатов.
- Безопасность. Поддерживаются методы шифрования и управления транзакциями, а также возможность подписывать сообщения цифровой подписью, что особенно важно для корпоративных приложений.
- Гибкость. SOAP может работать поверх различных протоколов передачи данных, включая HTTP, TCP и SMTP, в отличие от REST API, который использует только HTTP.
Недостатки SOAP API:
- Эффективность. Внедрение и обслуживание SOAP требует больше времени, чем REST.
- Производительность. Объём ответов SOAP часто превышает объём ответов других API, что замедляет передачу данных.
- Ограниченная поддержка JSON. По умолчанию SOAP работает с XML, в то время как современные веб-приложения используют JSON. Это требует модификации протокола.
GraphQL
GraphQL — это язык запросов для API. Его преимущество в том, что он позволяет клиентам запрашивать только необходимые данные. Кроме того, с помощью одного запроса GraphQL можно получить данные, которые в REST потребовали бы нескольких запросов. Это возможно благодаря строгой типизации структуры запросов.
Преимущества GraphQL:
- Эффективность. Внедрение и обслуживание SOAP требует больше времени, чем REST.
- Производительность. Объём ответов SOAP часто превышает объём ответов других API, что замедляет передачу данных.
- Ограниченная поддержка JSON. По умолчанию SOAP работает с XML, в то время как современные веб-приложения используют JSON. Это требует модификации протокола.
GraphQL — это язык запросов для API. Его преимущество в том, что он позволяет клиентам запрашивать только необходимые данные. Кроме того, с помощью одного запроса GraphQL можно получить данные, которые в REST потребовали бы нескольких запросов. Это возможно благодаря строгой типизации структуры запросов.
Гибкость. Клиенты могут запрашивать только те данные, которые им необходимы, что позволяет избежать передачи лишней информации.
Сбор данных. С помощью одного запроса можно получить данные из нескольких источников. В случае использования других видов API для этого потребовалось бы выполнить несколько запросов последовательно.
Эффективность. По сети не передаются лишние данные, что снижает нагрузку на сервер и экономит ресурсы сети.
Недостатки GraphQL
Настройка. Внедрение и настройка GraphQL требует больше времени, чем REST.
Безопасность. Сложные составные запросы могут быть уязвимы для хакерских атак, поэтому требуется дополнительная защита.
Инструменты. Для GraphQL доступно меньше инструментов и библиотек, чем для REST.
Протокол RPC позволяет программе вызывать функции, находящиеся на удалённом сервере, так, как если бы они выполнялись локально на клиенте.
RPC API
RPC API отправляет запрос на сервер, указывая метод и необходимые параметры. В ответ сервер возвращает результат выполнения метода.
Существуют различные реализации протокола RPC, например, gRPC от Google и tRPC, разработанный на языке TypeScript.
Преимущества RPC:
- Простота использования. Вызов удалённых функций происходит так же просто, как и вызов локальных, что позволяет значительно сократить объём кода.
- Высокая производительность. Некоторые реализации RPC API используют бинарные форматы передачи данных и протокол HTTP/2, что ускоряет взаимодействие с удалённым сервером.
Недостатки RPC:
- Использование RPC API сложнее, чем других видов API. Для работы с RPC необходимо освоить язык описания интерфейсов IDL.
- RPC не просто запрашивает ресурсы с удалённого сервера, а требует выполнения определённой функции и возврата результата. Это делает RPC менее гибким в использовании в современных веб-приложениях.
Интеграция API — это процесс объединения нескольких приложений с помощью API для обмена данными. Это позволяет одному сервису использовать возможности другого, что удобно для пользователей.
Например, на главной странице Яндекса, помимо строки поиска, есть новостная лента, информация о пробках, погода, курсы валют и другая полезная информация. Эти данные предоставляются сторонними сервисами, которые интегрированы с помощью API.
Давайте рассмотрим ещё один сценарий.
Предположим, у вас есть интернет-магазин, и вы хотите оптимизировать процесс доставки. Для этого необходимо интегрировать API службы доставки.
Процесс обработки заказа будет выглядеть следующим образом:
- Интернет-магазин получает информацию о заказе (адрес доставки, вес и габариты посылки) и отправляет её в службу доставки через API.
- Служба доставки принимает информацию, обрабатывает её и возвращает информацию о стоимости и времени доставки.
- Интернет-магазин отображает эту информацию покупателю.
Благодаря интеграции API можно также подключить сервис приёма платежей или выводить отзывы с других площадок в карточках товаров.