APIとSDKの違い


187

APIとSDKの違いを開発者以外に説明しようとしています。商用指紋ソフトウェアベンダーがSDKを提供しない可能性がある理由を説明する必要があります。

デバイスベンダーとソフトウェアベンダーの両方が、明確に定義されたAPIを公開できます。このAPIにより、他のソフトウェアプログラムは、ベンダー独自のソフトウェアコンポーネントまたはハードウェアデバイスと相互運用(書き込み)できます。

誰かがこれを明確に説明するためのより多くのアイデアを持っているなら、私は提案を非常に感謝します。開発者の専門用語を知らないプログラマーでない人に概念を説明することが目標であることを強調したいと思います。

具体的には、登録/検証を行うための指紋センサーとソフトウェアのコンテキストで、以下に私がそれを説明しようとした方法を示します。

私が指紋デバイス/センサーの製造業者であり、ソフトウェアを書く業務に従事していない場合、私の製品をより適切に売り込む方法は次のとおりです。

  1. デバイスドライバーがさまざまなオペレーティングシステムにインストール可能であることを確認する
  2. ソフトウェア開発者が自分のデバイスと「対話」または使用するためのプログラム(たとえば、登録、検証)を作成するためのAPIを定義して提供する
  3. SDKを開発して提供し(APIを超えた1ステップ)、ソフトウェア開発者が私のデバイスで動作するプログラムを簡単かつ迅速に作成できるようにします。SDKは、ヘルパーコードライブラリ、リファレンスアプリケーション、ドキュメントなどを提供します。

回答:


225

ケーキ:

  • APIはインターフェースです。それは電話システムの仕様や家の電気配線のようなものです。インターフェイスする方法を知っている限り、何でも*使用できます。既成のソフトウェアを購入して特定のAPIを使用することもできます。これは、家のAC配線に接続する既成の電話機器やデバイスを購入できるのと同じです。
  • SDKは実装ツールです。これは、電話システムや電気配線に接続するためのカスタムを構築できるキットのようなものです。

*すべてがAPIを使用できます。一部のAPIには、特定のインスタンスでAPIの完全な使用を禁止するライセンスキーや認証などを要求するセキュリティ機能がありますが、これは特定の認証/承認手順が失敗したためです。適切な資格情報を提示するソフトウェア(必要な場合)は、APIを使用できます。

**技術的には、APIが十分に文書化されている場合、APIを使用するために独自のソフトウェアを構築するためにSDKは必要ありません。ただし、SDKを使用すると、通常、プロセスがはるかに簡単になります。


2
これを説明するために私が持っている他のいくつかのアイデアは、iPhoneの例(独自のコードですが明確に定義されたAPI)、電話インターフェース、またはUSBポートの例であり、ハードウェアの類推を視覚的に理解しやすいソフトウェアインターフェイスとは何かを説明しています
Sliceoftime

17
この適切な説明を続けます。つまり、APIはhttp / REST APIなどであり、SDKはHttpClient上のライブラリであり、REST Webサービスとの対話をより高速かつ簡単にすることができます。
frandevel 2013

4
より簡単に言えば、APIはインターフェースです。一方、SDKはインターフェース上の抽象化レイヤーです。
tvanc 2014

1
SDKは、必ずしもインターフェース上の抽象化レイヤーではありません。SDKはインターフェースの実装です。(別の抽象化レイヤーがある場合、問題はそれがインターフェイス自体の一部として指定されていない理由です)
ジェイソンS

私はこの定義に同意しますが、同時にiOSとAndroidがBluetoothライブラリ(iOS Core Bluetooth API、Android Bluetooth API)などにAPIという用語を使用する理由に疑問を感じますか?
タンバーグ

59

APIは、子供がさまざまな形のブロックを結合して、考えられる何かを構築するために遊ぶ、いくつかの不可解なゲームのビルディングブロックのようなものです。

一方、SDKは、事前に形成されたビルディングブロックではなく、すべての開発ツールを利用できる適切なワークショップです。ワークショップには実際のツールがあり、ブロックに限定されないため、独自のブロックを作成したり、ブロックなしで何かを作成したりできます。

SDKまたはAPIを使用しないコーディングは、ワークショップを使用せずにすべてを最初から作成するようなものです。独自のツールを作成する必要さえあります。


SDKには事前に形成されたビルディングブロックがないと言いますが、JAVA SDKにはArrayListやHashMapなどのデータ構造が付属しています...?
Koray Tugay 2013年

1
はい、あなたはそれをビルディングブロックと考えることができますが、一方でJavaはそれをビルディングブロックとしてではなくツールとして提供します。
Abdul Rehman 2013年

1
:私はFacebookのマニュアルを読み、理解しようとしていたとき、私はこの質問に出くわしたdevelopers.facebook.com/docs/javascript私はそのFacebookが私の意見では、よりAPIのようなものですjavascriptのSDK、それを呼び出していることの一つの混乱。それは具体的なツールを提供せず、開発者が使用できるライブラリのみを提供するため、これはSDKの代わりにAPIと呼ばれるべきではありませんか?
shenkwen、2015年

SDKの説明はimoではうまくいきません。ではなくnot limited to blocks, or can create something without any blocks to begin with、SDKの方がAPIのブロックをより適切に構成することができます。SDKはAPIの上に構築されます。
Don Cheadle 2016年

26

会社Cが製品Pを提供していて、Pが何らかの方法でソフトウェアを含んでいるとします。次に、Cは、Pのソフトウェアシステムを駆動するソフトウェア開発者にライブラリ/ライブラリセットを提供できます。

そのライブラリはSDKです。これは、Pのシステムの一部です。これは、ソフトウェア開発者がPのソフトウェアを変更、構成、修正、改善などするために使用するキットです。

CがPの機能を他の会社/システムに提供したい場合は、APIを使用して提供します

これは、Pへのインターフェースです。外部システムがPと対話する方法です。

実装に関して考えると、それらは非常に似ているように見えます。特に、インターネットは1つの大きな分散オペレーティングシステムのようになっています。

ただし、目的としては、実際にはかなり異なります。

SDKで何かを構築し、APIで何かを使用または消費します。


22
答えを最後の行まで編集して、何もかもをスキップしてください。
mhenry1384 2010年

CがPのソフトウェアを駆動する一連のライブラリーを提供する場合、それらのライブラリーはSDKではなくAPIを構成します(API以外の絶対に最小限のSDKでない限り)。SDKには、これらのAPIに加えて、未加工のAPI以外に開発者が必要とするすべての利点、つまり「キット」が含まれます。だからあなたは何かを構築することと使用する/消費する(+ /制御する/相互作用する)ことについては正しいですが、区別は混乱しています。
ジョシュサッターフィールド2012年

12

アプリケーションプログラミングインターフェースは、OS X、Android、プロジェクト管理アプリケーション、仮想化ソフトウェアなどのターゲットプラットフォーム/ソフトウェアと対話する方法を指定する一連のルーチン/データ構造/クラスです。

一方でソフトウェア開発キットは、開発者のための簡単な仕事になるAPI / sの周りのラッパーです。

たとえば、Android SDKを使用すると、開発者はAndroidプラットフォーム全体とやり取りできますが、プラットフォーム自体は、APIを介して通信する複合ソフトウェアコンポーネントによって構築されます。

また、特定のプログラミング言語での開発を容易にするためにSDKが構築されることもあります。たとえば、Selenium Webドライバー(Javaで構築)は、任意のブラウザーをネイティブに駆動するAPIを提供しますが、カピバラは、Ruby開発者がSelenium Webドライバーを使用するのを容易にするSDKと見なすことができます。ただし、Selenium Webドライバーは、さまざまなネイティブブラウザードライバーとの相互作用を1つのパッケージに結合するため、それ自体がSDKでもあります。


いくつかの例を引用するといいと思いました。
user3137634 2015年

9

これら2つの用語の正式な定義があるかどうかはわかりません。ドキュメント化されたプログラム可能なライブラリのセットであり、ヘッダーやIDLファイルなどのサポートソースであるAPIを理解しています。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はキットを入手するようなものです。それでも組み立てる必要がありますが、ネジの箱ではなく、イケアの本棚用に事前にカットされた部品や説明書を入手するようなものです。


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.