Код
#статьи

Что такое API и как он работает

Простыми словами объясняем, как программы общаются между собой, и практикуем API-вызовы.

Иллюстрация: Катя Павловская для Skillbox Media

Заходите вы на сайт с вакансиями и ищете работу бэкенд-разработчиком, а там почти в каждой вакансии написано, что нужно уметь работать с REST API, или SOAP API, или просто API. Что всё это значит и зачем нужно программисту? Давайте разбираться.

Содержание

Что такое API

API (англ. application programming interface — программный интерфейс приложения) — это набор способов и правил, по которым различные программы общаются между собой и обмениваются данными.

Все эти взаимодействия происходят с помощью функций, классов, методов, структур, а иногда констант одной программы, к которой обращаются другие. Это основной принцип работы API.

Допустим, вы покупаете билет в кино с помощью банковской карты. Во время покупки терминал обращается к API банка, который выпустил вашу карту, и отправляет запрос на оплату. А если вы заказываете такси через приложение, оно обращается к платёжной системе тоже через API.

Так терминал отправляет запрос в банк, чтобы человек купил билет в кино
Иллюстрация: Катя Павловская для Skillbox Media

Программный интерфейс похож на договор между клиентом и продавцом. Только клиентом выступает приложение, которому нужны данные, а продавцом — сервер или ресурс, с которого мы эти данные берём. В таком договоре прописываются условия того, как и какие данные может получить клиент.

API встречается практически везде:

  • В языках программирования он помогает функциям корректно общаться друг с другом. Вызывающая функция должна соблюдать тип данных и последовательность параметров вызываемой функции.
  • В операционной системе он помогает программам получать данные из памяти или менять настройки ОС. Поэтому, чтобы разрабатывать приложения для конкретной операционной системы, нужно знать её API.
  • В вебе сервисы общаются друг с другом через программный интерфейс. Если API открытый, то официальную документацию по работе с ним публикуют создатели сервиса-источника. Так, например, выглядит документация Telegram.

Несмотря на то что термин довольно широкий, чаще всего в вакансиях речь идёт именно о третьем варианте.

Почему API называют интерфейсом

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

С помощью интерфейса можно использовать возможности разных систем, не задумываясь о том, как они обрабатывают наши запросы и что у них «под капотом». Например, чтобы позвонить, не обязательно знать, как смартфон обрабатывает нажатия на тачскрин. Важно лишь, что в гаджете есть «кнопка», которая всегда возвращает одинаковый результат в ответ на определённые действия.

Точно так же с помощью вызовов API можно выполнить определённые функции программы, не зная, как она работает. Поэтому API и называют интерфейсом.

API — это что-то понятное для пользователя. А вот его реализация может быть очень сложной
Иллюстрация: Катя Павловская для Skillbox Media

Как 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, а ваш браузер выступает в роли клиента, который подтягивает с сервера нужные вам данные.
  • Отсутствие состояния (statelessness). Сервер не хранит данные о предыдущих взаимодействиях с клиентом — каждый запрос от клиента к серверу должен быть самодостаточным. При таком подходе нагрузка на сервер снижается в несколько раз — ему не нужно держать в памяти каждую сессию обмена данными с клиентом.
  • Кэшируемость (cacheability). Благодаря кэшируемости клиент может сохранять ответы API для повторного использования без выполнения запроса. Это снижает задержку и нагрузку на сервер. Ответы REST API также должны указывать, могут ли они быть кэшированы клиентом.
  • Единообразие интерфейса (uniform interface). REST API должны работать через единообразный интерфейс, который упрощает взаимодействие между клиентами и серверами. В REST API это стандартные методы HTTP (GET, POST, PUT, DELETE), а также чёткие соглашения об именовании ресурсов.

Читайте также:

Методы GET и POST в HTTP

  • Слои (layered system). Архитектура REST API — это настоящий слоёный пирог, который состоит из серверов, прокси, шлюзов, балансировщиков нагрузки и массы других вспомогательных систем. Поэтому клиенты никогда не знают точно, общаются они напрямую с сервером или с его «дублёром».
Изображение: Майя Мальгина для Skillbox Media
  • Код по требованию (code on demand) — необязательный принцип. Сервер может отправлять код, который будет выполняться уже на стороне клиента, — например, это может быть код JS-скриптов и других интерактивных элементов интерфейса.

Плюсы REST API

  • Освоить проще, чем SOAP или GraphQL.
  • Используются стандартные HTTP-методы (GET, POST, PUT, DELETE).
  • Широкая поддержка и совместимость с веб-технологиями.
  • Кэширование и масштабируемость.

Минусы REST API

  • Перегрузка сети. REST API использует текстовые форматы, например JSON, а это увеличивает объём передаваемых данных в сравнении с бинарными форматами.
  • Нет единого стандарта. У REST API нет строгой спецификации, и многие разработчики реализуют API на основе требований конкретного проекта. Это усложняет интеграцию с другими сервисами.
  • Недостаточная безопасность. Разработчики должны самостоятельно внедрять средства авторизации и аутентификации. Встроенных механизмов защиты нет.
  • Нет поддержки долгоживущих соединений. REST API построен на синхронном протоколе HTTP, который работает в формате «запрос — ответ». Из-за этого разработчики не могут реализовать поддержку долгоживущих соединений, например веб-сокетов.

REST API широко используют в веб-разработке для организации взаимодействия между клиентом и сервером. Например, на базе принципов REST разрабатывают API для социальных сетей, онлайн-магазинов и мобильных приложений.


SOAP

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 требовали бы двух или даже трёх запросов подряд. Такая работа API возможна благодаря строгой типизации структуры запросов.

Плюсы GraphQL

  • Гибкость. Клиенты могут запрашивать только нужные данные, что позволяет избегать передачи лишней информации.
  • Агрегация данных. С помощью одного запроса можно получить данные сразу из нескольких источников. При использовании других видов API для этого потребовалось бы последовательно выполнить несколько запросов.
  • Эффективность. По сети не передаются лишние данные, а это снижает нагрузку на сервер и экономит ресурсы сети.

Минусы GraphQL

  • Сложность настройки. Внедрение и настройка GraphQL занимает больше времени в сравнении с REST.
  • Безопасность. Сложные составные запросы остаются уязвимыми для хакерских атак, поэтому требуется дополнительная защита.
  • Экосистема. Для GraphQL доступно меньше инструментов и библиотек, чем для REST.

RPC (gRPC, tRPC)

RPC — это протокол, который позволяет программе вызывать функции, находящиеся на удалённом сервере, как если бы они выполнялись локально на клиенте. RPC API отправляет на сервер запрос с указанием метода и необходимыми параметрами, а в ответ получает результат выполнения метода. Существуют различные реализации RPC — например, gRPC от Google и tRPC, построенный на языке TypeScript.

Плюсы RPC

  • Прост в использовании. Удалённые функции вызываются так же просто, как локальные, что значительно сокращает кодовую базу.
  • Высокая производительность. Некоторые реализации RPC API используют бинарные форматы передачи данных и протокол HTTP/2, что ускоряет взаимодействие с удалённым сервером.

Минусы RPC

  • Меньшая совместимость. Освоить RPC сложнее, чем другие виды API, а ещё надо освоить язык описания интерфейсов (IDL, interface definition language).
  • Ограниченная гибкость. RPC не просто запрашивает ресурсы с удалённого сервера, а просит выполнить определённую функцию и вернуть результат. Такой тип взаимодействия сложнее использовать в современных веб-приложениях.

Интеграция API

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

Например, на главной странице «Яндекса», кроме строки поиска, есть новостная лента, данные о пробках в городе, погода, курсы валют и другая полезная информация. Эти данные на страницу поставляют сторонние сервисы, интегрированные с помощью API.

Рассмотрим ещё один пример. Представьте, что у вас есть интернет-магазин и вы хотите автоматизировать процесс доставки. Для этого надо интегрировать API службы доставки. Тогда весь процесс обработки заказа будет выглядеть следующим образом:

  • Интернет-магазин получает данные заказа (адрес доставки, вес посылки и габариты) и отправляет их в службу доставки через API.
  • Служба принимает эти данные, обрабатывает их и возвращает информацию о стоимости и времени доставки.
  • Магазин показывает эту информацию покупателю.

С помощью интеграции API можно также подключить сервис приёма платежей или выводить в карточках товаров отзывы с других площадок.

Почему API так популярны у программистов

Программные интерфейсы сервисов и библиотек позволяют разработчикам не изобретать велосипед. Зачем писать код, когда можно воспользоваться готовым?

Вот какие возможности даёт API:

  • Предоставляет доступ к готовым инструментам. Например, к функциям библиотеки для машинного обучения TensorFlow — они помогают быстро создать нейросеть, не тратя время на разработку инструментов с нуля.
  • Повышает безопасность. API позволяет вынести в отдельное приложение функциональность, которая должна быть защищена. Так снижается вероятность некорректного использования этих функций другими программами.
  • Связывает разные системы. Если вам нужно подключить к сайту платёжную систему или авторизацию через соцсети, без API не обойтись.
  • Снижает стоимость разработки. Часто бывает, что дешевле воспользоваться платным API, чем создавать функциональность с нуля.

Стороннее API обычно безопасное, потому что над ним работает коммерческая организация или целое сообщество разработчиков. И конечно, с его помощью работа даже над сложными проектами становится проще и приятнее.

Написали одну строчку кода, подключили API — робот побежал
Иллюстрация: Катя Павловская для Skillbox Media

Какие функции могут входить в API

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

Например, в API для анализа текстов будут функции поиска всех однокоренных слов, подсчёта количества союзов и выявления часто встречающихся словосочетаний.

Функции API могут решать не только утилитарные задачи конкретных приложений. Это может стать элементом маркетинга, когда доступ к API предлагается как отдельная услуга.

API — это меню, только вместо еды там функции
Иллюстрация: Катя Павловская для Skillbox Media

Как компании зарабатывают с помощью API

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

Отправили картинки — получили готовое видео
Иллюстрация: Катя Павловская для Skillbox Media

Например, «Яндекс» предоставляет платные API таких технологий:

  • переводчика с машинным обучением;
  • системы распознавания и синтеза речи;
  • платформы облачных вычислений и так далее.

Популярные социальные сети тоже предоставляют доступ к своим API. С помощью них можно, например, создать игру для «ВКонтакте» или добавить на сайт авторизацию через Google.

При этом компании обычно не раскрывают принципы реализации своих интерфейсов, поэтому для программистов они остаются «чёрными ящиками».

Как происходит вызов функций API

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

Вот пример вызова методов библиотек в языке Python:

# Подключаем библиотеку
import numpy as np
# Вызываем метод, который возвращает модуль числа -5
x = np.abs(-5)
# Выводим переменную x
print(x)

Если API предоставляет функции через интернет (Web API), нужно отправить на сервер HTTP-запрос с данными в формате JSON. Пример синтеза речи с помощью API Yandex.SpeechKit:

import requests
import json

# Помещаем в переменную API_URL адрес API
API_URL = "https://tts.api.cloud.yandex.net/speech/v1/tts:synthesize"

# Помещаем в словарь data данные для отправки в API Yandex.SpeechKit
data = {
    "text": "Привет! Это пример кода для статьи про API в Skillbox Media",
    "lang": "ru-RU",
    "speed": 1,
    "voice": "filipp",
    "emotion": "good"
}

# Преобразуем данные в строку в формате JSON
json_str = json.dumps(data)

# Отправляем данные на сервер и получаем ответ
answer = requests.post(API_URL, json_str)

Можете запустить этот код и послушать результат.

Также бывают косвенные вызовы API — когда вызов происходит при участии посредника (другой функции или другого API). Например, когда пользователь нажимает кнопку «Обновить», он тоже взаимодействует с API браузера, но делает это не напрямую, а через графический интерфейс.

Что запомнить

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

API экономит время программистов и уменьшает расходы бизнеса на разработку.



Изучайте IT на практике — бесплатно

Курсы за 2990 0 р.

Я не знаю, с чего начать
С чего начать путь в IT?
Получите подробный гайд в нашем телеграм-канале бесплатно! Кликайте по баннеру и заходите в канал — вы найдёте путеводитель в закрепе.
Забрать гайд>
Понравилась статья?
Да

Пользуясь нашим сайтом, вы соглашаетесь с тем, что мы используем cookies 🍪

Ссылка скопирована