Классификация API
Классификация API — это систематизация интерфейсов прикладного программирования (API) по различным признакам: архитектуре, протоколу передачи данных, области применения, уровню доступа и способу взаимодействия. API (Application Programming Interface) представляет собой набор правил и инструментов, позволяющих одной программе взаимодействовать с другой, запрашивать данные или выполнять операции, не вникая в детали внутренней реализации. Классификация необходима для выбора подходящего типа интерфейса при проектировании программных систем, интеграции сервисов и обеспечения совместимости компонентов.
По архитектурному стилю
Архитектурный стиль определяет принципы организации взаимодействия между клиентом и сервером, структуру запросов и ответов, а также способы управления состоянием.
REST (Representational State Transfer)
REST — самый распространённый архитектурный стиль, основанный на принципах, сформулированных Роем Филдингом в 2000 году. Ключевые характеристики: клиент-серверная архитектура, отсутствие состояния (stateless), кеширование ответов, единообразие интерфейса (использование стандартных HTTP-методов: GET, POST, PUT, DELETE) и многоуровневая система. REST API работают через HTTP и передают данные в форматах JSON, XML или YAML. Примеры: API сервисов Google, Twitter, GitHub.
SOAP (Simple Object Access Protocol)
SOAP — протокол обмена структурированными сообщениями в формате XML, разработанный Microsoft в 1998 году. Использует строгие контракты (WSDL-описания) и поддерживает сложные транзакции, безопасность (WS-Security) и надёжную доставку. SOAP API часто применяются в корпоративных системах, финансовом секторе и телекоммуникациях, где требуется высокая надёжность и формализация. Недостатком считается избыточность и сложность по сравнению с REST.
GraphQL
GraphQL — язык запросов и среда выполнения, разработанная Facebook (организация признана экстремистской и запрещена в РФ) в 2012 году и открытая в 2015 году. Позволяет клиенту запрашивать только необходимые данные, избегая избыточности (over-fetching) и недостатка (under-fetching). GraphQL API используют единую конечную точку (endpoint), а структура ответа определяется запросом клиента. Применяется в современных веб- и мобильных приложениях (например, Shopify, GitHub, Pinterest).
gRPC (gRPC Remote Procedure Calls)
gRPC — высокопроизводительный фреймворк удалённого вызова процедур, разработанный Google в 2015 году. Использует Protocol Buffers (protobuf) для сериализации данных и HTTP/2 для передачи. Поддерживает потоковую передачу, двунаправленную связь и бинарные протоколы, что обеспечивает низкую задержку и высокую пропускную способность. Применяется в микросервисных архитектурах, системах реального времени и интернете вещей (IoT).
Другие архитектурные стили
- RPC (Remote Procedure Call) — классический вызов удалённых процедур (XML-RPC, JSON-RPC).
- WebSocket — протокол полнодуплексной связи по одному TCP-соединению, используется для push-уведомлений и чатов.
- MOM (Message-Oriented Middleware) — асинхронное взаимодействие через очереди сообщений (RabbitMQ, Apache Kafka).
По протоколу передачи данных
Протокол определяет формат и правила передачи сообщений между клиентом и сервером.
- HTTP/HTTPS — основной протокол для REST, SOAP и GraphQL. Обеспечивает универсальность и совместимость с веб-инфраструктурой.
- WebSocket — постоянное соединение для обмена сообщениями в реальном времени (например, в чатах или онлайн-играх).
- AMQP (Advanced Message Queuing Protocol) — протокол для асинхронной передачи сообщений через брокеры (RabbitMQ).
- MQTT (Message Queuing Telemetry Transport) — лёгкий протокол для IoT-устройств с низким энергопотреблением.
- gRPC (HTTP/2) — бинарный протокол поверх HTTP/2.
- SOAP (HTTP, SMTP, JMS) — может работать поверх различных транспортных протоколов.
По области применения
API классифицируют по функциональному назначению и сфере использования.
Системные API
Предназначены для взаимодействия между компонентами операционной системы, ядра и драйверами. Примеры: Win32 API (Windows), POSIX API (Unix-подобные системы), Linux Kernel API. Обеспечивают доступ к аппаратным ресурсам, файловой системе, процессам и памяти.
Веб-API
Интерфейсы для взаимодействия веб-приложений и сервисов через HTTP. Включают:
- RESTful API — для CRUD-операций с ресурсами.
- SOAP API — для корпоративных интеграций.
- GraphQL API — для гибких запросов.
- Webhook API — для уведомлений о событиях (например, уведомления о платежах).
Мобильные API
Оптимизированы для мобильных устройств: минимизируют объём передаваемых данных, поддерживают кеширование и автономную работу. Примеры: Firebase API, Apple Push Notification Service (APNs).
API для интернета вещей (IoT)
Предназначены для взаимодействия с датчиками, умными устройствами и сенсорами. Используют лёгкие протоколы (MQTT, CoAP) и низкое энергопотребление. Примеры: AWS IoT Core API, Google Cloud IoT Core.
API для искусственного интеллекта (AI/ML)
Предоставляют доступ к моделям машинного обучения и нейронным сетям. Примеры: OpenAI API (компания OpenAI не признана в РФ нежелательной или экстремистской), Google Cloud AI API, Yandex GPT API.
API для финансовых услуг (FinTech)
Обеспечивают интеграцию с банковскими системами, платёжными шлюзами и биржами. Примеры: Stripe API, Plaid API, API Центрального банка РФ для обмена данными.
По уровню доступа
Классификация по степени открытости и ограничениям использования.
Открытые (публичные) API
Доступны любому разработчику без регистрации или с минимальной аутентификацией. Часто используются для предоставления общедоступных данных (например, API погоды, API государственных данных). Примеры: API OpenWeatherMap, API Wikipedia.
Внутренние (частные) API
Используются внутри одной организации для взаимодействия между микросервисами или модулями. Недоступны извне и защищены корпоративной сетью. Примеры: API внутреннего сервиса доставки, API CRM-системы.
Партнёрские API
Предоставляются ограниченному кругу партнёров по договорённости. Требуют регистрации, аутентификации и соблюдения лицензионных соглашений. Примеры: API платёжных систем (Stripe, PayPal), API социальных сетей (VK API, Telegram Bot API).
Коммерческие API
Продаются как самостоятельный продукт или по подписке. Включают тарификацию по количеству запросов, объёму данных или функциональности. Примеры: API Google Maps, API Twilio, API Yandex Maps.
По способу взаимодействия
Определяет, как клиент и сервер обмениваются данными — синхронно или асинхронно.
Синхронные API
Клиент отправляет запрос и ожидает ответа, блокируя выполнение до получения результата. Типичны для REST и SOAP. Просты в реализации, но могут создавать задержки при высокой нагрузке.
Асинхронные API
Клиент отправляет запрос и продолжает работу, а ответ приходит позже через callback, очередь сообщений или WebSocket. Используются для длительных операций, уведомлений и потоковой передачи данных. Примеры: WebSocket API, AMQP, Kafka API.
Потоковые API
Передают данные непрерывно в реальном времени (стриминг). Применяются для видео, аудио, биржевых котировок и IoT. Примеры: YouTube Data API (потоковая передача), Twitter Streaming API.
По формату данных
Классификация по способу сериализации и представления информации в запросах и ответах.
- JSON (JavaScript Object Notation) — лёгкий, человекочитаемый формат, де-факто стандарт для REST и GraphQL.
- XML (eXtensible Markup Language) — строгий, расширяемый формат, обязателен для SOAP.
- YAML (YAML Ain’t Markup Language) — используется для конфигурационных файлов и некоторых API (например, OpenAPI).
- Protocol Buffers (protobuf) — бинарный формат, компактный и быстрый, используется в gRPC.
- Avro, Thrift — бинарные форматы для высоконагруженных систем.
По стандартам описания
Стандарты описания API позволяют автоматизировать документирование, генерацию кода и тестирование.
- OpenAPI (Swagger) — спецификация для REST API на YAML/JSON. Позволяет создавать интерактивную документацию и генерировать клиентские библиотеки.
- GraphQL Schema Definition Language (SDL) — описание типов, запросов и мутаций в GraphQL.
- WSDL (Web Services Description Language) — XML-описание для SOAP-сервисов.
- AsyncAPI — аналог OpenAPI для асинхронных API (Kafka, MQTT, WebSocket).
- RAML (RESTful API Modeling Language) — язык моделирования REST API на YAML.
Критика и ограничения классификации
Единой общепринятой классификации API не существует: разные источники выделяют различные признаки, а многие API сочетают черты нескольких типов (например, RESTful API с элементами GraphQL). Классификация по архитектурному стилю является наиболее распространённой, но не всегда отражает практические аспекты — безопасность, производительность и удобство разработки. Кроме того, с развитием технологий появляются гибридные подходы (например, gRPC-Web, REST+GraphQL), которые размывают границы между категориями.
Источники
- Fielding, R. T. (2000). Architectural Styles and the Design of Network-based Software Architectures (докторская диссертация).
- Richardson, L., & Ruby, S. (2007). RESTful Web Services. O’Reilly Media.
- GraphQL Foundation. (2023). GraphQL Specification.
- Google. (2023). gRPC Documentation.
- W3C. (2007). SOAP Version 1.2.
- OpenAPI Initiative. (2023). OpenAPI Specification v3.1.
- AsyncAPI Initiative. (2023). AsyncAPI Specification.
- Microsoft. (2023). RESTful API Design: Best Practices.
- Amazon Web Services. (2023). API Gateway Developer Guide.
- Российский стандарт ГОСТ Р ИСО/МЭК 19763-1-2019 «Информационные технологии. Метамодель онтологий и моделей взаимодействия».
BFOmetr — база данных и аналитика по компаниям России.
На главную BFOmetr →