Perbedaan antara API dan SDK

187

Saya mencoba menjelaskan kepada non-pengembang perbedaan antara API dan SDK. Saya perlu menjelaskan mengapa vendor perangkat lunak sidik jari komersial kemungkinan tidak akan menyediakan SDK, meskipun mereka mungkin telah menggunakannya.

Vendor perangkat dan vendor perangkat lunak dapat dan harus memaparkan API yang terdefinisi dengan baik. API ini memungkinkan program perangkat lunak lain (ditulis untuk) berinteraksi dengan komponen perangkat lunak atau perangkat keras vendor sendiri.

Jika seseorang memiliki lebih banyak ide untuk menjelaskan ini dengan jelas, saya akan sangat menghargai saran tersebut. Saya ingin menekankan bahwa tujuannya adalah untuk menjelaskan konsep-konsep kepada non-programmer yang tidak tahu istilah pengembang .

Secara khusus, dalam konteks sensor sidik jari versus perangkat lunak untuk melakukan pendaftaran / verifikasi, berikut adalah cara saya menjelaskannya:

Jika saya produsen alat sidik jari / sensor dan tidak dalam bisnis menulis perangkat lunak, cara saya bisa memasarkan produk saya adalah:

  1. Pastikan driver perangkat saya dapat diinstal pada berbagai sistem operasi
  2. Tentukan dan sediakan API untuk pengembang perangkat lunak untuk menulis program (misalnya, untuk pendaftaran, verifikasi) untuk "berbicara" atau menggunakan perangkat saya
  3. Kembangkan dan berikan SDK (satu langkah di luar API) untuk membuatnya lebih mudah dan lebih cepat bagi pengembang perangkat lunak untuk menulis program yang berfungsi dengan perangkat saya. SDK dapat menyediakan perpustakaan kode pembantu, aplikasi referensi, dokumentasi dll.
Sliceoftime
sumber

Jawaban:

225

Sepotong kue:

  • API adalah antarmuka . Ini seperti spesifikasi sistem telepon atau kabel listrik di rumah Anda. Apa pun * dapat menggunakannya selama ia tahu cara antarmuka. Anda bahkan dapat membeli perangkat lunak tidak aktif untuk menggunakan API tertentu, sama seperti Anda dapat membeli peralatan telepon rak atau perangkat yang menyambungkan kabel AC ke rumah Anda.
  • SDK adalah tooling implementasi . Ini seperti kit yang memungkinkan ** Anda membuat sesuatu yang khusus untuk dihubungkan ke sistem telepon atau kabel listrik.

* Apa pun dapat menggunakan API. Beberapa API memiliki ketentuan keamanan yang mengharuskan kunci lisensi, otentikasi, dll. Yang mungkin melarang penggunaan lengkap API dalam kasus tertentu, tetapi itu hanya karena langkah otentikasi / otorisasi tertentu gagal. Perangkat lunak apa pun yang menyajikan kredensial yang tepat (jika diperlukan) dapat menggunakan API.

** Secara teknis, jika API didokumentasikan dengan baik, Anda tidak perlu SDK untuk membangun perangkat lunak Anda sendiri untuk menggunakan API. Tetapi memiliki SDK umumnya membuat prosesnya lebih mudah.

Jason S
sumber
2
Beberapa ide lain yang saya miliki untuk menjelaskan ini adalah contoh iPhone (kode kepemilikan tetapi API yang didefinisikan dengan baik), jack telepon atau contoh port USB untuk menjelaskan apa antarmuka perangkat lunak dengan analogi perangkat keras yang lebih mudah dipahami secara visual
Sliceoftime
17
Melanjutkan penjelasan yang baik ini, misalnya API dapat berupa http / API REST, sedangkan SDK bisa menjadi perpustakaan di atas HttpClient untuk membuatnya lebih cepat dan lebih mudah untuk berinteraksi dengan layanan web REST.
frandevel
4
Lebih sederhana lagi, API adalah antarmuka. Sedangkan SDK adalah lapisan abstraksi di atas antarmuka.
tvanc
1
SDK belum tentu merupakan lapisan abstraksi di atas antarmuka; SDK adalah implementasi dari antarmuka. (jika ada lapisan abstraksi lain, pertanyaannya adalah mengapa itu tidak ditentukan sebagai bagian dari antarmuka itu sendiri)
Jason S
Saya setuju dengan definisi ini, tetapi pada saat yang sama bertanya-tanya mengapa iOS dan Android menggunakan istilah API untuk misalnya perpustakaan Bluetooth (iOS Bluetooth Core API, Android Bluetooth APIs)?
tamberg
59

API seperti blok bangunan dari beberapa permainan membingungkan yang dimainkan anak untuk bergabung dengan balok dalam berbagai bentuk dan membangun sesuatu yang dapat mereka pikirkan.

SDK , di sisi lain, adalah bengkel yang tepat di mana semua alat pengembangan tersedia, bukan blok bangunan pra-bentuk. Di bengkel Anda memiliki alat yang sebenarnya dan Anda tidak terbatas pada blok, dan karena itu dapat membuat blok Anda sendiri, atau dapat membuat sesuatu tanpa blok untuk memulai.

pengkodean tanpa SDK atau API seperti membuat semuanya dari awal tanpa bengkel - Anda bahkan harus membuat alat sendiri

Abdul Rehman
sumber
Anda bilang SDK tidak memiliki blok bangunan pra-cetak tetapi JAVA SDK dilengkapi dengan Struktur Data seperti ArrayList atau HashMap ...?
Koray Tugay
1
Ya, Anda bisa menganggapnya sebagai building block tetapi Di sisi lain Java Menyediakannya sebagai alat bukan sebagai building block.
Abdul Rehman
1
Saya menemukan pertanyaan ini ketika saya mencoba membaca dan memahami dokumentasi facebook: developers.facebook.com/docs/javascript Satu hal yang membingungkan saya adalah bahwa facebook menyebutnya javascript SDK, yang menurut saya lebih seperti API. Karena tidak menyediakan alat nyata tetapi hanya perpustakaan yang dapat digunakan pengembang, bukankah ini harus disebut API bukan SDK?
shenkwen
Penjelasan SDK tidak cukup berfungsi. Alih-alih not limited to blocks, or can create something without any blocks to begin with, lebih seperti SDK memberi Anda komposisi yang lebih baik dari blok API untuk bekerja dengannya. SDK dibuat di atas API.
Don Cheadle
26

Misalkan perusahaan C menawarkan produk P dan P melibatkan perangkat lunak dalam beberapa cara. Kemudian C dapat menawarkan pustaka / set pustaka kepada pengembang perangkat lunak yang menggerakkan sistem perangkat lunak P.

Perpustakaan itu / perpustakaan adalah SDK . Ini adalah bagian dari sistem P. Ini adalah kit untuk digunakan oleh pengembang perangkat lunak untuk memodifikasi, mengkonfigurasi, memperbaiki, memperbaiki, dll. Bagian perangkat lunak P.

Jika C ingin menawarkan fungsionalitas P ke perusahaan / sistem lain, ia melakukannya dengan API .

Ini adalah antarmuka ke P. Cara untuk sistem eksternal untuk berinteraksi dengan P.

Jika Anda berpikir dalam hal implementasi, mereka akan tampak sangat mirip. Apalagi sekarang bahwa internet telah menjadi seperti satu sistem operasi terdistribusi besar.

Namun, secara sengaja, mereka sebenarnya sangat berbeda.

Anda membangun sesuatu dengan SDK dan Anda menggunakan atau menggunakan sesuatu dengan API.

Jack Widman
sumber
22
Anda hanya perlu mengedit jawaban Anda hingga ke baris terakhir dan melewatkan semua bla-de-bla.
mhenry1384
Jika C menawarkan satu set pustaka yang menggerakkan perangkat lunak P, pustaka-pustaka itu membuat API, bukan SDK (kecuali itu adalah SDK yang benar-benar minimal yang tidak lain adalah API). SDK akan menyertakan API ini plus semua barang yang dibutuhkan pengembang selain API mentah, karenanya "kit". Jadi, Anda benar tentang membangun sesuatu vs. menggunakan / mengonsumsi (+ / mengendalikan / berinteraksi), tetapi perbedaannya kacau.
Josh Sutterfield
12

Application Programming Interface adalah seperangkat rutinitas / struktur data / kelas yang menentukan cara untuk berinteraksi dengan platform target / perangkat lunak seperti OS X, Android, aplikasi manajemen proyek, perangkat lunak virtualisasi dll.

Sementara Software Development Kit adalah pembungkus API / s yang membuat pekerjaan mudah bagi pengembang.

Sebagai contoh, Android SDK memfasilitasi pengembang untuk berinteraksi dengan platform Android secara keseluruhan sementara platform itu sendiri dibangun oleh komponen perangkat lunak komposit yang berkomunikasi melalui API.

Juga, terkadang SDK dibangun untuk memfasilitasi pengembangan dalam bahasa pemrograman tertentu. Misalnya, driver web Selenium (bawaan Java) menyediakan API untuk mendorong browser apa pun secara native, sementara capybara dapat dianggap sebagai SDK yang memfasilitasi pengembang Ruby untuk menggunakan driver web Selenium. Namun, driver web Selenium juga merupakan SDK dengan sendirinya karena menggabungkan interaksi dengan berbagai driver browser asli ke dalam satu paket.

pengguna3137634
sumber
Hanya berpikir bahwa akan menyenangkan mengutip beberapa contoh.
user3137634
9

Saya tidak yakin ada definisi resmi dari kedua istilah ini. Saya memahami API sebagai sekumpulan perpustakaan yang dapat diprogram dan sumber pendukungnya yang terdokumentasi seperti header atau file IDL. SDK biasanya mengandung API tetapi seringkali sering menambahkan kompiler, alat, dan sampel ke dalam campuran.

baru saja
sumber
1
secara teknis API harus ditentukan tetapi tidak harus didokumentasikan secara publik, mereka bisa dirahasiakan.
Jason S
8

API adalah spesifikasi tentang cara melakukan sesuatu, antarmuka, seperti "Jalur kereta api berjarak empat kaki, dan batang logam lebarnya 1 inci" Sekarang, setelah Anda memiliki API, kini Anda dapat membangun kereta yang cocok dengan kereta api tersebut. trek jika Anda ingin pergi ke mana pun. API hanyalah informasi tentang cara membuat kode Anda, itu tidak melakukan apa-apa.

SDK adalah beberapa paket alat yang sebenarnya sudah khawatir tentang spesifikasi. "Ini kereta, batu bara, dan petugas pemeliharaan. Gunakan untuk berpindah dari satu tempat ke tempat lain" Dengan SDK Anda tidak perlu khawatir tentang hal-hal spesifik. SDK adalah kode aktual, dapat digunakan dengan sendirinya untuk melakukan sesuatu, tetapi tentu saja, kereta tidak akan mulai secara spontan, Anda masih harus mendapatkan konduktor untuk mengendalikan kereta.

SDK juga memiliki API mereka sendiri. "Jika Anda ingin memberi daya pada kereta, masukkan batu bara ke dalamnya", "Tarik tuas biru untuk memindahkan kereta.", "Jika kereta mulai bertingkah lucu, hubungi petugas pemeliharaan" dll.

Geeks lucu
sumber
3

API = Kamus kata yang tersedia dan artinya (dan tata bahasa yang diperlukan untuk menggabungkannya)

SDK = Sistem pengolah kata ... untuk bayi berusia 2 tahun ... yang menulis langsung dari ide

Meskipun Anda BISA pergi ke sekolah dan menjadi master dalam bahasa Anda setelah beberapa tahun, menggunakan SDK akan membantu Anda menulis seluruh kalimat yang bermakna dalam waktu singkat (Mengampuni kenyataan bahwa, dalam contoh ini, sebagai bayi Anda bahkan belum mendapatkan untuk belajar bahasa lain setidaknya untuk belajar menggunakan SDK.)

sergio
sumber
2

Bagaimana dengan ... Rasanya seperti Anda ingin memasang sistem home theatre di rumah Anda. Menggunakan API sama seperti mendapatkan semua kabel, sekrup, bit, dan potongan. Kemungkinannya tidak terbatas (dibatasi hanya oleh bagian yang Anda terima), tetapi terkadang luar biasa. SDK seperti mendapatkan kit. Anda masih harus menyatukannya, tetapi ini lebih seperti mendapatkan potongan pre-cut dan instruksi untuk rak buku IKEA daripada sekotak sekrup.

pengguna1653667
sumber
0

Anda menggunakan SDK untuk mengakses fungsionalitas perpustakaan, dan API untuk mengontrolnya.

ixjf
sumber
0

API = Antarmuka Pemrograman Aplikasi SDK = Kit Pengembangan Perangkat Lunak

Sebuah SDK tampaknya menjadi satu set lengkap API s yang memungkinkan Anda untuk melakukan sebagian tindakan apapun Anda akan perlu untuk untuk membuat aplikasi. Selain itu SDK dapat mencakup alat lain untuk mengembangkan untuk platform / item yang untuknya.

Sebuah API di sisi lain hanya serangkaian metode terkait yang mungkin baik untuk tujuan tertentu.

Sebagai contoh, JDK (Java Development Kit) berisi API dan juga kompiler, runtime, dan alat lain-lain. Java API hanyalah semua pustaka yang membentuk bahasa inti yang dapat Anda gunakan di luar kotak.

Contoh API: API Java, Google Maps API, Flash Player API.

Contoh SDK: JDK, GWT, Flex SDK.

Rehmanali Momin
sumber