Różnica między interfejsem API a zestawem SDK

187

Próbuję wyjaśnić programistom różnicę między interfejsem API a zestawem SDK. Muszę wyjaśnić, dlaczego komercyjny dostawca oprogramowania do pobierania odcisków palców prawdopodobnie nie dostarczy zestawu SDK, chociaż z pewnością mógł go użyć.

Zarówno dostawcy urządzeń, jak i dostawcy oprogramowania mogą i powinni udostępniać dobrze zdefiniowany interfejs API. Ten interfejs API umożliwia (pisanie) innym programom współdziałanie z własnymi komponentami oprogramowania lub urządzeniami sprzętowymi dostawcy.

Jeśli ktoś ma więcej pomysłów na wyjaśnienie tego, bardzo doceniłbym te sugestie. Chcę podkreślić, że celem jest wyjaśnienie pojęć nieprogramiści, którzy nie znają języka programowania .

W szczególności, w kontekście czujnika odcisków palców kontra oprogramowanie do rejestracji / weryfikacji, oto jak próbowałem to wyjaśnić:

Jeśli jestem producentem urządzenia / czujnika odcisków palców i nie zajmuję się pisaniem oprogramowania, mogę lepiej promować mój produkt na rynku:

  1. Upewnij się, że moje sterowniki urządzeń można zainstalować w wielu różnych systemach operacyjnych
  2. Zdefiniuj i zapewnij interfejs API dla programistów do pisania programów (np. Do rejestracji, weryfikacji), aby „rozmawiać” lub korzystać z mojego urządzenia
  3. Opracuj i zapewnij pakiet SDK (jeden krok poza interfejsem API), aby programiści mogli łatwiej i szybciej pisać programy współpracujące z moim urządzeniem. Zestawy SDK mogą zapewniać biblioteki kodów pomocniczych, aplikacje referencyjne, dokumentację itp.
Sliceoftime
źródło

Odpowiedzi:

225

Bułka z masłem:

  • API to interfejs . To jak specyfikacja systemu telefonicznego lub instalacji elektrycznej w domu. Wszystko * może z niego korzystać, o ile wie, jak się komunikować. Możesz nawet kupić gotowe oprogramowanie do korzystania z konkretnego interfejsu API, tak jak możesz kupić od ręki sprzęt telefoniczny lub urządzenia, które podłączają się do okablowania prądu przemiennego w domu.
  • SDK to narzędzie do implementacji . To jest jak zestaw, który pozwala ** zbudować coś niestandardowego do podłączenia do systemu telefonicznego lub instalacji elektrycznej.

* Wszystko może korzystać z interfejsu API. Niektóre interfejsy API zawierają przepisy bezpieczeństwa wymagające kluczy licencyjnych, uwierzytelnienia itp., Które mogą uniemożliwić pełne korzystanie z interfejsu API w określonych przypadkach, ale tylko dlatego, że poszczególne etapy uwierzytelnienia / autoryzacji kończą się niepowodzeniem. Każde oprogramowanie, które ma odpowiednie poświadczenia (jeśli jest wymagane), może korzystać z interfejsu API.

** Technicznie, jeśli API jest dobrze udokumentowane, nie potrzebujesz SDK, aby zbudować własne oprogramowanie do korzystania z API. Ale posiadanie zestawu SDK ogólnie ułatwia ten proces.

Jason S.
źródło
2
Kilka innych pomysłów, które mam wyjaśnić, to przykład iPhone'a (zastrzeżony kod, ale dobrze zdefiniowany API), telefon lub port USB, aby wyjaśnić, czym jest interfejs oprogramowania z łatwiejszą do zrozumienia wizualną analogią sprzętową
Sliceoftime
17
Kontynuując to dobre wyjaśnienie, tj. API może być na przykład interfejsem API http / REST, podczas gdy SDK może być biblioteką na HttpClient, aby przyspieszyć i ułatwić interakcję z usługami sieciowymi REST.
frandevel
4
Mówiąc prościej, API to interfejs. Natomiast SDK to warstwa abstrakcji nad interfejsem.
tvanc
1
SDK niekoniecznie jest warstwą abstrakcji w interfejsie; SDK jest implementacją interfejsu. (jeśli istnieje kolejna warstwa abstrakcji, pytanie brzmi, dlaczego nie została określona jako część samego interfejsu)
Jason S
Zgadzam się z tą definicją, ale jednocześnie zastanawiam się, dlaczego iOS i Android używają terminu API np. Do biblioteki Bluetooth (iOS Core Bluetooth API, Android Bluetooth API)?
tamberg
59

API jest jak budulec jakiejś zagadkowej gry, w którą bawi się dziecko, łącząc bloki w różnych kształtach i budując coś, o czym mogą pomyśleć.

Z drugiej strony SDK to odpowiedni warsztat, w którym dostępne są wszystkie narzędzia programistyczne, a nie wstępnie ukształtowane bloki konstrukcyjne. W warsztacie masz rzeczywiste narzędzia i nie jesteś ograniczony do bloków, a zatem możesz tworzyć własne bloki, lub możesz stworzyć coś bez żadnych bloków na początek.

kodowanie bez SDK lub API jest jak tworzenie wszystkiego od zera bez warsztatu - musisz nawet tworzyć własne narzędzia

Abdul Rehman
źródło
Mówisz, że SDK nie ma wstępnie ukształtowanych bloków konstrukcyjnych, ale JAVA SDK jest dostarczany ze strukturami danych, takimi jak ArrayList lub HashMap ...?
Koray Tugay
1
Tak, możesz uznać to za element konstrukcyjny, ale z drugiej strony Java zapewnia to jako narzędzie, a nie element konstrukcyjny.
Abdul Rehman
1
Natknąłem się na to pytanie, gdy próbowałem czytać i rozumieć dokumentację Facebooka: developers.facebook.com/docs/javascript Jedną z rzeczy mnie dezorientuje, że Facebook nazywa to javascript SDK, który moim zdaniem bardziej przypomina API. Ponieważ nie zapewnia żadnych namacalnych narzędzi, a jedynie bibliotekę, z której mogą korzystać programiści, czy nie powinno to być nazywane API zamiast SDK?
shenkwen
Wyjaśnienie SDK nie działa zbyt dobrze. Zamiast tego not limited to blocks, or can create something without any blocks to begin withwięcej niż SDK daje jeszcze lepsze kompozycje bloków API do pracy. Zestaw SDK opiera się na interfejsie API.
Don Cheadle
26

Załóżmy, że firma C oferuje produkt P, a P w jakiś sposób wiąże się z oprogramowaniem. Następnie C może zaoferować bibliotekę / zestaw bibliotek twórcom oprogramowania sterującym systemami oprogramowania P.

Ta biblioteka / biblioteki są zestawem SDK . Jest to część systemów P. Jest to zestaw dla programistów, którego można używać do modyfikowania, konfigurowania, naprawy, ulepszania itp. Oprogramowania P.

Jeśli C chce zaoferować funkcjonalność P innym firmom / systemom, robi to z API .

Jest to interfejs do P. Sposób, w jaki systemy zewnętrzne mogą wchodzić w interakcje z P.

Jeśli myślisz o wdrażaniu, będą one wyglądać dość podobnie. Zwłaszcza teraz, gdy Internet stał się jak jeden duży rozproszony system operacyjny.

Jednak w rzeczywistości są one dość wyraźne.

Budujesz coś za pomocą SDK i używasz lub konsumujesz coś z API.

Jack Widman
źródło
22
Powinieneś po prostu edytować swoją odpowiedź do ostatniego wiersza i pominąć wszystkie bla-de-bla.
mhenry1384,
Jeśli C oferuje zestaw bibliotek sterujących oprogramowaniem P ', biblioteki te tworzą API, a nie SDK (chyba że jest to absolutnie minimalny SDK, który jest niczym innym jak API). Zestaw SDK będzie zawierał te API oraz wszystkie dodatki, których programiści potrzebują poza surowym API, stąd „zestaw”. Masz więc rację, budując coś vs. używając / konsumując (+ / kontrolując / interakcji), ale w innym przypadku rozróżnienie jest niejasne.
Josh Sutterfield
12

Application Programming Interface to zestaw procedur / struktur danych / klas, który określa sposób interakcji z docelową platformą / oprogramowaniem, takim jak OS X, Android, aplikacja do zarządzania projektami, oprogramowanie do wirtualizacji itp.

Podczas gdy Software Development Kit to pakiet API / s, który ułatwia pracę programistom.

Na przykład zestaw SDK systemu Android ułatwia programistom interakcję z platformą Android jako całością, podczas gdy sama platforma jest zbudowana z kompozytowych komponentów oprogramowania komunikujących się za pośrednictwem interfejsów API.

Czasami SDK są budowane w celu ułatwienia rozwoju w określonym języku programowania. Na przykład sterownik sieciowy Selenium (wbudowany w Javę) zapewnia interfejsy API do kierowania dowolną przeglądarką w sposób natywny, podczas gdy kapibara może być uważana za zestaw SDK, który ułatwia programistom Ruby korzystanie ze sterownika sieciowego Selenium. Jednak sterownik sieciowy Selenium sam w sobie jest także pakietem SDK, ponieważ łączy interakcję z różnymi natywnymi sterownikami przeglądarki w jednym pakiecie.

użytkownik3137634
źródło
Pomyślałem, że miło będzie podać kilka przykładów.
user3137634
9

Nie jestem pewien, czy istnieje jakakolwiek oficjalna definicja tych dwóch terminów. Rozumiem, że API to zestaw udokumentowanych bibliotek programowalnych i wspierające źródła takie jak nagłówki lub pliki IDL. Zestawy SDK zwykle zawierają interfejsy API, ale często często dodają kompilatory, narzędzia i próbki do miksu.

zwiał
źródło
1
technicznie interfejsy API muszą być określone, ale nie muszą być publicznie dokumentowane, mogą być tajne.
Jason S,
8

Interfejs API określa, jak coś zrobić, interfejs, taki jak: „Tory kolejowe są oddalone o cztery stopy, a metalowy pręt ma 1 cal szerokości” Teraz, gdy masz interfejs API, możesz teraz zbudować pociąg, który będzie pasował na tych torach utwory, jeśli chcesz iść gdziekolwiek. API to tylko informacja o tym, jak zbudować kod, nic nie robi.

SDK to pakiet rzeczywistych narzędzi, które już martwiły się specyfikacjami. „Oto pociąg, trochę węgla i konserwator. Korzystaj z niego, aby przemieszczać się z miejsca na miejsce” Dzięki SDK nie martwisz się o szczegóły. SDK to rzeczywisty kod, można go użyć do zrobienia czegoś, ale oczywiście pociąg nie uruchomi się spontanicznie, nadal musisz pozyskać konduktora, który kontroluje pociąg.

Zestawy SDK mają również własne interfejsy API. „Jeśli chcesz zasilić pociąg, włóż do niego węgiel”, „Pociągnij niebieską dźwignię, aby przesunąć pociąg.”, „Jeśli pociąg zacznie się zachowywać śmiesznie, zadzwoń do konserwatora” itp.

Śmieszni maniacy
źródło
3

API = Słownik dostępnych słów i ich znaczeń (oraz wymaganej gramatyki do ich łączenia)

SDK = system przetwarzania tekstu… dla 2-letnich dzieci… który pisze prosto z pomysłów

Mimo że MUSISZ chodzić do szkoły i stać się mistrzem swojego języka po kilku latach, korzystanie z zestawu SDK pomoże Ci szybko napisać całe znaczące zdania (wybaczając fakt, że w tym przykładzie jako dziecko jeszcze nie dostałeś nauczyć się dowolnego innego języka, a przynajmniej nauczyć się korzystać z zestawu SDK).

sergio
źródło
2

A może ... To tak, jakbyś chciał zainstalować system kina domowego w swoim domu. Korzystanie z interfejsu API jest jak uzyskiwanie wszystkich drutów, śrub, bitów i elementów. Możliwości są nieograniczone (ograniczone tylko przez otrzymywane elementy), ale czasem przytłaczające. Zestaw SDK jest jak zakup zestawu. Nadal musisz to złożyć, ale bardziej przypomina zdobycie wstępnie wyciętych elementów i instrukcji na półkę na książki IKEA niż pudełko śrub.

użytkownik1653667
źródło
0

Zestaw SDK służy do uzyskiwania dostępu do funkcji biblioteki, a interfejs API do kontrolowania jej.

ixjf
źródło
0

API = interfejs programowania aplikacji SDK = zestaw programistyczny

Zestaw SDK wydaje się być kompletnym zestawem interfejsów API, które pozwalają wykonywać większość czynności, które byłyby potrzebne do tworzenia aplikacji. Ponadto zestaw SDK może zawierać inne narzędzia do tworzenia platformy / elementu, dla którego jest przeznaczony.

Z drugiej strony interfejs API to szereg powiązanych metod, które mogą być przydatne do określonego celu.

Na przykład JDK (Java Development Kit) zawiera API, a także kompilatory, środowiska wykonawcze i inne różnorodne narzędzia. Java API to po prostu wszystkie biblioteki, które tworzą podstawowy język, z którym można pracować od razu po wyjęciu z pudełka.

Przykłady interfejsów API: Java API, Google Maps API, Flash Player API.

Przykłady zestawów SDK: JDK, GWT, Flex SDK.

Rehmanali Momin
źródło