Bir API ile bir SDK arasındaki fark nedir?


174

Ben gerçekten bir denilen bir şey ayırt edemeyeceğini anlayınca ben, çeşitli API'ler ve SDK'larından ile bakıyordu API bir adlandırılan ve bir şey SDK .

Her ikisi de, kavramsal olarak, programınızın başka bir yazılım parçası tarafından sağlanan kaynaklarla etkileşime girmesi ve onu denetlemesi, başka bir yazılımın bir web servisi, son kullanıcı uygulaması, bir işletim sistemi servisi veya arka plan programı veya bir çekirdek olup olmadığıdır. aygıt sürücüsü.

Peki, bir SDK ve bir API arasındaki anlamsal fark nedir?


3
SDK, genellikle bir API'nin kullanımını kolaylaştıran bir istemci tarafı kütüphanesi olan bir Geliştirme Kitidir. Bir API sadece kütüphane / hizmet tanımı ve / veya dokümantasyondur.
dietbuddha

Yanıtlar:


175

Bunun yerine, "Tüm SDK'lar API içeriyor, ancak tüm API'ler SDK değil" satırlarına denk geliyor.

Bir SDK, uygulamalar oluşturmak için ihtiyaç duyacağınız her türlü işlemi yapmanıza izin veren eksiksiz bir API kümesi gibi görünmektedir. Ek olarak, bir SDK, kullanıldığı platform / ürün için geliştirme için başka araçlar içerebilir.

Öte yandan bir API, yalnızca belirli bir amaç için iyi olabilecek bir dizi ilgili yöntemdir.

Örnek olarak, JDK (Java Development Kit), API'yi ve ayrıca derleyicileri, çalışma zamanlarını ve diğer çeşitli araçları içerir. Java API, yalnızca kutudan çıkartabileceğiniz ana dili oluşturan tüm kütüphanelerdir.


7
Bir SDK’nın, söz konusu API ile nasıl etkileşimde bulunacağınızın bir örneği olduğunu eklemek isterim.
Çörek Adam

10
Sanırım Nick'i tersine çevirmiş olabilirsin. Bir SDK, kütüphaneleriyle etkileşime geçmek için (diğer şeylerin yanı sıra) API'leri içeren (kütüphanenin kendisi değil, kütüphaneyi kullanan bir kodlayıcının kullanacağı kütüphanenin arayüzünü) içeren bir süperset kümesidir.
Danny Staple,

7
Bir SDK bir API, araçlar, belgeler, örnekler ve ihtiyaç duyulan her şeyi içerebilir.
gregmac

4
@gregmac Bu gerçeği aktarmadım mı?

Pratik açıdan, bir SDK'nın daha önce programlanmış standart işlevlerin çoğuna sahip temel sınıfları içerdiği halde, bir sınıfın uygulanması gereken arayüz tanımlarını içereceğini söylemek doğru olur mu?
Ben

85
  • API = Uygulama Programlama Arabirimi
  • SDK = Yazılım Geliştirme Kiti

Bu yüzden asıl fark, bir API'nin "bazı servislere" bir arayüzden daha fazla veya daha az olmaması, bir SDK'nın ise belirli bir amaç için bir takım araçlar / bileşenler / sınıflar olmasıdır. Bir SDK aslında size arayüz ile bir API sunar. Ancak, örneğin API bir web servisi aracılığıyla sağlandığında, temel bileşenlere sahip olmadan bir API kullanabilirsiniz.

API örnekleri:

SDK örnekleri:


3
+10 "temel bileşenlere sahip olmadan bir API kullanabilirsiniz". BTW, ikinci bağlantı aşağı .......
Pacerier

24

API → belgelenmiş arayüz (belirli bir zamanda ve belirli bir izleyici kitlesi için belirli bir noktada olabilir. Belgelendirme genel kamuoyuna eksik olabilir ve / veya kullanılamayabilir ve bu kasıtlı olabilir, ancak bu belgelenmesi gerektiği gerçeğini azaltmaz. üçüncü tarafların kullanması için.)

SDK → arayüz dokümantasyonu (+ örnekler ve araçlar)


4
Sonunda belgelerden bahseden biri!
gregmac

4
Tüm API'ler belgelenmemiş - bazen arayüzü kontrol etmeniz / yansıtmanız gerekiyor.
JBRWilkinson

"Örnekler" API'nin bir parçası değil mi?
Pacerier

1
@Pacerier ... kesinlikle değil. Örnekler bir API dokümantasyonunun bir parçası olabilir , ancak saf arayüz "belgelenmemiş" olabilir (yani dokümantasyon dış dünyaya gizli tutulur: think ... idk, microsoft ). Bu sadece arayüz. İşlevler, sınıflar, çağrılar, belki bir protokol, belki bir dosya formatı, ama başka bir şey değil.
ZJR

17

"SDK", "API" den daha geniş bir anlamda kollektiftir.

Bir platformun tamamını kapsayan genellikle yalnızca bir SDK'yı bulabilirsiniz. Örneğin, bir MacOS X SDK ve bir iOS SDK var ve bunların her biri birçok farklı işlev alanı için API'leri içeriyor.

"API", aslında aynı zamanda kolektif bir terim olarak da kullanılıyordu ve hala bu şekilde kullanılıyor (MAPI, WSAPI, vb.), Ancak genellikle bazı teknolojilerle sınırlıdır. “API” tarafından belirtilen kapsam yıllar içinde azalmış görünüyor; insanlar, her ikisi de çok fazla işlevsellik içeren "Mac Araç Kutusu API" veya "Windows API" hakkında konuşurlardı . Bu günlerde, tek bir sistem işlevi için kullanılan "API" lerin duyulması nadir değildir; Bir işletim sisteminin yeni bir sürümünün yüzlerce yeni API içerdiği söylenebilir ve bunun anlamı yüzlerce yeni sistem çağrısıdır.

Her iki terim de bir bağlam olmadan kesin değildir.


11

API nedir?

API, yazılım programlarının birbirleriyle etkileşime girmesini sağlayan bir arayüzdür. Birbirleriyle iletişim kurmak için programların takip etmesi gereken bir takım kuralları tanımlar. API'ler genel olarak iki uygulamanın iletişim kurması için rutinlerin, veri yapılarının vs. nasıl tanımlanması gerektiğini belirtir. API'ler, sağladıkları işlevsellik bakımından farklılık gösterir. Java API gibi bir programlama dilinin kütüphane işlevlerini sağlayan genel API'ler vardır. Google Haritalar API’sı gibi belirli işlevler sağlayan API’ler de vardır. Sadece belirli bir programlama dili tarafından kullanılabilecek dile bağlı API'ler de vardır. Ayrıca, birkaç programlama diliyle kullanılabilecek dilden bağımsız API'ler vardır. Uygulamanın diğer kısımlarını erişilemez halde tutarken, yalnızca gerekli işlevselliği veya verileri dışarıya açarak API'lerin çok dikkatli bir şekilde uygulanması gerekir. API'lerin kullanımı internette çok popüler hale geldi. Bazı işlevsellik ve verilerin bir API üzerinden Web üzerinden dışarıya çıkmasına izin vermek çok yaygınlaştı. Bu işlevsellik, kullanıcılara gelişmiş bir işlevsellik sunmak için birleştirilebilir.

SDK nedir?

SDK, belirli bir platforma yönelik yazılım uygulamaları geliştirmek için kullanılabilecek bir araç setidir. SDK'lar, bir programcının uygulama geliştirmesine yardımcı olacak araçlar, kütüphaneler, belgeler ve örnek kod içerir. SDK'ların çoğu internetten indirilebilir ve SDK'ların çoğu, programcıları SDK'nın programlama dilini kullanmaya teşvik etmek için ücretsiz olarak verilir. Yaygın olarak kullanılan bazı SDK'lar, Java'da yazma programlarını çok daha kolaylaştıracak tüm kitaplıkları, hata ayıklama yardımcı programlarını vb. İçeren Java SDK'dır (JDK). SDK'lar bir yazılım geliştiricisinin ömrünü kolaylaştırır, çünkü birbirleriyle uyumlu bileşenler / aletler aramaya gerek yoktur ve hepsi de kurulumu kolay tek bir pakete entegre edilmiştir.

API ve SDK arasındaki fark nedir?

API, yazılım programlarının birbirleriyle etkileşime girmesini sağlayan bir arabirimdir; oysa SDK, belirli bir platformu hedefleyen yazılım uygulamaları geliştirmek için kullanılabilecek bir araç kümesidir. Bir SDK'nın en basit sürümü, belirli bir programlama dili ile etkileşime girmek için gereken bazı dosyaları içeren bir API olabilir. Böylece bir API tüm hata ayıklama desteği, vb. Olmadan basit bir SDK olarak görülebilir.


7

Bir SDK, bir API'den (başka bir uygulamayla arabirime yardımcı olacak dosyalar) başka bir şey olamaz, ancak genellikle IDE'niz için hata ayıklama ve diğer parçalara yardımcı olacak başka kodlar içerir.

Hepsi kısaltılmış.


8
Çabuk, kendine biraz TLA al!
Mason Wheeler,

4
EIEIO için hazırım.
JeffO

5

Daha önce belirtilen her şey doğrudur, ancak SDK ile ilgili olarak, bir yazılım geliştirme kitinin, geliştirme süreci için gerekli tüm araçları içeren (neredeyse) tüm paketler olduğunu (API) ise sadece "bir arayüz" olduğunu eklemek isterim. ile etkileşime geçmek için.


1

İki sentim: API teriminin sıklıkla yanlış kullanıldığına inanıyorum.

API, bir Uygulama Programlama Arayüzüdür.

Garip bir isim olsa da, bunun bir arayüz olduğu anlamına gelir . Yani bir uygulama olabilir var diğer uygulamalar onunla iletişim kurmasını sağlamak için bir API. Ve bir yazılım parçası (örneğin bir OO sistemindeki bir sınıf), sistemdeki diğer modüllerin onunla iletişim kurmasına izin vermek için bir API sunabilir.

Bununla birlikte, genellikle API terimi, "kütüphane" nin eş anlamlısı olarak kullanılır. Bunun kelimenin doğru bir kullanımı olduğunu sanmıyorum. Kütüphanenin bir kısmı , kodu kullanmasına izin veren bir API'dir, ancak kütüphane bir API değildir .

Bir SDK da bir çeşit kütüphanedir, bu yüzden karışıklığın olduğu yer burasıdır.


1
Katılıyorum. Muhtemelen "yanlış" olduğunu söylemeyi kestim. Bu gemi açıldı ve "API" kullanımı değişti. Ama "kütüphane" insanlar "API" aradığınız ne için daha iyi bir kelime çoğunlukla olduğuna katılıyorum
Harry Ahşap

0

Diğer cevapların çoğu SDK'nın bir takım olduğunu açıklıyor , ancak hiçbiri doğrudan çıkmıyor ve bir API'nin bir şartname olduğunu söylüyor .

X bileşeni için API, X ile etkileşime girecek başka bir bileşen yazmak için ihtiyaç duyduğunuz tüm bilgilerdir. X bileşeni için bir SDK, bu bileşeni yazmanızı kolaylaştıracak kütüphane yordamları içerebilir , ancak kitaplıklar API: Onlar yalnızca API'nin bir düzenlemesidir .


Bu sadece senin fikrin mi, yoksa bir şekilde mi destekleyebilirsin?
gnat

"API, beklenen davranışları kütüphane bu kurallar dizisinin gerçek bir uygulamasıyken açıklar ve belirler" en.wikipedia.org/wiki/…
Süleyman Yavaş

benim okumaya göre bu, yapmaya çalıştığınız nokta ile ilgili değildir: "bir API'nin bir özellik olduğunu"
gnat

-3

Bu şekilde karşılaştırmak istiyorum.

Microsoft Araçları kullanan bir Geliştirici iseniz:

API = Microsoft.Net Çerçevesi ve SDK = Visual Studio

Java kullanan bir Geliştirici iseniz:

API = Java RunTime Vs SDK = Geliştirme Kiti'ni (JDK) sağlayacak herhangi bir araç

Bir SDK'nın mutlaka ilgili bir API'ye güvenmek zorunda kalacağını tahmin ediyorum - API'siz bir SDK yok.


Sanırım Visual Studio açısından konuştuğunuz şey, bir veya daha fazla SDK'ya ve / veya API'ye erişim sağlayabilen bir IDE.
KeithS

1
Visual Studio bir SDK değildir, ancak bazı sürümleri VS kullanarak geliştirmeniz için Windows veya .NET SDK'yı içerir.
JBRWilkinson

-3

İşte basit bir benzetme ... API'ler kullanabileceğiniz kelimeler gibidir ve SDK'ler de sizin için bir araya getirilmiş cümleler gibidir.


-4

Uygulamalar, diğer uygulamalarla etkileşime girerek geliştirilip geliştirildiğinden, diğer uygulamaların (mantık) çekirdek mantıkla etkileşime girmesine izin verilmesi gerekir - bu, tanımlanmış bir API kümesi aracılığıyla yapılır. SDK, diğer uygulamalarla etkileşimde bulunmak için API'ler kullanan kod oluşturmak / oluşturmak için kullanılır.


1
Bu, önceki 11
cevapta
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.