В современной разработке большая часть приложений не создаётся с нуля. Программисты используют наборы готовых библиотек, примеров кода и прочих ресурсов, которые значительно ускоряют и упрощают процесс создания ПО.
Для решения подобных задач подходят 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.