Блог
  • Разработка

SDK и API: в чём разница

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

Для решения подобных задач подходят SDK и библиотеки, осуществляющие взаимодействие по API. Что они собой представляют, чем отличаются и как их лучше использовать, подробнее расскажем в этой статье.

Что такое SDK

Это набор инструментов, который разработчики используют для создания ПО под конкретную платформу, ОС, язык программирования и прочие технологии. К примеру, для разработки приложений под iOS используется iOS SDK, а для создания некоторых компьютерных игр — Unreal Engine SDK и так далее.

SDK могут включать в себя следующие элементы:

  • Компиляторы. Преобразуют исходный код программы в машинный

  • Примеры кода. Образцы выполнения определённых действий в контексте целевой платформы

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

  • Документация. Подробные инструкции о работе различных элементов SDK

  • Отладчики. Инструменты для выявления и устранения ошибок и других неполадок в коде

  • Другие утилиты. Например, для сборки и развёртывания, профилирования, работы с графикой. А также прочие инструменты, которые помогают разработчикам создавать и реализовывать свои проекты

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

Типы

Обширный инструментарий позволяет разделить SDK на несколько типов:

  • Мобильные SDK. Включают инструменты для создания мобильных приложений. Так, в Android SDK входят эмуляторы, библиотеки и документация под платформу Android.

  • Веб-SDK. Облегчают создание и работу с динамическими веб-приложениями через библиотеки, которые реализуют взаимодействие с DOM, а также AJAX-запросы и прочие инструменты. К ним относятся JavaScript SDK, React SDK, Vue.js SDK и другие.

  • Игровые SDK. Предназначены для разработки видеоигр. С их помощью можно создавать поведение объектов в соответствии с законами физики, графику, звук и анимацию проекта, а также интегрировать его с различными платформами и устройствами. Самыми популярными из таких решений считаются наборы от Unity, Unreal Engine, Godot Engine и так далее.

  • IoT SDK. Используются для создания ПО, управления и взаимодействия с устройствами интернета вещей. К ним можно отнести Arduino SDK (поддержка программирования микроконтроллеров), Microsoft Azure IoT SDK (взаимодействие с облачными IoT-сервисами) и т. д.

  • Облачные SDK. Обеспечивают средства для быстрого доступа к хранилищам данных, вычислительным ресурсам и другим функциональным возможностям облачных платформ. К примеру, готовая библиотека Mobile Voice SDK позволит принимать и совершать вызовы с мобильного приложения через CPaaS-сервисы вроде МТС Exolve.

  • Блокчейн-SDK. Комплект для децентрализованных приложений (DApps) на основе технологии блокчейн. Облегчает взаимодействие с блокчейн-платформами, управление смарт-контрактами и интеграцию с блокчейн-сетями. Так, Ethereum SDK поддерживает разработку в сети Ethereum, а Hyperledger SDK — в Hyperledger Fabric.

  • Системные SDK. Ориентированы на создание операционных систем, драйверов и другого системного ПО. Например, во время разработки софта для Windows или Linux используются Windows SDK и Linux SDK.

При этом SDK можно подобрать практически под любой проект — готовые наборы для разработки ПО существуют для финансовых проектов, машинного обучения, соцмедиа, AR/VR и многого другого.

Как работает

Поскольку SDK включают внушительный набор ресурсов, доступ к ним можно получить по-разному.

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

  • Клонирование репозитория с GitHub.

  • Копирование исполняемых файлов и утилит.

  • Установка с помощью штатного пакетного менеджера операционной системы, если он есть.

Однако такой способ подходит только для локальных SDK — для облачных платформ всё работает иначе.

В этом случае доступ к софту предоставляется через веб-консоль, командную строку (CLI) или API. Это обеспечивает работу с облачными услугами из любого компьютера без необходимости установки больших объёмов ПО — главное, наличие интернета.

Далее порядок работы с SDK одинаковый: его нужно интегрировать в свой проект, настроить параметры, включить его компоненты в код и при необходимости протестировать.

Выполнив этот алгоритм, конечный продукт можно развернуть на целевой платформе (локальной или облачной).

Варианты применения

SDK используют практически в любой области создания ПО — от веб-разработки до интернета вещей. Рассмотрим основные функции инструмента в зависимости от задачи:

  • Мобильные приложения. Облегчает интеграцию push-уведомлений, а также обмен сообщениями в соцсетях и онлайн-играх.

  • Облачные платформы. Генерирует ПО для использования функциональности облачных сервисов (хранение данных, управление сетями и т. д.). Это позволяет быстрее создавать и развёртывать масштабируемые приложения с минимальными инфраструктурными затратами.

  • Анализ данных. Помогает создавать приложения для обработки и визуализации больших объёмов данных. Такие SDK можно использовать при работе с алгоритмами машинного обучения, статистическим анализом и бизнес-аналитикой.

Преимущества и недостатки

Главное достоинство SDK — ускорение разработки со снижением потребления ресурсов, при условии, что:

  • Группа разработчиков SDK самостоятельно занимается его поддержкой и доработкой

  • ПО создают адаптированным под конкретную экосистему

  • Стоимость и сроки выполнения программных проектов сокращаются из-за возможности повторного использования кода

  • Обеспечена совместимость, согласованность и интероперабельность между различными приложениями и системами

  • Помощь в тестировании, аналитике, аудите и других важных задачах

  • Существует вариативность настроек в проектах разработки

При этом у SDK есть ряд минусов, из-за которых иногда приходится отказываться от готовых решений в пользу ручной разработки:

  • Пакет создаётся под ограниченное количество платформ.

  • Библиотека из SDK может иметь закрытый код. Либо, наоборот, быть под GPL-лицензией.

  • Частые обновления, которые нужно отслеживать.

  • Возможные проблемы с совместимостью в программном и аппаратном стеках проекта.

  • Работа с относительно сложными кодовыми базами, по сравнению с API.

  • При наличии повторяющегося кода приходится составлять отдельные части ПО вручную.

Что такое API

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

API состоят из нескольких взаимосвязанных компонентов. Вот основные:

  • Запросы. Информация, которую клиент передаёт серверу для выполнения определённой операции. Запросы могут содержать метод (GET, POST, PUT, DELETE), URL-адрес эндпоинта, параметры, тело запроса (для передачи данных), а также заголовки с дополнительной информацией.

  • Ответы. Сообщения с результатами выполненного действия, которые сервер отправляет в ответ на запрос клиента. Обычно содержат код состояния, заголовки с метаданными и тело с запрошенными данными.

  • Эндпоинты. URL-адреса, которые определяют место назначения запроса и вид выполняемого действия.

  • Параметры. Дополнительная информация, которую можно отправить вместе с запросом или ответом. Они нужны для фильтрации данных, указания формата ответа или передачи учётных данных для аутентификации.

  • Аутентификация. Процесс подтверждения права клиента на доступ к функциональным возможностям API. Обеспечивает безопасность системы, с которой взаимодействует клиент по API, и предотвращает несанкционированный доступ.

Типы

Существует множество различных API, рассмотрим наиболее популярные:

  • SOAP. Протокол для обмена структурированными сообщениями в веб-службах. Формирует сообщения в формате XML и основан на архитектуре «клиент — сервер», где клиент отправляет запрос серверу, а тот отвечает запрошенными данными (Microsoft Azure SOAP API, Google AdWords API).

  • REST. Использует HTTP-протокол для извлечения, создания, обновления или удаления ресурсов (GitHub API, Spotify API).

  • GraphQL. Позволяет клиентам запросить только те данные, которые им нужны. В отличие от REST, клиент самостоятельно определяет структуру ответа (GitHub GraphQL API, Reddit GraphQL API).

  • WebSocket API. Обеспечивает двустороннюю связь между JavaScript-кодом на клиентской основе и сервером через одно TCP-соединение. Часто используется в режиме реального времени, например, для обновления чата или потоковой передачи данных (Socket.io, Pusher).

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

При этом существует ещё множество вариаций API: Windows API, POSIX API, BIOS API и так далее.

Как работает

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

Например, чтобы продавать книги онлайн, собственнику интернет-магазина необязательно самостоятельно формировать базу из названий, аннотаций, цен и авторов произведений. Для этого можно использовать API от известных поставщиков литературы, вроде «Литрес» или Amazon, которые уже имеют всю необходимую информацию.

С технической точки зрения процесс выглядит так:

  • Приложение отправляет запрос на конечную точку API, указывая информацию о книге.

  • Сервер API получает запрос, обрабатывает его, выполняет поиск в своей базе данных или обращается к внешним поставщикам (например, «Литрес» или Amazon), после чего возвращает ответ в стандартном формате, вроде JSON или XML.

  • Приложение получает ответ от сервера API, анализирует данные и предоставляет решение пользователю.

Но чтобы всё работало, обе платформы должны поддерживать один и тот же протокол: HTTP, SOAP и так далее.

Примеры использования

API использует большинство современных приложений — причём делают это даже при самых простых операциях. Например:

  • Бронирование авиабилетов. Сайты вроде Aviasales используют API различных авиакомпаний для сбора данных о рейсах (расписание, цены) для дальнейшей передачи конечному клиенту.

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

  • Онлайн-платежи. При оформлении онлайн-заказа система предлагает пользователю выбрать способ оплаты (банковская карта, «ЮMoney» и так далее), после чего приложение отправляет запрос на платёжный API конкретного поставщика, а после информирует покупателя о завершении транзакции.

  • Поиск торговых точек. Многие онлайн-магазины подключаются через API к сервисам (например, «Яндекс Карты») — так пользователи видят на карте ближайшие к ним торговые точки и совершают в них покупки.

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

Преимущества и недостатки

API — важный элемент современной разработки ПО (и ряда других ИТ-процессов). Всё благодаря следующим преимуществам:

  • Подходит большинству платформ

  • Код взаимодействия по API принадлежит только разработчику

  • Простое подключение между отдельными платформами

  • Сокращение сроков и затрат на разработку ПО

  • Высвобождение ресурсов разработчика для других проектов

  • Расширение возможностей существующих инструментов

  • Упрощение кросс-платформенности

  • Повышение прозрачности и контроля в рабочих процессах

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

Однако и здесь не всё так просто. В частности, API иногда создают проблемы:

  • Широкое использование общедоступных или внешних API может создать зависимость от поставщиков

  • Необходимы дополнительные ресурсы для координации работы нескольких API

  • Внешние API могут создать угрозы безопасности

  • Цены не всегда доступны

Ключевые различия между SDK и API

SDK и API — важные инструменты для разработки ПО, у каждого из них свои особенности и способы применения.

Функциональность

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

Реализация

SDK интегрируются в приложение через добавление собственных библиотек и прочих ресурсов в исходный код программы. Пример с мобильными инструментами Exolve есть в нашей справке.

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

Совместимость

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

API не зависят от платформ, языков программирования и фреймворков. Это обеспечивает более гибкий доступ к одним и тем же данным.

Размер

SDK — внушительный набор инструментов, поэтому для его установки нужно много места. К примеру, Android SDK занимает около 50 ГБ (в зависимости от версии). К счастью, загружать можно не все компоненты пакета.

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

При этом SDK и API отличаются сложностью, областью применения, уровнем абстракции и другими характеристиками.

Симбиоз SDK и API

SDK и API — это взаимодополняющие подходы, которые при совместном использовании создают мощную экосистему разработки.

Объединение сильных сторон SDK и API даёт следующие преимущества:

  • Ускоренная разработка. Готовые компоненты SDK в сочетании с функциональностью API значительно ускоряют программирование. Такое сочетание позволит разработчикам сконцентрировать силы на уникальных функциях приложения.

  • Повышенная гибкость и настройка. SDK обеспечивает прочную основу для развития проекта, в то время как API предлагает плавную интеграцию с внешними службами и приложениями. Это помогает создавать гибкие приложения, ориентированные на конкретную группу пользователей.

  • Упрощённая поддержка ПО. Модульная конструкция API и комплексные ресурсы SDK упрощают обновление и обслуживание приложений. Так разработчики могут легко корректировать свои проекты без изменения большей части кода и потери актуальности для пользователей.

Что выбрать

Несмотря на множество отличий, API и SDK имеют и похожие черты:

  • Помогают интегрировать разрабатываемое ПО с программами и сервисами других разработчиков и поставщиков

  • Это унифицированные разработки, предлагаемые на платной или бесплатной основе

  • Существенно облегчают процесс программирования, избавляя разработчиков от необходимости писать код сначала

Поэтому выбор инструмента зависит только от конкретных задач и ресурсов ИТ-проекта.

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

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

Заключение

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

В статье на примерах мы рассмотрели различные плюсы и минусы обоих подходов в разных ситуациях.

Выбор более оптимального подхода сбережёт ресурсы (время, человеко-часы и т. д.) разработчика и в большей степени поспособствует надёжности ПО и удешевлению его поддержки в будущем.

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

Предыдущая статья
Оцените статью:
Следующая статья