Sự khác biệt giữa API và SDK


187

Tôi đang cố gắng giải thích cho một người không phải là nhà phát triển về sự khác biệt giữa API một SDK. Tôi cần giải thích lý do tại sao một nhà cung cấp phần mềm vân tay thương mại có thể sẽ không cung cấp SDK, mặc dù họ chắc chắn đã sử dụng một SDK.

Cả nhà cung cấp thiết bị và nhà cung cấp phần mềm đều có thể và nên trưng ra API được xác định rõ. API này cho phép các chương trình phần mềm khác (được ghi vào) hoạt động tương tác với các thành phần phần mềm hoặc thiết bị phần cứng của nhà cung cấp.

Nếu ai đó có nhiều ý tưởng để giải thích điều này rõ ràng, tôi sẽ đánh giá rất cao những gợi ý. Tôi muốn nhấn mạnh rằng mục tiêu là giải thích các khái niệm cho một người không lập trình viên, người không biết về biệt ngữ của nhà phát triển .

Cụ thể, trong bối cảnh cảm biến vân tay so với phần mềm để đăng ký / xác minh, đây là cách tôi cố gắng giải thích:

Nếu tôi là nhà sản xuất thiết bị / cảm biến vân tay và không kinh doanh viết phần mềm, những cách tôi có thể tiếp thị sản phẩm tốt hơn là:

  1. Đảm bảo trình điều khiển thiết bị của tôi có thể cài đặt được trên nhiều hệ điều hành
  2. Xác định và cung cấp API cho các nhà phát triển phần mềm để viết chương trình (ví dụ: để đăng ký, xác minh) cho Trò chuyện nói chuyện với hoặc sử dụng thiết bị của tôi
  3. Phát triển và cung cấp SDK (vượt một bước so với API) để giúp các nhà phát triển phần mềm viết các chương trình hoạt động với thiết bị của tôi dễ dàng và nhanh hơn. SDK có thể cung cấp thư viện mã trợ giúp, ứng dụng tham khảo, tài liệu, v.v.

Câu trả lời:


225

Miếng bánh:

  • API là một giao diện . Nó giống như đặc điểm kỹ thuật của hệ thống điện thoại hoặc hệ thống dây điện trong nhà bạn. Bất cứ điều gì * có thể sử dụng nó miễn là nó biết cách giao diện. Bạn thậm chí có thể mua phần mềm sẵn có để sử dụng một API cụ thể, giống như bạn có thể mua các thiết bị điện thoại trên kệ hoặc các thiết bị cắm vào dây AC trong nhà bạn.
  • SDK là công cụ triển khai . Nó giống như một bộ cho phép ** bạn xây dựng một cái gì đó tùy chỉnh để nối với hệ thống điện thoại hoặc hệ thống dây điện.

* Bất cứ điều gì cũng có thể sử dụng API. Một số API có các quy định bảo mật để yêu cầu khóa cấp phép, xác thực, v.v ... có thể cấm sử dụng hoàn toàn API trong các trường hợp cụ thể, nhưng đó chỉ là do các bước xác thực / ủy quyền cụ thể không thành công. Bất kỳ phần mềm nào trình bày thông tin xác thực phù hợp (nếu được yêu cầu) đều có thể sử dụng API.

** Về mặt kỹ thuật, nếu một API được ghi chép tốt, bạn không cần SDK để xây dựng phần mềm của riêng bạn để sử dụng API. Nhưng có một SDK thường làm cho quá trình dễ dàng hơn nhiều.


2
Một số ý tưởng khác mà tôi có để giải thích đây là ví dụ về iPhone (mã độc quyền nhưng API được xác định rõ), ví dụ về cổng điện thoại hoặc cổng USB để giải thích giao diện phần mềm là gì với sự tương tự phần cứng dễ hiểu hơn
Sliceoftime

17
Tiếp tục giải thích tốt này, ví dụ API có thể là API http / REST, trong khi SDK có thể là thư viện trên HTTPClient để giúp tương tác nhanh hơn và dễ dàng hơn với các dịch vụ web REST.
frandevel

4
Đơn giản hơn, API là một giao diện. Trong khi đó SDK là một lớp trừu tượng trên giao diện.
tvanc

1
SDK không nhất thiết phải là một lớp trừu tượng trên giao diện; SDK là một triển khai của giao diện. (nếu có một lớp trừu tượng khác, câu hỏi đặt ra là tại sao nó không được chỉ định là một phần của chính giao diện)
Jason S

Tôi đồng ý với định nghĩa này, nhưng đồng thời tự hỏi tại sao iOS và Android sử dụng thuật ngữ API cho ví dụ thư viện Bluetooth (API Bluetooth của iOS Core, API Bluetooth của Android)?
tamberg

59

API giống như các khối xây dựng của một số trò chơi khó hiểu mà một đứa trẻ chơi để tham gia các khối theo các hình dạng khác nhau và xây dựng một cái gì đó mà chúng có thể nghĩ ra.

SDK , mặt khác, là một hội thảo thích hợp nơi tất cả các công cụ phát triển đều có sẵn, thay vì các khối xây dựng được định hình sẵn. Trong một hội thảo, bạn có các công cụ thực tế và bạn không bị giới hạn trong các khối, và do đó có thể tạo các khối của riêng bạn hoặc có thể tạo một cái gì đó mà không có bất kỳ khối nào để bắt đầu.

mã hóa mà không có SDK hoặc API giống như tạo mọi thứ từ đầu mà không cần hội thảo - bạn thậm chí phải tạo ra các công cụ của riêng mình


Bạn nói SDK không có các khối xây dựng được định hình sẵn nhưng JAVA SDK đi kèm với Cấu trúc dữ liệu như ArrayList hoặc HashMap ...?
Koray Tugay

1
Đúng, Bạn có thể coi nó là khối xây dựng nhưng mặt khác Java Cung cấp nó như một công cụ không phải là một khối xây dựng.
Abdul Rehman

1
Tôi đã gặp câu hỏi này khi tôi đang cố đọc và hiểu tài liệu về facebook: developers.facebook.com/docs/javascript Một điều khiến tôi bối rối là facebook gọi nó là SDK javascript, theo ý kiến ​​của tôi giống API hơn. Bởi vì nó không cung cấp bất kỳ công cụ hữu hình nào mà chỉ là một thư viện mà các nhà phát triển có thể sử dụng, nên đây có nên được gọi là API thay vì SDK không?
shenkwen

Giải thích SDK không hoạt động khá imo. Thay vào đó not limited to blocks, or can create something without any blocks to begin with, giống như SDK cung cấp cho bạn các tác phẩm thậm chí tốt hơn về các khối API để làm việc. SDK được xây dựng dựa trên API.
Don Cheadle

26

Giả sử công ty C cung cấp sản phẩm P và P liên quan đến phần mềm theo một cách nào đó. Sau đó, C có thể cung cấp một thư viện / bộ thư viện cho các nhà phát triển phần mềm điều khiển các hệ thống phần mềm của P.

Thư viện / thư viện đó là một SDK . Nó là một phần của các hệ thống của P. Nó là một bộ công cụ cho các nhà phát triển phần mềm sử dụng để sửa đổi, định cấu hình, sửa chữa, cải thiện, v.v. phần mềm của P.

Nếu C muốn cung cấp chức năng của P cho các công ty / hệ thống khác, thì API sẽ làm như vậy với API .

Đây là giao diện cho P. Một cách để các hệ thống bên ngoài tương tác với P.

Nếu bạn nghĩ về mặt thực hiện, chúng sẽ có vẻ khá giống nhau. Đặc biệt là bây giờ internet đã trở thành giống như một hệ điều hành phân tán lớn.

Trong mục đích, mặc dù, họ thực sự khá khác biệt.

Bạn xây dựng một cái gì đó với SDK và bạn sử dụng hoặc sử dụng một cái gì đó bằng API.


22
Bạn chỉ cần chỉnh sửa câu trả lời của bạn xuống dòng cuối cùng và bỏ qua tất cả các blah-de-blah.
mhenry1384

Nếu C cung cấp một bộ thư viện điều khiển phần mềm của P, thì các thư viện đó tạo nên (các) API, không phải SDK (trừ khi đó là SDK hoàn toàn tối thiểu không có gì ngoài API). SDK sẽ bao gồm các API này cộng với tất cả các tính năng mà nhà phát triển cần ngoài API thô, do đó là "bộ công cụ". Vì vậy, bạn đúng khi xây dựng một cái gì đó so với việc sử dụng / tiêu thụ (+ / kiểm soát / tương tác), nhưng sự khác biệt lại bị nhầm lẫn.
Josh Sutterfield

12

Giao diện lập trình ứng dụng là một tập hợp các thường trình / cấu trúc dữ liệu / lớp chỉ định cách tương tác với nền tảng / phần mềm đích như OS X, Android, ứng dụng quản lý dự án, phần mềm ảo hóa, v.v.

Trong khi Software Development Kit là một trình bao bọc xung quanh API / s giúp công việc dễ dàng cho các nhà phát triển.

Ví dụ: SDK Android tạo điều kiện cho các nhà phát triển tương tác với toàn bộ nền tảng Android trong khi bản thân nền tảng được xây dựng bởi các thành phần phần mềm tổng hợp giao tiếp qua API.

Ngoài ra, đôi khi SDK được xây dựng để tạo điều kiện phát triển bằng ngôn ngữ lập trình cụ thể. Ví dụ: trình điều khiển web Selenium (được xây dựng trong Java) cung cấp API để điều khiển bất kỳ trình duyệt nào, trong khi capybara có thể được coi là một SDK tạo điều kiện cho các nhà phát triển Ruby sử dụng trình điều khiển web Selenium. Tuy nhiên, trình điều khiển web Selenium cũng là một SDK vì nó kết hợp tương tác với các trình điều khiển trình duyệt riêng khác nhau thành một gói.


Chỉ cần nghĩ rằng nó sẽ được tốt đẹp để trích dẫn một số ví dụ.
dùng3137634

9

Tôi không chắc có bất kỳ định nghĩa chính thức nào về hai thuật ngữ này. Tôi hiểu API là một tập hợp các thư viện có thể lập trình tài liệu và nguồn hỗ trợ, chẳng hạn như các tiêu đề hoặc tệp IDL. SDK thường chứa API nhưng thường thêm trình biên dịch, công cụ và mẫu vào hỗn hợp.


1
API kỹ thuật cần phải được chỉ định nhưng không phải được ghi lại công khai, chúng có thể là bí mật.
Jason S

8

API là thông số kỹ thuật về cách thực hiện một cái gì đó, một giao diện, chẳng hạn như "Đường ray xe lửa cách nhau bốn feet và thanh kim loại rộng 1 inch" Bây giờ bạn đã có API, giờ đây bạn có thể xây dựng một đoàn tàu phù hợp với đường sắt đó theo dõi nếu bạn muốn đi bất cứ nơi nào. API chỉ là thông tin về cách xây dựng mã của bạn, nó không làm gì cả.

SDK là một số gói công cụ thực tế đã lo lắng về các thông số kỹ thuật. "Đây là một chuyến tàu, một ít than đá và một người bảo trì. Sử dụng nó để đi từ nơi này đến nơi khác" Với SDK bạn không lo lắng về chi tiết cụ thể. SDK là mã thực tế, nó có thể được sử dụng để làm một cái gì đó, nhưng tất nhiên, tàu sẽ không khởi động một cách tự nhiên, bạn vẫn phải có một nhạc trưởng để điều khiển tàu.

SDK cũng có API riêng. "Nếu bạn muốn cung cấp năng lượng cho tàu, hãy đặt than vào đó", "Kéo cần gạt màu xanh để di chuyển tàu.", "Nếu tàu bắt đầu hành động buồn cười, hãy gọi cho nhân viên bảo trì", v.v.


3

API = Từ điển các từ có sẵn và nghĩa của chúng (và ngữ pháp cần thiết để kết hợp chúng)

SDK = Hệ thống xử lý văn bản, dành cho trẻ 2 tuổi, tập viết ngay từ ý tưởng

Mặc dù bạn CÓ THỂ đi học và trở thành một bậc thầy về ngôn ngữ của bạn sau một vài năm, sử dụng SDK sẽ giúp bạn viết toàn bộ câu có ý nghĩa ngay lập tức (Tha thứ cho thực tế là, trong ví dụ này, khi còn bé, bạn thậm chí còn không nhận được để học bất kỳ ngôn ngữ nào khác ít nhất là học cách sử dụng SDK.)


2

Thế còn ... Nó giống như nếu bạn muốn cài đặt một hệ thống rạp hát tại nhà trong nhà của bạn. Sử dụng API cũng giống như lấy tất cả các dây, ốc vít, bit và miếng. Khả năng là vô tận (chỉ bị ràng buộc bởi những phần bạn nhận được), nhưng đôi khi quá sức. SDK giống như nhận một bộ. Bạn vẫn phải đặt nó lại với nhau, nhưng nó giống như lấy các mảnh và hướng dẫn cắt sẵn cho giá sách IKEA hơn là một hộp ốc vít.


0

Bạn sử dụng SDK để truy cập chức năng của thư viện và API để kiểm soát nó.


0

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

Một SDK có vẻ là một bộ hoàn chỉnh các API s cho phép bạn thực hiện hầu hết bất kỳ hành động mà bạn sẽ cần phải để tạo các ứng dụng. Ngoài ra một 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 API mặt khác chỉ là một loạt các phương pháp liên quan mà bạn 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.

Ví dụ về API: API Java, API Google Maps, API Flash Player.

Ví dụ về SDK: JDK, GWT, Flex SDK.

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.