API와 SDK의 차이점


187

비 개발자에게 API와 SDK의 차이점을 설명하려고합니다. 상용 지문 소프트웨어 공급 업체가 SDK를 제공하지 않았을 가능성이 높은 이유를 설명해야합니다.

장치 공급 업체와 소프트웨어 공급 업체 모두 잘 정의 된 API를 노출 할 수 있으며 노출해야합니다. 이 API를 사용하면 다른 소프트웨어 프로그램이 공급 업체의 자체 소프트웨어 구성 요소 또는 하드웨어 장치와 상호 운용 될 수 있습니다.

누군가가 이것을 명확하게 설명 할 더 많은 아이디어를 가지고 있다면 제안을 대단히 감사하겠습니다. 개발자 링고를 모르는 프로그래머가 아닌 사람에게 개념을 설명하는 것이 목표 라고 강조하고 싶습니다 .

구체적으로, 지문 센서 대 등록 / 검증을 수행하는 소프트웨어와 관련하여 설명하는 방법은 다음과 같습니다.

지문 장치 / 센서 제조업체이며 소프트웨어 작성 업무를 수행하지 않는 경우 제품을보다 효과적으로 마케팅 할 수있는 방법은 다음과 같습니다.

  1. 장치 드라이버가 다양한 운영 체제에 설치 가능해야합니다
  2. 소프트웨어 개발자가 프로그램을 작성하여 (예 : 등록, 확인 등) 내 장치와“대화”하거나 사용할 수있는 API를 정의하고 제공하십시오.
  3. 소프트웨어 개발자가 내 장치에서 작동하는 프로그램을보다 쉽고 빠르게 작성할 수 있도록 SDK (API를 넘어 한 단계)를 개발하고 제공하십시오. SDK는 헬퍼 코드 라이브러리, 참조 애플리케이션, 문서 등을 제공 할 수 있습니다.

답변:


225

케이크 조각 :

  • API는 인터페이스 입니다. 전화 시스템의 사양이나 집의 전기 배선과 같습니다. 인터페이스 방법을 알고있는 한 아무거나 * 사용할 수 있습니다. 선반 전화 장비 또는 집안의 AC 배선에 연결된 장치를 구입할 수있는 것처럼 특정 API를 사용하기 위해 상용 소프트웨어를 구입할 수도 있습니다.
  • SDK는 구현 툴 입니다. 전화 시스템이나 전기 배선에 연결할 수있는 맞춤형 제품을 제작할 수있는 키트와 같습니다.

* 모든 것이 API를 사용할 수 있습니다. 일부 API에는 라이센스 키, 인증 등을 요구하는 보안 규정이있어 특정 인스턴스에서 API의 완전한 사용을 금지 할 수 있지만 특정 인증 / 권한 부여 단계가 실패하기 때문입니다. 올바른 자격 증명을 제공하는 소프트웨어 (필요한 경우)는 API를 사용할 수 있습니다.

** 기술적으로 API가 잘 문서화되어 있으면 API를 사용하기 위해 자체 소프트웨어를 빌드하기 위해 SDK가 필요하지 않습니다. 그러나 SDK를 사용하면 일반적으로 프로세스가 훨씬 쉬워집니다.


2
이 설명 내가 가진 몇 가지 다른 아이디어는 아이폰 예를 들어, 전화 잭 또는 USB 포트 예는 소프트웨어 인터페이스는 쉽게 시각적으로 이해하는 하드웨어 비유로 무엇인지 설명하기 (독점 코드 만 잘 정의 된 API)입니다
Sliceoftime

17
이 좋은 설명을 계속하면 (예 : API는 http / REST API 일 수 있으며) SDK는 HttpClient 위에있는 라이브러리로 REST 웹 서비스와 더 빠르고 쉽게 상호 작용할 수 있습니다.
frandevel

4
더 간단히 말하면 API는 인터페이스입니다. SDK는 인터페이스 위의 추상화 계층입니다.
tvanc

1
SDK는 반드시 인터페이스를 통한 추상화 계층 일 필요는 없습니다. SDK는 인터페이스의 구현입니다. (다른 추상화 계층이 있다면, 인터페이스 자체의 일부로 지정되지 않은 이유가 문제입니다.)
Jason S

나는이 정의에 동의하지만, 동시에 iOS와 안드로이드가 왜 블루투스 라이브러리 (iOS 코어 블루투스 API, 안드로이드 블루투스 API)를 위해 API라는 용어를 사용하는지 궁금하십니까?
tamberg

59

API 는 어린이가 다른 모양의 블록을 결합하고 생각할 수있는 무언가를 만들기 위해 노는 퍼즐 게임의 빌딩 블록과 같습니다.

반면에 SDK 는 사전 구성된 빌딩 블록이 아닌 모든 개발 도구를 사용할 수있는 적절한 워크샵입니다. 워크샵에는 실제 도구가 있으며 블록에만 국한되지 않으므로 직접 블록을 만들거나 블록없이 시작하여 무언가를 만들 수 있습니다.

SDK 또는 API없는 코딩 은 작업장없이 처음부터 모든 것을 만드는 것과 같습니다. 자신 만의 도구를 만들어야합니다


SDK에는 사전 구성된 빌딩 블록이 없지만 JAVA SDK에는 ArrayList 또는 HashMap과 같은 데이터 구조가 제공됩니다.
Koray Tugay

1
예, 빌딩 블록으로 간주 할 수 있지만 Java는 빌딩 블록이 아닌 도구로 제공합니다.
압둘 레만

1
내가 읽고 페이스 북 문서를 이해하려고 노력했다이 질문에 건너 온 : developers.facebook.com/docs/javascript 한 가지의 혼란을 내가 그 페이스 북이 내 의견에 더 많은 API를 같이하는 자바 스크립트의 SDK를 호출한다. 유형 도구는 제공하지 않고 개발자가 사용할 수있는 라이브러리 만 제공하므로 SDK 대신 API라고해서는 안됩니까?
shenkwen

SDK 설명이 제대로 작동하지 않습니다. 대신 not limited to blocks, or can create something without any blocks to begin withSDK와 마찬가지로 API 블록을 더 잘 구성 할 수 있습니다. SDK는 API를 기반으로 구축됩니다.
Don Cheadle

26

회사 C가 제품 P를 제공하고 P가 어떤 방식으로 소프트웨어를 포함한다고 가정하십시오. 그러면 C는 P의 소프트웨어 시스템을 구동하는 소프트웨어 개발자에게 라이브러리 / 라이브러리 세트를 제공 할 수 있습니다.

해당 라이브러리 / 라이브러리는 SDK 입니다. P의 시스템의 일부입니다. 소프트웨어 개발자가 P의 소프트웨어를 수정, 구성, 수정, 개선하기 위해 사용하는 키트입니다.

C가 다른 회사 / 시스템에 P의 기능을 제공하려는 경우 API를 사용하여 수행 합니다 .

이것은 P에 대한 인터페이스입니다. 외부 시스템이 P와 상호 작용하는 방법입니다.

구현 측면에서 생각하면 그것들은 상당히 비슷해 보일 것입니다. 특히 인터넷은 이제 하나의 큰 분산 운영 체제처럼되었습니다.

그러나 목적 상 실제로는 상당히 다릅니다.

SDK로 무언가를 만들고 API로 무언가를 사용하거나 소비합니다.


22
마지막 줄까지 답변을 편집하고 모든 blah-de-blah를 건너 뛰십시오.
mhenry1384

C가 P의 소프트웨어를 구동하는 라이브러리 세트를 제공하는 경우 해당 라이브러리는 SDK가 아닌 API를 구성합니다 (API 외에 다른 최소한의 SDK가 아닌 경우). SDK에는 이러한 API와 개발자가 원시 API 이외의 다른 모든 기능을 포함하기 때문에 "키트"가 포함됩니다. 따라서 무언가를 사용하거나 사용 / 소비 (+ / controlling / interacting)하는 것이 옳지 만 그 차이점은 모호합니다.
Josh Sutterfield

12

응용 프로그래밍 인터페이스 는 OS X, Android, 프로젝트 관리 응용 프로그램, 가상화 소프트웨어 등과 같은 대상 플랫폼 / 소프트웨어와 상호 작용하는 방법을 지정하는 루틴 / 데이터 구조 / 클래스 세트입니다.

하지만 소프트웨어 개발 키트는 API의 래퍼입니다 / 그 개발자를 위해 쉽게 작업을하게이야.

예를 들어, Android SDK를 사용하면 개발자가 전체적으로 Android 플랫폼과 상호 작용할 수 있으며 플랫폼 자체는 API를 통해 통신하는 복합 소프트웨어 구성 요소로 구축됩니다.

또한 특정 프로그래밍 언어로 쉽게 개발할 수 있도록 SDK가 구축되기도합니다. 예를 들어, Java로 빌드 된 Selenium 웹 드라이버 는 모든 브라우저를 기본적으로 구동하는 API를 제공하는 반면, capybara 는 Ruby 개발자가 Selenium 웹 드라이버를 쉽게 사용할 수있는 SDK로 간주 될 수 있습니다. 그러나 Selenium 웹 드라이버는 다양한 기본 브라우저 드라이버와의 상호 작용을 하나의 패키지로 결합하므로 자체적으로 SDK입니다.


몇 가지 예를 인용하면 좋을 것이라고 생각했습니다.
user3137634

9

이 두 용어에 대한 공식적인 정의가 확실하지 않습니다. API가 문서화 된 프로그래밍 가능 라이브러리 및 헤더 또는 IDL 파일과 같은 지원 소스 세트라는 것을 알고 있습니다. SDK에는 일반적으로 API가 포함되지만 종종 컴파일러, 도구 및 샘플을 믹스에 추가합니다.


1
기술적으로 API를 지정해야하지만 공개적으로 문서화 할 필요는 없으며 비밀 일 수 있습니다.
Jason S

8

API는 "철도 선로가 4 피트 떨어져 있고 금속 막대가 1 인치 넓습니다"와 같은 인터페이스를 수행하는 방법에 대한 사양입니다. 이제 API가 있으므로 해당 철도에 맞는 열차를 만들 수 있습니다. 어디든 가고 싶다면 추적합니다. API는 코드를 작성하는 방법에 대한 정보 일뿐 아무것도하지 않습니다.

SDK는 이미 사양을 염려 한 실제 도구 패키지입니다. "여기에는 기차, 석탄, 유지 보수 담당자가 있습니다.이를 사용하여 장소를 이동하십시오."SDK를 사용하면 세부 사항에 대해 걱정할 필요가 없습니다. SDK는 실제 코드이며 자체적으로 무언가를 수행하는 데 사용될 수 있지만 물론 기차는 자발적으로 시작되지 않으므로 열차를 제어하기 위해 지휘자가 있어야합니다.

SDK에는 자체 API도 있습니다. "석탄을 넣어 기차에 동력을 공급하려면"파란색 레버를 당겨서 기차를 움직입니다.


3

API = 사용 가능한 단어 사전 및 그 의미 (및이를 결합하는 데 필요한 문법)

SDK = 워드 프로세싱 시스템… 2 살짜리 아기를위한 아이디어…

몇 년 후 학교에 다니면서 언어를 배우게 되더라도 SDK를 사용하면 모든 의미있는 문장을 한 번에 작성하는 데 도움이 될 것입니다. SDK 사용 방법을 배우기 위해 다른 언어를 배우는 것)


2

어쩌면 ... 집에 홈 시어터 시스템을 설치하는 것과 같습니다. API를 사용하는 것은 모든 와이어, 나사, 비트 및 조각을 얻는 것과 같습니다. 가능성은 끝이 없지만 (수신 한 작품만으로 제한됨) 때로는 압도적입니다. SDK는 키트를 얻는 것과 같습니다. 여전히 조립해야하지만 나사 상자보다 IKEA 책꽂이에 대한 사전 절단 부품과 지침을 얻는 것과 비슷합니다.


0

SDK를 사용하여 라이브러리의 기능에 액세스하고 API를 사용하여 라이브러리를 제어합니다.


0

API = 응용 프로그래밍 인터페이스 SDK = 소프트웨어 개발 키트

SDK는 의 완전한 세트 것 같다 API를 사용하면 응용 프로그램을 만들기위한해야 대부분의 모든 작업을 수행 할 수의. 또한 SDK 에는 플랫폼 / 항목 용으로 개발하기위한 다른 도구가 포함될 수 있습니다.

API 다른 한편으로는 특정 목적을 위해 좋을 수 관련 메소드의 시리즈입니다.

예를 들어, JDK (Java Development Kit)에는 API, 컴파일러, 런타임 및 기타 기타 도구가 포함되어 있습니다. Java API는 기본적으로 사용할 수있는 핵심 언어를 구성하는 모든 라이브러리입니다.

API의 예 : Java API, Google Maps API, Flash Player API.

SDK의 예 : JDK, GWT, Flex SDK.

당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.