Sự khác biệt giữa API và SDK là gì?


174

Tôi đã xem qua các API và SDK khác nhau, khi tôi nhận ra rằng tôi thực sự không thể biết được sự khác biệt giữa thứ gọi là API và thứ gọi là SDK .

Về mặt khái niệm, cả hai đều là cách để chương trình của bạn giao tiếp và kiểm soát các tài nguyên được cung cấp bởi một phần mềm khác, cho dù phần mềm kia là dịch vụ web, ứng dụng người dùng cuối, dịch vụ hệ điều hành hay trình nền hay nhân trình điều khiển thiết bị.

Vậy, sự khác biệt về ngữ nghĩa giữa SDK và API là gì?


3
SDK là Bộ công cụ phát triển, thường là thư viện phía máy khách tạo điều kiện sử dụng API. API chỉ là định nghĩa thư viện / dịch vụ và tài liệu.
dietbuddha

Câu trả lời:


175

Tôi nghĩ rằng nó khá nằm trong dòng "Tất cả SDK là / chứa API nhưng không phải tất cả API đều là SDK".

SDK dường như là một bộ API hoàn chỉnh cho phép bạn thực hiện hầu hết mọi hành động bạn cần để tạo ứng dụng. Ngoài ra, SDK có thể bao gồm các công cụ khác để phát triển cho nền tảng / vật phẩm mà nó dành cho.

Mặt khác, API chỉ là một loạt các phương thức liên quan có thể tốt cho một mục đích cụ thể.

Ví dụ, JDK (Bộ công cụ phát triển Java) chứa API cũng như các trình biên dịch, thời gian chạy và các công cụ linh tinh khác. API Java đơn giản là tất cả các thư viện tạo nên ngôn ngữ cốt lõi mà bạn có thể làm việc bên ngoài hộp.


7
Tôi muốn thêm rằng SDK chỉ là một ví dụ về cách bạn sẽ tương tác với API đã nói.
Người đàn ông Muffin

10
Tôi nghĩ rằng bạn có thể đã đảo ngược Nick. SDK là siêu bộ của nhiều thứ, chứa API (trong số những thứ khác) để tương tác với các thư viện của nó (không phải chính thư viện, mà là giao diện với thư viện mà một lập trình viên sử dụng thư viện sẽ sử dụng).
Daniel Staple

7
SDK có thể bao gồm API, công cụ, tài liệu, mẫu và mọi thứ khác cần thiết.
gregmac

4
@gregmac Tôi không truyền đạt thực tế đó?

Về mặt thực tế, liệu có công bằng không khi nói rằng API rất có thể sẽ chỉ chứa các định nghĩa giao diện mà các lớp nên triển khai, trong khi SDK sẽ chứa các lớp cơ sở với hầu hết các chức năng tiêu chuẩn đã được lập trình?
Ben

85
  • API = Giao diện lập trình ứng dụng
  • SDK = Bộ phát triển phần mềm

Vì vậy, sự khác biệt thực sự là, API không nhiều hơn hoặc ít hơn một giao diện cho "một số dịch vụ", trong khi SDK là một tập hợp các công cụ / thành phần / lớp cho một mục đích cụ thể. Trên thực tế, SDK cung cấp cho bạn một API để giao diện. Nhưng bạn có thể sử dụng API mà không cần các thành phần cơ bản, ví dụ: khi API được cung cấp thông qua dịch vụ web.

Ví dụ về API:

Ví dụ về SDK:


3
+10 cho "bạn có thể sử dụng API mà không cần các thành phần cơ bản". Btw, liên kết thứ hai không hoạt động .......
Pacerier

24

API → giao diện tài liệu (tại một thời điểm nhất định và cho một đối tượng nhất định. Tài liệu có thể không đầy đủ và / hoặc không có sẵn cho công chúng và điều này có thể có chủ đích, nhưng điều này không làm mờ đi sự thật là nó được ghi lại cho các bên thứ ba sử dụng nó.)

SDK → tài liệu giao diện (+ ví dụ & công cụ)


4
Cuối cùng ai đó đề cập đến tài liệu!
gregmac

4
Không phải tất cả các API đều được ghi lại - đôi khi bạn chỉ cần kiểm tra / phản ánh giao diện.
JBRWilkinson

Không phải là "ví dụ" một phần của API?
Pacerier

1
@Pacerier ... hoàn toàn không. Các ví dụ có thể là một phần của tài liệu API , nhưng giao diện tuyệt đối có thể là "không có giấy tờ", (tức là tài liệu liên quan đến nó được giữ bí mật với thế giới bên ngoài: nghĩ ... idk, microsoft ) trong khi vẫn là API. Đó chỉ là giao diện. Hàm, lớp, cuộc gọi, có thể là một giao thức, có thể là định dạng tệp, nhưng không có gì hơn.
ZJR

17

"SDK" là tập thể theo nghĩa lớn hơn "API".

Bạn thường chỉ tìm thấy một SDK để bao quát toàn bộ nền tảng. Chẳng hạn, có một SDK MacOS X và một SDK iOS, và mỗi SDK chứa API cho nhiều lĩnh vực chức năng khác nhau.

"API" ban đầu cũng được sử dụng như một thuật ngữ tập thể và nó vẫn thường được sử dụng theo cách đó (MAPI, WSAPI, v.v.), nhưng nó thường bị giới hạn trong một số công nghệ cụ thể. Phạm vi ngụ ý của "API" dường như đã giảm dần trong những năm qua; mọi người thường nói về "API hộp công cụ Mac" hoặc "API Windows", cả hai đều rõ ràng chứa rất nhiều chức năng. Ngày nay, không có gì lạ khi nghe "API" được sử dụng để chỉ một chức năng hệ thống; một phiên bản mới của một hệ điều hành có thể được cho là chứa hàng trăm API mới và ý nghĩa của hàng trăm cuộc gọi hệ thống mới.

Không có thuật ngữ là rất chính xác mà không có một số bối cảnh.


11

API là gì?

API là một giao diện cho phép các chương trình phần mềm tương tác với nhau. Nó định nghĩa một tập hợp các quy tắc nên được theo sau bởi các chương trình để giao tiếp với nhau. API thường chỉ định cách xác định các thói quen, cấu trúc dữ liệu, v.v. để hai ứng dụng giao tiếp với nhau. API khác nhau về chức năng được cung cấp bởi chúng. Có các API chung cung cấp các chức năng thư viện của ngôn ngữ lập trình, chẳng hạn như API Java. Ngoài ra còn có các API cung cấp các chức năng cụ thể như API Google Maps. Ngoài ra còn có các API phụ thuộc ngôn ngữ, chỉ có thể được sử dụng bởi một ngôn ngữ lập trình cụ thể. Hơn nữa, có các API độc lập ngôn ngữ có thể được sử dụng với một số ngôn ngữ lập trình. API cần được triển khai rất cẩn thận bằng cách chỉ hiển thị các chức năng hoặc dữ liệu cần thiết ra bên ngoài, trong khi vẫn không thể truy cập các phần khác của ứng dụng. Việc sử dụng API đã trở nên rất phổ biến trên internet. Nó đã trở nên rất phổ biến để cho phép một số chức năng và dữ liệu thông qua API ra bên ngoài trên Web. Chức năng này có thể được kết hợp để cung cấp một chức năng được cải thiện cho người dùng.

SDK là gì?

SDK là một bộ công cụ có thể được sử dụng để phát triển các ứng dụng phần mềm nhắm mục tiêu đến một nền tảng cụ thể. SDK bao gồm các công cụ, thư viện, tài liệu và mã mẫu sẽ giúp lập trình viên phát triển ứng dụng. Hầu hết các SDK có thể được tải xuống từ internet và nhiều SDK được cung cấp miễn phí để khuyến khích các lập trình viên sử dụng ngôn ngữ lập trình của SDK. Một số SDK được sử dụng rộng rãi là SDK Java (JDK) bao gồm tất cả các thư viện, tiện ích gỡ lỗi, v.v., điều này sẽ giúp việc viết chương trình dễ dàng hơn nhiều trong Java. SDK làm cho cuộc sống của một nhà phát triển phần mềm trở nên dễ dàng, vì không cần phải tìm kiếm các thành phần / công cụ tương thích với nhau và tất cả chúng đều được tích hợp vào một gói dễ cài đặt.

Sự khác biệt giữa API và SDK là gì?

API là một giao diện cho phép các chương trình phần mềm tương tác với nhau, trong khi SDK là một bộ công cụ có thể được sử dụng để phát triển các ứng dụng phần mềm nhắm mục tiêu vào một nền tảng cụ thể. Phiên bản đơn giản nhất của SDK có thể là API chứa một số tệp cần thiết để tương tác với một ngôn ngữ lập trình cụ thể. Vì vậy, một API có thể được xem như một SDK đơn giản mà không cần tất cả các hỗ trợ gỡ lỗi, v.v.


7

SDK có thể không là gì ngoài API (các tệp giúp giao diện với ứng dụng khác), nhưng thường bao gồm các mã khác để giúp gỡ lỗi và các phần khác cho IDE của bạn.

Tôi hết từ viết tắt.


8
Nhanh lên, kiếm cho mình thêm một số TLA!
Mason Wheeler

4
Tôi đã sẵn sàng cho EIEIO.
JeffO

5

Mọi thứ được đề cập trước đây đều đúng, nhưng về SDK tôi muốn thêm rằng một bộ công cụ phát triển phần mềm là (hoặc nên là) một gói thực sự hoàn chỉnh với (gần như) tất cả các công cụ cần thiết cho quá trình phát triển, trong khi API chỉ là "giao diện" để tương tác với.


1

Hai xu của tôi: Tôi tin rằng thuật ngữ API thường được sử dụng không chính xác.

API là Giao diện lập trình ứng dụng.

Mặc dù loại tên khó xử, nhưng nó có nghĩa là một giao diện . Vì vậy, một ứng dụng có thể API để cho phép các ứng dụng khác giao tiếp với nó. Và một phần mềm (ví dụ: một lớp trong hệ thống OO) có thể cung cấp API để cho phép các mô-đun khác trong hệ thống giao tiếp với nó.

Tuy nhiên, thuật ngữ API thường được sử dụng như một từ đồng nghĩa của "thư viện". Tôi không nghĩ đó là cách sử dụng chính xác của từ này. Một phần của thư viện là một API để cho phép mã sử dụng nó, nhưng thư viện không phải là API.

Và SDK là một loại thư viện, vì vậy đó có thể là sự nhầm lẫn.


1
Tôi đồng ý. Có lẽ tôi sẽ ngừng nói rằng nó "không chính xác". Con tàu này đã đi thuyền và việc sử dụng "API" đã thay đổi. Nhưng tôi đồng ý rằng "thư viện" thường là một từ tốt hơn cho những gì mọi người đang gọi là "API"
Harry Wood

0

Rất nhiều câu trả lời khác giải thích rằng SDK là công cụ , nhưng không có câu trả lời nào trực tiếp xuất hiện và nói rằng API là một đặc tả .

API cho compoonent X là tất cả thông tin bạn cần để viết một số thành phần khác sẽ tương tác với X. SDK cho thành phần X có thể chứa các thói quen thư viện giúp bạn viết thành phần đó dễ dàng hơn, nhưng các thư viện thì không API: Chúng chỉ là hiện thân của API.


Đây chỉ là ý kiến ​​của bạn hoặc bạn có thể sao lưu nó bằng cách nào đó?
gnat

"API mô tả và quy định hành vi dự kiến ​​trong khi thư viện là triển khai thực tế của bộ quy tắc này" en.wikipedia.org/wiki/iêu
Solomon Slow

mỗi lần đọc của tôi, điều này không liên quan đến điểm bạn đang cố gắng thực hiện: "rằng API là một đặc điểm kỹ thuật"
gnat

-3

Tôi muốn so sánh theo cách này.

Nếu bạn là Nhà phát triển sử dụng Microsoft Tools:

API = Microsoft.Net Framework Vs SDK = Visual Studio

Nếu bạn là Nhà phát triển sử dụng Java:

API = Java RunTime Vs SDK = Bất kỳ công cụ nào sẽ cung cấp Bộ công cụ phát triển (JDK)

Tôi đoán một SDK nhất thiết phải dựa vào API tương ứng - không có SDK nào mà không có API.


Tôi nghĩ những gì bạn đang nói về Visual Studio là một IDE, có thể cung cấp quyền truy cập vào một hoặc nhiều SDK và / hoặc API.
KeithS

1
Visual Studio không phải là SDK nhưng một số phiên bản bao gồm SDK Windows hoặc .NET như bạn có khả năng phát triển cho chúng bằng cách sử dụng VS.
JBRWilkinson

-3

Đây là một sự tương tự đơn giản ... API giống như những từ mà bạn có thể sử dụng và SDK giống như những câu được ghép lại với bạn.


-4

Vì các ứng dụng được phát triển và cải tiến bằng cách kết nối chúng với các ứng dụng khác, cần phải cho phép các ứng dụng (logic) khác giao tiếp với logic lõi - điều này được thực hiện thông qua một bộ API xác định. SDK được sử dụng để tạo / tạo mã sử dụng API để tương tác với các ứng dụng khác.


1
điều này dường như không cung cấp bất cứ điều gì đáng kể qua các điểm được thực hiện và giải thích trong 11 câu trả lời trước
gnat
Khi sử dụng trang web của chúng tôi, bạn xác nhận rằng bạn đã đọc và hiểu Chính sách cookieChính sách bảo mật của chúng tôi.
Licensed under cc by-sa 3.0 with attribution required.