API ve SDK arasındaki fark


187

Bir geliştirici olmayan bir API bir SDK arasındaki farkı açıklamaya çalışıyorum. Ticari bir parmak izi yazılım satıcısının neden bir SDK sağlamayacağını açıklamam gerekir, ancak kesinlikle bir tane kullanmış olabilirler.

Hem cihaz satıcıları hem de yazılım satıcıları iyi tanımlanmış bir API'yı gösterebilir ve göstermelidir. Bu API, diğer yazılım programlarının satıcının kendi yazılım bileşenleri veya donanım aygıtlarıyla etkileşime girmesine (yazılmak üzere) izin verir.

Birisi bunu açık bir şekilde açıklamak için daha fazla fikre sahipse, önerileri çok takdir ediyorum. Hedefin, geliştirici dil bilgisini bilmeyen bir programcıya kavramları açıklamak olduğunu vurgulamak istiyorum .

Özellikle, parmak izi sensörü bağlamında kayıt / doğrulama yapmak için yazılıma karşı, bunu nasıl açıklamaya çalıştım:

Bir parmak izi cihazı / sensör üreticisi ve yazılım yazma işinde değilim, ürünümü daha iyi pazarlayabileceğim yollar şunlardır:

  1. Aygıt sürücülerimin çok çeşitli işletim sistemlerine yüklenebildiğinden emin olun
  2. Yazılım geliştiricilerinin cihazımla "konuşmak" veya "kullanmak" için programlar yazmaları (ör. Kayıt, doğrulama için) için bir API tanımlayın ve sağlayın
  3. Yazılım geliştiricilerinin cihazımla çalışan programlar yazmasını kolaylaştırmak ve hızlandırmak için bir SDK (API'nın bir adım ötesinde) geliştirin ve sağlayın. SDK'lar yardımcı kod kitaplıkları, referans uygulamaları, belgeler vb. Sağlayabilir.

Yanıtlar:


225

Kekin parçası:

  • API bir arayüzdür . Telefon sisteminin özellikleri veya evinizdeki elektrik kabloları gibi. Herhangi bir şey *, nasıl arayüz kuracağını bildiği sürece kullanabilir. Evdeki AC kablolarına takılan raflı telefon ekipmanlarını veya cihazları satın alabileceğiniz gibi, belirli bir API'yi kullanmak için hazır bir yazılım bile satın alabilirsiniz.
  • bir SDK uygulama aracıdır . Bu, telefon sistemine veya elektrik kablolarına bağlanmak için özel bir şey inşa etmenizi sağlayan bir kit gibidir.

* Her şey bir API kullanabilir. Bazı API'ların, belirli durumlarda API'nın tam kullanımını yasaklayabilecek lisans anahtarları, kimlik doğrulama vb. Gerektiren güvenlik hükümleri vardır, ancak bunun nedeni yalnızca belirli kimlik doğrulama / yetkilendirme adımlarının başarısız olmasıdır. Doğru kimlik bilgilerini sunan tüm yazılımlar (gerekirse) API'yı kullanabilir.

** Teknik olarak, bir API iyi belgelenmişse, API'yı kullanmak için kendi yazılımınızı oluşturmak için bir SDK'ya ihtiyacınız yoktur. Ancak bir SDK'ya sahip olmak genellikle süreci çok daha kolay hale getirir.


2
Bunu açıklamak için sahip olduğum diğer bazı fikirler, donanım benzetimini görsel olarak daha kolay anlamak için bir yazılım arabiriminin ne olduğunu açıklamak için iPhone örneği (özel kod ancak iyi tanımlanmış API), telefon jakı veya USB bağlantı noktası örneğidir
Sliceoftime

17
SDK, REST web hizmetleriyle daha hızlı ve daha kolay etkileşim kurmak için HttpClient'in üstünde bir kütüphane olabilirken, bu iyi açıklamaya devam etmek, yani bir API örneğin bir http / REST API olabilir.
frandevel

4
Daha basit olarak, bir API bir arabirimdir. Halbuki bir SDK arayüz üzerinde bir soyutlama katmanıdır.
tvanc

1
SDK, arabirim üzerinde bir soyutlama katmanı olmak zorunda değildir; SDK arayüzün bir uygulamasıdır. (başka bir soyutlama katmanı varsa, soru neden arayüzün kendisinin bir parçası olarak belirtilmedi)
Jason S

Bu tanıma katılıyorum, ancak aynı zamanda iOS ve Android'in neden Bluetooth kütüphanesi (iOS Core Bluetooth API, Android Bluetooth API) için API terimini kullandığını merak ediyorum?
tamberg

59

API , bir çocuğun farklı şekillerde bloklara katılmak ve düşünebilecekleri bir şey oluşturmak için oynadığı bazı şaşırtıcı oyunun yapı taşları gibidir.

SDK ise , önceden şekillendirilmiş yapı taşları yerine tüm geliştirme araçlarının bulunduğu uygun bir atölyedir. Bir atölyede gerçek araçlara sahipsiniz ve sadece bloklarla sınırlı değilsiniz ve bu nedenle kendi bloklarınızı yapabilir veya herhangi bir blok olmadan bir şey yaratabilirsiniz.

SDK veya API olmadan kodlama , her şeyi bir atölye olmadan sıfırdan yapmak gibidir - kendi araçlarınızı bile yapmanız gerekir


SDK'nın önceden şekillendirilmiş yapı taşları olmadığını söylüyorsunuz, ancak JAVA SDK, ArrayList veya HashMap gibi Veri Yapıları ile geliyor ...?
Koray Tugay

1
Evet, bunu yapı taşı olarak düşünebilirsiniz, ancak Öte yandan Java bunu yapı taşı olarak değil bir araç olarak sunar.
Abdul Rehman

1
Facebook belgelerini okumaya ve anlamaya çalıştığımda bu soruya rastladım: developers.facebook.com/docs/javascript Bir şey beni şaşırtıyor. Somut bir araç sağlamadığından, yalnızca geliştiricilerin kullanabileceği bir kütüphane sağladığı için, SDK yerine API olarak adlandırılmamalı mı?
shenkwen

SDK açıklaması imo tam olarak çalışmıyor. Aksine not limited to blocks, or can create something without any blocks to begin with, SDK gibi API ile çalışmak için daha iyi kompozisyonlar sunar. SDK, bir API'nın üzerine kuruludur.
Don Cheadle

26

C şirketinin P ürününü sunduğunu ve P'nin bir şekilde yazılım içerdiğini varsayalım. Daha sonra C, P'nin yazılım sistemlerini çalıştıran yazılım geliştiricilerine bir kütüphane / kütüphane seti sunabilir.

Bu kütüphane / kütüphaneler bir SDK'dır . Bu, P'nin sistemlerinin bir parçasıdır. Yazılım geliştiricilerinin, P'nin yazılım parçasını değiştirmek, yapılandırmak, düzeltmek, geliştirmek, vb.

C, P'nin işlevselliğini diğer şirketlere / sistemlere sunmak istiyorsa, bunu bir API ile yapar .

Bu, P için bir arayüzdür. Harici sistemlerin P ile etkileşime girmesinin bir yolu.

Uygulama açısından düşünürseniz, oldukça benzer görünecektir. Özellikle internet artık büyük bir dağıtılmış işletim sistemi haline geldi.

Ancak amaç olarak, aslında oldukça farklıdırlar.

Bir SDK ile bir şeyler oluşturursunuz ve bir API ile bir şey kullanır veya tüketirsiniz.


22
Sadece son satıra kadar cevabınızı düzenlemeli ve tüm blah-de-blah'ı atlamalısınız.
mhenry1384

C, P'nin yazılımını çalıştıran bir dizi kitaplık sunuyorsa, bu kütüphaneler bir SDK değil, API'ları oluşturur (API'dan başka bir şey olmayan kesinlikle minimum bir SDK olmadığı sürece). SDK, bu API'ları ve geliştiricilerin ham API'den başka ihtiyaç duydukları tüm öğeleri, dolayısıyla "kit" i içerecektir. Yani, / tüketen (+ / kontrol / etkileşim) kullanarak bir şey inşa etme konusunda haklısınız, ancak ayrım aksi halde karıştı.
Josh Sutterfield

12

Uygulama Programlama Arayüzü , OS X, Android, proje yönetimi uygulaması, sanallaştırma yazılımı vb. Gibi hedef platform / yazılımla etkileşim kurmanın bir yolunu belirleyen bir dizi rutin / veri yapısı / sınıftır.

İken Yazılım Geliştirme Kiti API etrafında sarıcı / o geliştiriciler için kolay bir iş yapar bu.

Örneğin, Android SDK, geliştiricilerin bir bütün olarak Android platformuyla etkileşime girmesini kolaylaştırırken, platformun kendisi API'ler aracılığıyla iletişim kuran bileşik yazılım bileşenleri tarafından oluşturulmuştur.

Ayrıca, bazen SDK'lar belirli bir programlama dilinde gelişmeyi kolaylaştırmak için oluşturulur. Örneğin, Selenium web sürücüsü (yerleşik Java), herhangi bir tarayıcıyı yerel olarak çalıştırmak için API'ler sağlarken, capybara , Ruby geliştiricilerinin Selenium web sürücüsünü kullanmasını kolaylaştıran bir SDK olarak düşünülebilir. Bununla birlikte, Selenium web sürücüsü, çeşitli yerel tarayıcı sürücüleri ile etkileşimi tek bir pakette birleştirdiği için kendi başına bir SDK'dır.


Sadece bazı örnekler vermenin güzel olacağını düşündüm.
user3137634 16:15

9

Bu iki terimin resmi bir tanımı olduğundan emin değilim. Bir API'nin belgelenmiş programlanabilir kitaplıklar kümesi ve üstbilgiler veya IDL dosyaları gibi destekleyici kaynak olduğunu anlıyorum. SDK'lar genellikle API'ler içerir, ancak genellikle karışıma derleyiciler, araçlar ve örnekler ekler.


1
teknik olarak API'ların belirtilmesi gerekir, ancak herkese açık olarak belgelenmesi gerekmez, gizli olabilirler.
Jason S

8

API, bir şeyin nasıl yapılacağına ilişkin spesifikasyonlardır. herhangi bir yere gitmek istiyorsanız izler. API sadece kodunuzu nasıl oluşturacağınızla ilgili bir bilgidir, hiçbir şey yapmaz.

SDK, spesifikasyonlar hakkında zaten endişelenen bazı gerçek araçlar paketidir. "İşte bir tren, biraz kömür ve bir bakım görevlisi. Bir yerden bir yere gitmek için kullanın." SDK ile özellikler hakkında endişelenmezsiniz. Bir SDK gerçek koddur, bir şey yapmak için tek başına kullanılabilir, ancak elbette tren kendiliğinden başlamaz, hala treni kontrol etmek için bir iletken almanız gerekir.

SDK'ların ayrıca kendi API'ları vardır. "Trenin içine kömür koymak istiyorsanız," Treni hareket ettirmek için mavi kolu çekin. "," Tren komik davranmaya başlarsa, bakım görevlisini arayın "vb.


3

API = Kullanılabilir kelimelerin ve anlamları (ve bunları birleştirmek için gerekli dilbilgisi) sözlüğü

SDK = Kelime işleme sistemi… 2 yaşındaki bebekler için… doğrudan fikirlerden yazan

Birkaç yıl sonra okula gidip kendi dilinizde usta olmanıza rağmen, SDK'yı kullanmak kısa sürede tüm anlamlı cümleleri yazmanıza yardımcı olacaktır (Bu örnekte, bir bebek olarak bile almadığınız gerçeğini affetmek) en azından SDK'yı kullanmayı öğrenmek için başka bir dil öğrenmek.)


2

Nasıl ... Evinize bir ev sinema sistemi kurmak istiyormuşsunuz gibi. Bir API kullanmak, tüm kabloları, vidaları, uçları ve parçaları almak gibidir. Olasılıklar sonsuzdur (sadece aldığınız parçalar tarafından sınırlandırılır), ancak bazen bunaltıcıdır. Bir SDK bir kit almak gibidir. Hala bir araya getirmelisiniz, ancak daha çok IKEA kitaplık için önceden kesilmiş parçalar ve talimatlar almak gibi bir kutu vidadan daha fazlası.


0

Bir kitaplığın işlevselliğine erişmek için bir SDK ve onu kontrol etmek için bir API kullanırsınız.


0

API = Uygulama Programlama Arayüzü SDK = Yazılım Geliştirme Kiti

Bir SDK, uygulama oluşturmak için ihtiyaç duyduğunuz tüm eylemleri gerçekleştirmenize izin veren eksiksiz bir API seti gibi görünüyor . Buna ek olarak, bir SDK , platform / ürün için geliştirmeye yönelik başka araçlar da içerebilir.

Öte yandan bir API sadece belirli bir amaç için iyi olabilecek bir dizi ilgili yöntemdir.

Örneğin, JDK (Java Geliştirme Kiti) API'nin yanı sıra derleyicileri, çalışma zamanlarını ve diğer çeşitli araçları içerir. Java API, kutunun dışında çalışabileceğiniz temel dili oluşturan tüm kütüphanelerdir.

API örnekleri: Java API, Google Maps API, Flash Player API.

SDK örnekleri: JDK, GWT, Flex SDK.

Sitemizi kullandığınızda şunları okuyup anladığınızı kabul etmiş olursunuz: Çerez Politikası ve Gizlilik Politikası.
Licensed under cc by-sa 3.0 with attribution required.