Thư viện so với khung so với API? [đóng cửa]


33

Sự khác biệt giữa thư viện, khung và API là gì? Tất cả đều giống nhau đối với tôi. Tôi muốn nghe mọi người nghĩ về điều này.





2
@Jorg: Bạn nên gửi câu trả lời này. Vì nó đứng đó là thư rác biên giới và làm tắc nghẽn trang.

2
@Sergio - Jörg W Mittag có 1171 câu trả lời chu đáo và được đón nhận về SO (42 câu trả lời chu đáo và được đón nhận ở đây). Anh ấy không cố gắng để trở nên khó khăn. Anh ta đang cố gắng cải thiện P.SE bằng cách cho thấy câu hỏi này không cần thiết như thế nào (không đề cập đến việc không có câu trả lời nào ở đây đề cập đến đặc điểm phân biệt của một khung công tác).
Corbin ngày

Câu trả lời:


35

Thư viện là tập hợp các hàm / đối tượng phục vụ một mục đích cụ thể. bạn có thể sử dụng một thư viện trong một loạt các dự án.

Khung là một tập hợp các mẫu và thư viện để giúp xây dựng một ứng dụng.

API là giao diện để các chương trình khác tương tác với chương trình của bạn mà không cần truy cập trực tiếp.

Nói cách khác, hãy nghĩ về một thư viện như một phần bổ sung / phần của ứng dụng, khung là khung xương của ứng dụng và API như một phần hướng ra ngoài của ứng dụng nói trên.


7
Đó không phải là một định nghĩa rất tốt về một khung. Tôi thực sự sẽ không gọi bất kỳ khuôn khổ nào là "bộ sưu tập các mẫu và thư viện"
TheLQ

Một khung giống như một môi trường để xây dựng. Khác với đó là +1
Klaim

vâng, tôi đã có một chút mất mát cho những từ đó. bất cứ ai có đề nghị tốt hơn? khôn ngoan khác cảm thấy tự do để chỉnh sửa. Tôi đã tìm kiếm trên wikipedia, nơi gọi một khung công tác: "Các khung là một trường hợp đặc biệt của các thư viện phần mềm ở chỗ chúng là các bản tóm tắt có thể sử dụng lại được bọc trong một giao diện lập trình ứng dụng (API) được xác định rõ", dường như gây ra nhiều nhầm lẫn hơn trong bối cảnh của câu hỏi này hơn là giúp đỡ.
GSto

3
Thư viện là khi mã của bạn phụ trách (mã của bạn "sử dụng thư viện") và khung là khi nó được sạc (khung "chạy mã của bạn"). Chẳng hạn, một khung công tác ra lệnh mọi thứ phải xảy ra (Xoay, dịch vụ) trong khi với thư viện bạn quyết định thời điểm và cách sử dụng (chuyển đổi hình ảnh, mã hóa). API chỉ là một định nghĩa về một loạt các chức năng bạn có thể gọi và là một phần của cả thư viện và khung.
Martin Wickman

14

Câu trả lời tốt cho đến nay nhưng họ bỏ lỡ một điểm quan trọng - một khung sử dụng IoC . Mã của bạn được bao quanh bởi một khung. Nó sống bên trong nó. Ngược lại, mã của bạn chỉ sử dụng thư viện hoặc API. Nó sống bên ngoài nó. IoC là sự khác biệt.


Không nhất thiết phải đúng. Một khung có thể sử dụng IoC và ứng dụng của bạn có thể nằm trong một khung, nhưng nó không phải như vậy. Ngẫu nhiên, mục nhập Wikipedia trên Khung liệt kê đây là 'tính năng phân biệt' của khung và tham chiếu luận án này " dirkriehle.com/computer-science/research/dissertation/ tựa ", nhưng bản thân luận án không chứa các cụm từ 'đảo ngược 'hoặc' ioc 'và thực tế tuyên bố "Thông thường, các ứng dụng không chỉ sử dụng một khung, mà nhiều khung." (p26, ref p9)
Kirk Broadhurst

11
@Kirk Broadhurst - thực sự đã nghĩ đến Martin Fowler : "Inversion of Control là một phần quan trọng tạo nên một khung khác với thư viện (...) Một khung thể hiện một số thiết kế trừu tượng, với nhiều hành vi được xây dựng. Để sử dụng bạn cần chèn hành vi của mình vào các vị trí khác nhau trong khung bằng cách phân lớp hoặc cắm vào các lớp của riêng bạn. Mã của khung sẽ gọi mã của bạn ... "Nếu chúng tôi kết luận IoC không phải là một tính năng phân biệt, thì không có tính năng phân biệt - tất cả đều giống nhau và điều đó không vui.
Scant Roger

@ScantRoger, Khung sưu tập Java có sử dụng IoC không? Có vẻ không phải vậy .......
Pacerier

3

Một thư viện là một tập hợp các mã được xây dựng để thực hiện các tác vụ phổ biến. Mã thư viện có xu hướng tương đối ổn định và không có lỗi. Sử dụng các thư viện thích hợp có thể làm giảm số lượng mã cần viết. Nó sẽ có xu hướng giảm dòng mã cho một ứng dụng sẽ tăng tốc độ phân phối chức năng. Trong hầu hết các trường hợp, tốt hơn là sử dụng một thói quen thư viện hơn là viết mã của riêng bạn.

API (Giao diện lập trình ứng dụng) là giao diện cho một số chức năng cho phép ứng dụng truy cập chức năng có sẵn. Một API có thể được gọi là Giao diện. API tồn tại ở nhiều cấp độ bao gồm hệ thống, thư viện, khung, chương trình và ứng dụng. API nên được xác định trước khi mã triển khai chúng được triển khai.

API phải ổn định, mặc dù các phần của API có thể không được chấp nhận vì nhiều lý do. API càng được sử dụng rộng rãi thì càng khó thay đổi nó. Hầu hết nếu không phải tất cả API Java 1.0 vẫn có sẵn, mặc dù nhiều phương thức đã bị phản đối.

Framework là một tập hợp các API được thiết kế để làm cho việc xây dựng các ứng dụng trở nên đơn giản hơn. Các khung cung cấp việc triển khai cho các thành phần có thể tái sử dụng. Khung tốt có xu hướng được chuyên môn hóa trong ứng dụng của họ.

Khung công tác bộ sưu tập Java là một tập hợp các API cho các loại đối tượng khác nhau có thể được sử dụng để xử lý các bộ sưu tập. Nó cung cấp một hệ thống phân cấp API cho các bộ sưu tập khác nhau. Trong Khung công tác bộ sưu tập Java, giao diện Sắp xếp mở rộng giao diện Set, lần lượt mở rộng giao diện Bộ sưu tập. Các API này là các giao diện trừu tượng và các triển khai thực tế có các tên khác nhau. Khung sưu tập làm cho việc thực hiện các bộ sưu tập trở nên đơn giản và đơn giản hóa việc triển khai thay đổi trong quá trình phát triển.

Các khung công tác có thể được xây dựng từ các khung nhỏ hơn như được thấy trong Khung công tác Java Spring nhắm vào phát triển J2EE. Spring bao gồm hơn một chục khung công tác, nhiều khung có thể được sử dụng riêng hoặc thay thế bằng các khung khác.

Việc sử dụng các thư viện, API và khung thích hợp có thể đơn giản hóa việc phát triển. Các thành phần này quan tâm đến các vấn đề chung và cho phép nhóm phát triển tập trung vào các vấn đề cụ thể của ứng dụng.


2

Một khung là một bước lên từ thư viện. Nếu hộp công cụ của bạn là một thư viện thì hội thảo của bạn sẽ là một khung.

Wikipedia nói

API là một bản tóm tắt mô tả giao diện cho sự tương tác với một bộ các chức năng được sử dụng bởi các thành phần của hệ thống phần mềm

Điểm khác biệt quan trọng giữa API và giao diện người dùng là API cho phép các phần mềm / dịch vụ khác tương tác với giải pháp của bạn theo chương trình.

API có thể được xây dựng cho cả ứng dụng (thông qua dll hoặc plugin) hoặc trang web và dịch vụ (thông qua REST và dịch vụ web)


Tương tự tốt đẹp ...
sunwukung

1

API xác định cách sử dụng một cái gì đó khác về các đối tượng và phương thức có thể được sử dụng từ một nguồn. Ví dụ: tích hợp Twitter hoặc Facebook vào một trang web sử dụng API từ Twitter hoặc Facebook để đảm bảo dữ liệu phù hợp được cập nhật.

Các khung có xu hướng lớn hơn một chút theo nghĩa vì điều này gần như có thể hình thành ngôn ngữ của chính nó đôi khi. jQuery là một ví dụ về một khung công tác có cú pháp riêng và có trọng lượng hơn một chút về mặt nhận thức theo mã của tôi. Các khung cũng có thể là các nền tảng làm cho chúng giống với API theo một nghĩa nào đó, ví dụ như Win32API hoặc .Net Framework, mỗi phương thức có nhiều phương thức để xây dựng một ứng dụng để có thể có các API có API và API cũng được xem như là các Khung.

Các thư viện có xu hướng là các tệp nhị phân triển khai API hoặc Framework và vì vậy chúng là các bit mà bạn phải sử dụng API hoặc Framework trong một số trường hợp. Ít nhất đó là cách tôi nhìn thấy những điều khoản này và sự khác biệt giữa chúng.


1

Đi đến thư viện và bắt đầu đọc sách. Nếu bạn là ứng dụng thì bộ sưu tập sách là thư viện. Các kệ, tủ và các hợp chất chứa tất cả những thứ này tạo thành khung. Mọi thứ bạn tiếp xúc trong khi thực hiện nhiệm vụ đọc sách là API.


Đây là một câu trả lời tuyệt vời.
Magus

0

Thư viện là một tập hợp mã được sử dụng để đơn giản hóa các tác vụ phổ biến - nó có thể là các lớp, hàm hoặc bất cứ thứ gì cụ thể cho ngôn ngữ hoặc nền tảng của bạn. Một ví dụ điển hình có thể là một thư viện thao tác chuỗi cung cấp trợ giúp cho các tác vụ thông thường (xây dựng, chia tách, tìm kiếm hoặc sắp xếp chuỗi, v.v.).

API (giao diện lập trình ứng dụng) là một định nghĩa ('giao diện') về cách làm việc với ứng dụng, hệ thống hoặc công nghệ khác. Về cơ bản, nó xác định các hoạt động có sẵn để tương tác với hệ thống khác đó. API có thể là thư viện (có nghĩa là API được bọc trong thư viện hoặc tập hợp các lớp), nhưng điểm khác biệt là API luôn tham chiếu hệ thống bên ngoài - cho dù đó là cơ sở dữ liệu, dịch vụ web, ứng dụng khác hay hệ điều hành chinh no.

Khung là một khái niệm lớn hơn - thông thường sẽ chứa một số thư viện và API để thực hiện các tác vụ phổ biến. Nó tồn tại ở cấp độ khái niệm cao hơn - nó không chỉ là một bộ công cụ, mà còn là một bộ sưu tập các mẫu thiết kế, thực tiễn tốt nhất và phương pháp luận. Khung phần mềm là một phần mở rộng của một khung chung - ý nghĩa của nó bao gồm là một nền tảng mà từ đó mọi thứ được xây dựng, cung cấp hỗ trợ và cấu trúc, và đưa ra hướng dẫn và định nghĩa cho các yêu cầu.


0

Ứng dụng được phát triển bằng các thư viện dựa trên khung và giao tiếp thông qua API.

Nếu bạn xây dựng một ứng dụng nói ứng dụng xử lý ảnh trực tuyến,

  • Bạn có thể sử dụng một số thư viện xử lý hình ảnh viết sẵn.
  • trên bất kỳ khung nào bạn biết sẽ hướng dẫn bạn xây dựng ứng dụng.
  • Bạn sẽ cung cấp cho ứng dụng một số cách để tương tác với thế giới bên ngoài .. đó sẽ là API ứng dụng của bạn với phần còn lại của thế giới.

Khi có cuộc gọi đến ứng dụng của bạn

  • nó sẽ được xử lý theo cách bạn thiết kế với hướng dẫn của khung
  • xử lý cuộc gọi được thực hiện bởi thư viện
  • các chức năng này sẽ được truy cập thông qua API của bạn từ thế giới bên ngoài

cho người gọi

lý do tại sao những điều này tồn tại:

  • thư viện: cứu bạn khỏi phát minh lại bánh xe
  • framework: giúp bạn tránh khỏi các bẫy bất ngờ của thiết kế và xử lý hệ thống trừ khi chính khung đó có lỗi
  • API: đảm bảo tính bảo mật của ứng dụng bằng cách can thiệp vào lõi từ truy cập trong thế giới thực
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.