Разница между API и SDK

187

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

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

Если у кого-то есть больше идей, чтобы объяснить это ясно, я был бы очень признателен за предложения. Я хочу подчеркнуть, что цель состоит в том, чтобы объяснить эти концепции непрограммисту, который не знает языка разработчика .

В частности, в контексте датчика отпечатка пальца и программного обеспечения для регистрации / проверки, вот как я попытался объяснить это:

Если я являюсь производителем устройств / датчиков отпечатков пальцев, а не занимаюсь написанием программного обеспечения, то я могу лучше продать свой продукт:

  1. Убедитесь, что мои драйверы устройств могут быть установлены в самых разных операционных системах.
  2. Определите и предоставьте API для разработчиков программного обеспечения для написания программ (например, для регистрации, проверки), чтобы «общаться» или использовать мое устройство
  3. Разработайте и предоставьте SDK (на шаг впереди API), чтобы разработчикам программного обеспечения было проще и быстрее создавать программы, которые работают с моим устройством. SDK могут содержать вспомогательные библиотеки кода, справочные приложения, документацию и т. Д.
Sliceoftime
источник

Ответы:

225

Кусок пирога:

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

* Все может использовать API. Некоторые API имеют положения безопасности, требующие лицензионных ключей, аутентификации и т. Д., Которые могут запрещать полное использование API в конкретных случаях, но это только потому, что определенные шаги аутентификации / авторизации не выполняются. Любое программное обеспечение, которое предоставляет правильные учетные данные (если требуется), может использовать API.

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

Джейсон С
источник
2
Некоторые другие идеи, которые у меня есть для объяснения этого, - это пример iPhone (проприетарный код, но четко определенный API), телефонная розетка или пример USB-порта, чтобы объяснить, что такое программный интерфейс с более понятной аппаратной аналогией
Sliceoftime
17
Продолжая это хорошее объяснение, то есть API может быть, например, http / REST API, в то время как SDK может быть библиотекой поверх HttpClient, чтобы сделать его более быстрым и простым для взаимодействия с веб-сервисами REST.
frandevel
4
Проще говоря, API - это интерфейс. Принимая во внимание, что SDK - это уровень абстракции над интерфейсом.
tvanc
1
SDK не обязательно является уровнем абстракции над интерфейсом; SDK - это реализация интерфейса. (если есть еще один уровень абстракции, вопрос в том, почему он не указан как часть самого интерфейса)
Jason S
Я согласен с этим определением, но в то же время удивляюсь, почему iOS и Android используют термин API, например, для библиотеки Bluetooth (iOS Core Bluetooth API, Android Bluetooth API)?
Тамберг
59

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

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

программирование без SDK или API - это все равно, что делать все с нуля без семинара - нужно даже создавать свои собственные инструменты

Абдул Рехман
источник
Вы говорите, что в SDK нет стандартных блоков, но JAVA SDK поставляется с структурами данных, такими как ArrayList или HashMap ...?
Корай Тугай
1
Да, вы можете рассматривать его как строительный блок, но с другой стороны, Java предоставляет его как инструмент, а не как строительный блок.
Абдул Рехман
1
Я столкнулся с этим вопросом, когда пытался прочитать и понять документацию по Facebook: developers.facebook.com/docs/javascript Меня смущает то, что facebook называет его javascript SDK, который, на мой взгляд, больше похож на API. Поскольку он не предоставляет никаких материальных инструментов, а только библиотеку, которую могут использовать разработчики, разве это не должно называться API вместо SDK?
shenkwen
Объяснение SDK не совсем работает IMO. Вместо not limited to blocks, or can create something without any blocks to begin withэтого SDK дает вам еще лучшие композиции блоков API для работы. SDK основывается на API.
Дон Чидл
26

Предположим, что компания C предлагает продукт P, а P каким-то образом включает программное обеспечение. Затем C может предложить библиотеку / набор библиотек разработчикам программного обеспечения, которые управляют программными системами P.

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

Если C хочет предложить функциональность P другим компаниям / системам, он делает это с помощью API .

Это интерфейс к P. Способ взаимодействия внешних систем с P.

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

По сути, они на самом деле совершенно разные.

Вы создаете что-то с помощью SDK и используете или используете что-то с помощью API.

Джек видман
источник
22
Вы должны просто отредактировать свой ответ до последней строки и пропустить все бла-де-бла.
mhenry1384
Если C предлагает набор библиотек, которые управляют программным обеспечением P, эти библиотеки составляют API (а), а не SDK (если это не абсолютно минимальный SDK, который является ничем иным, как API). SDK будет включать в себя эти API плюс все вкусности, которые нужны разработчикам, кроме сырого API, отсюда и «комплект». Таким образом, вы правы в построении чего-либо против использования / потребления (+ / контроля / взаимодействия), но в остальном различие запутано.
Джош Саттерфилд
12

Интерфейс прикладного программирования представляет собой набор процедур / структур данных / классов, которые определяют способ взаимодействия с целевой платформой / программным обеспечением, таким как OS X, Android, приложение для управления проектами, программное обеспечение для виртуализации и т. Д.

В то время как Software Development Kit является оберткой вокруг API / s, которая облегчает работу для разработчиков.

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

Кроме того, иногда SDK создаются для облегчения разработки на определенном языке программирования. Например, веб-драйвер Selenium (встроенный в Java) предоставляет API-интерфейсы для естественного управления любым браузером, а капибара может рассматриваться как SDK, который позволяет разработчикам Ruby использовать веб-драйвер Selenium. Однако веб-драйвер Selenium также сам по себе является SDK, поскольку он объединяет взаимодействие с различными встроенными драйверами браузера в один пакет.

user3137634
источник
Просто подумал, что будет приятно привести несколько примеров.
user3137634
9

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

jlew
источник
1
технически API должны быть указаны, но не должны быть публично задокументированы, они могут быть секретными.
Джейсон С
8

API - это спецификации того, как что-то сделать, интерфейс, такой как «Железнодорожные пути находятся на расстоянии четырех футов друг от друга, а металлическая полоса имеет ширину 1 дюйм». Теперь, когда у вас есть API, вы можете построить поезд, который будет соответствовать этой железной дороге. треки, если вы хотите пойти куда угодно. API - это просто информация о том, как создать ваш код, он ничего не делает.

SDK - это пакет актуальных инструментов, которые уже обеспокоены спецификациями. «Вот поезд, немного угля и техник. Используйте его, чтобы ездить с места на место» С SDK вы не будете беспокоиться о специфике. SDK - это действительный код, его можно использовать для каких-то действий, но, конечно, поезд не запустится самопроизвольно, вам все равно нужен проводник для управления поездом.

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

Смешные гики
источник
3

API = словарь доступных слов и их значений (и необходимая грамматика для их объединения)

SDK = система обработки текста ... для 2-летних детей ... которая пишет прямо из идей

Хотя через несколько лет вы МОЖЕТЕ пойти в школу и стать мастером своего языка, использование SDK поможет вам в кратчайшие сроки написать целые осмысленные предложения (Прощая тот факт, что в этом примере, будучи ребенком, вы даже не получили изучить любой другой язык, по крайней мере, научиться использовать SDK.)

Серджио
источник
2

Как насчет ... Это как если бы вы хотели установить систему домашнего кинотеатра в вашем доме. Использование API похоже на получение всех проводов, винтов, битов и кусочков. Возможности бесконечны (ограничены только кусками, которые вы получаете), но иногда огромны. SDK - это как получить комплект. Вы все еще должны собрать это вместе, но это больше похоже на получение предварительно вырезанных частей и инструкций для книжной полки IKEA, чем на коробку с винтами.

user1653667
источник
0

Вы используете SDK для доступа к функциям библиотеки и API для управления ею.

ixjf
источник
0

API = интерфейс прикладного программирования SDK = комплект разработки программного обеспечения

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

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

Например, JDK (Java Development Kit) содержит API, а также компиляторы, среды выполнения и другие разные инструменты. Java API - это просто все библиотеки, которые составляют основной язык, с которым вы можете работать "из коробки".

Примеры API: API Java, Google Maps API, Flash Player API.

Примеры SDK: JDK, GWT, Flex SDK.

Рехманали Момин
источник