ความแตกต่างระหว่าง API และ SDK


187

ฉันพยายามอธิบายถึงความแตกต่างระหว่าง API และ SDK สำหรับผู้ที่ไม่ใช่นักพัฒนา ฉันต้องอธิบายว่าเพราะเหตุใดผู้จำหน่ายซอฟต์แวร์ลายนิ้วมือเพื่อการค้าจึงไม่น่าจะให้ SDK แม้ว่าพวกเขาจะได้ใช้อย่างแน่นอน

ทั้งผู้จำหน่ายอุปกรณ์และผู้จำหน่ายซอฟต์แวร์สามารถและควรเปิดเผย API ที่กำหนดไว้อย่างดี API นี้อนุญาตให้โปรแกรมซอฟต์แวร์อื่น ๆ (เขียนถึง) ทำงานร่วมกับส่วนประกอบซอฟต์แวร์หรืออุปกรณ์ฮาร์ดแวร์ของผู้ขายได้

หากใครบางคนมีแนวคิดเพิ่มเติมเพื่ออธิบายสิ่งนี้อย่างชัดเจนฉันจะขอบคุณคำแนะนำอย่างมาก ผมอยากจะเน้นว่าเป้าหมายคือการอธิบายแนวความคิดไปยังโปรแกรมเมอร์ไม่ใช่ที่ไม่ทราบศัพท์แสงนักพัฒนา

โดยเฉพาะในบริบทของเซ็นเซอร์ลายนิ้วมือกับซอฟต์แวร์เพื่อทำการลงทะเบียน / ตรวจสอบนี่คือวิธีที่ฉันพยายามอธิบาย:

ถ้าฉันเป็นผู้ผลิตอุปกรณ์ / เซ็นเซอร์ลายนิ้วมือและไม่ได้อยู่ในธุรกิจการเขียนซอฟต์แวร์วิธีที่ฉันสามารถทำการตลาดผลิตภัณฑ์ของฉันได้ดีกว่าคือ:

  1. ตรวจสอบให้แน่ใจว่าไดรเวอร์อุปกรณ์ของฉันสามารถติดตั้งได้กับระบบปฏิบัติการที่หลากหลาย
  2. กำหนดและจัดทำ API สำหรับนักพัฒนาซอฟต์แวร์เพื่อเขียนโปรแกรม (เช่นสำหรับการลงทะเบียนการตรวจสอบ) เพื่อ "พูดคุย" หรือใช้อุปกรณ์ของฉัน
  3. พัฒนาและจัดหา SDK (ขั้นตอนเดียวนอกเหนือจาก API) เพื่อให้ง่ายขึ้นและเร็วขึ้นสำหรับนักพัฒนาซอฟต์แวร์ในการเขียนโปรแกรมที่ทำงานกับอุปกรณ์ของฉัน SDK อาจมีไลบรารีรหัสผู้ช่วยแอปพลิเคชันอ้างอิงเอกสารประกอบ ฯลฯ

คำตอบ:


225

เค้กชิ้น:

  • API ที่เป็นอินเตอร์เฟซ มันเหมือนกับข้อกำหนดของระบบโทรศัพท์หรือสายไฟในบ้านของคุณ อะไรก็ได้ * สามารถใช้งานได้ตราบเท่าที่รู้วิธีการเชื่อมต่อ คุณสามารถซื้อซอฟต์แวร์นอกชั้นวางเพื่อใช้ API เฉพาะเช่นเดียวกับที่คุณสามารถซื้ออุปกรณ์โทรศัพท์ชั้นวางหรืออุปกรณ์ที่เสียบเข้ากับสายไฟ AC ในบ้านของคุณ
  • SDK ที่เป็นการดำเนินการขับรถ มันเหมือนกับชุดอุปกรณ์ที่ช่วยให้คุณสร้างสิ่งที่กำหนดเองเพื่อเชื่อมต่อกับระบบโทรศัพท์หรือสายไฟ

* ทุกสิ่งสามารถใช้ API API บางตัวมีข้อกำหนดด้านความปลอดภัยที่ต้องใช้คีย์ใบอนุญาตการตรวจสอบสิทธิ์ ฯลฯ ซึ่งอาจห้ามการใช้งาน API อย่างสมบูรณ์ในบางกรณี ซอฟต์แวร์ใด ๆ ที่แสดงข้อมูลรับรองที่ถูกต้อง (ถ้าจำเป็น) สามารถใช้ API ได้

** ในทางเทคนิคหาก API มีเอกสารครบถ้วนคุณไม่จำเป็นต้องมี SDK เพื่อสร้างซอฟต์แวร์ของคุณเองเพื่อใช้ API แต่การมี SDK โดยทั่วไปจะทำให้กระบวนการง่ายขึ้นมาก


2
บางความคิดอื่น ๆ ที่ฉันมีการอธิบายนี้เป็นตัวอย่าง iPhone (ที่เป็นกรรมสิทธิ์ของรหัส แต่ดีที่กำหนด API), แจ็คโทรศัพท์หรือตัวอย่างเช่นพอร์ต USB เพื่ออธิบายสิ่งที่อินเตอร์เฟซซอฟต์แวร์ที่เป็นที่มีความง่ายต่อการเข้าใจสายตาคล้ายคลึงฮาร์ดแวร์
Sliceoftime

17
ดำเนินการตามคำอธิบายที่ดีต่อไปเช่น API อาจเป็น http / REST API ในขณะที่ SDK อาจเป็นไลบรารีที่ด้านบนของ HttpClient เพื่อให้สามารถโต้ตอบกับบริการเว็บ REST ได้เร็วและง่ายขึ้น
frandevel

4
ยิ่งไปกว่านั้น API คืออินเทอร์เฟซ ในขณะที่ SDK เป็นเลเยอร์ที่เป็นนามธรรมบนอินเทอร์เฟซ
tvanc

1
SDK ไม่จำเป็นต้องเป็นเลเยอร์ที่เป็นนามธรรมบนอินเทอร์เฟซ SDK เป็นการใช้งานส่วนต่อประสาน (ถ้ามีชั้น abstraction อีกคำถามคือทำไมมันไม่ได้ระบุว่าเป็นส่วนหนึ่งของอินเตอร์เฟซของตัวเอง)
เจสัน S

ฉันเห็นด้วยกับคำจำกัดความนี้ แต่ในเวลาเดียวกันสงสัยว่าทำไม iOS และ Android ใช้คำว่า API สำหรับเช่นห้องสมุดบลูทู ธ (iOS Core Bluetooth API, Android Bluetooth API)?
tamberg

59

APIเปรียบเหมือนหน่วยการสร้างของเกมปริศนาที่เด็ก ๆ เล่นเพื่อเข้าร่วมบล็อกในรูปทรงที่แตกต่างกันและสร้างสิ่งที่พวกเขาคิด

ในทางกลับกันSDKเป็นเวิร์กช็อปที่เหมาะสมที่มีเครื่องมือการพัฒนาทั้งหมดที่มีอยู่แทนที่จะเป็นแบบบล็อกสำเร็จรูป ในเวิร์กช็อปคุณมีเครื่องมือจริงและคุณไม่ได้ จำกัด อยู่ที่บล็อกและสามารถสร้างบล็อกของคุณเองหรือสร้างบางอย่างโดยไม่ต้องเริ่มบล็อกก็ได้

การเข้ารหัสที่ไม่มี SDK หรือ APIนั้นเหมือนกับการทำทุกอย่างตั้งแต่เริ่มต้นโดยไม่มีเวิร์กช็อปคุณต้องสร้างเครื่องมือของคุณเอง


คุณบอกว่า SDK ไม่มีแบบบล็อกสำเร็จรูป แต่ JAVA SDK มาพร้อมกับโครงสร้างข้อมูลเช่น ArrayList หรือ HashMap ... ?
Koray Tugay

1
ใช่คุณสามารถพิจารณาว่าเป็นแบบเอกสารสำเร็จรูป แต่ในทางกลับกัน Java จัดให้เป็นเครื่องมือที่ไม่ใช่แบบเอกสารสำเร็จรูป
Abdul Rehman

1
ฉันเจอคำถามนี้เมื่อฉันพยายามอ่านและทำความเข้าใจกับเอกสารของ Facebook: developers.facebook.com/docs/javascriptสิ่งหนึ่งที่ทำให้ฉันสับสนก็คือ Facebook เรียกว่า javascript SDK ซึ่งในความคิดของฉันนั้นเหมือน API เนื่องจากมันไม่ได้มีเครื่องมือที่จับต้องได้ แต่มีเพียงห้องสมุดที่นักพัฒนาสามารถใช้งานได้สิ่งนี้ไม่ควรเรียกว่า API แทน SDK?
shenkwen

คำอธิบาย SDK ไม่ได้ผล มากกว่าnot limited to blocks, or can create something without any blocks to begin withนั้นเช่นเดียวกับ SDK จะช่วยให้คุณสามารถสร้างองค์ประกอบของบล็อก API ได้ดียิ่งขึ้น SDK สร้างขึ้นบน API
Don Cheadle

26

สมมติว่า บริษัท C เสนอผลิตภัณฑ์ P และ P ที่เกี่ยวข้องกับซอฟต์แวร์ในบางวิธี จากนั้น C สามารถให้บริการห้องสมุด / ชุดห้องสมุดแก่ผู้พัฒนาซอฟต์แวร์ที่ขับเคลื่อนระบบซอฟต์แวร์ของ P

ไลบรารี่ / ไลบรารีนั้นเป็นSDK มันเป็นส่วนหนึ่งของระบบของ P. มันเป็นชุดสำหรับนักพัฒนาซอฟต์แวร์ที่จะใช้เพื่อแก้ไขกำหนดค่าแก้ไขปรับปรุง ฯลฯ ชิ้นส่วนซอฟต์แวร์ของ P

หากซีต้องการที่จะมีฟังก์ชันการทำงานของ P กับ บริษัท อื่น ๆ / ระบบก็ไม่ได้กับAPI

นี่เป็นส่วนต่อประสานกับ P. A สำหรับวิธีการที่ระบบภายนอกจะโต้ตอบกับ P

หากคุณคิดในแง่ของการใช้งานพวกเขาจะดูคล้ายกันมาก โดยเฉพาะอย่างยิ่งในตอนนี้ที่อินเทอร์เน็ตกลายเป็นเหมือนระบบปฏิบัติการขนาดใหญ่ที่กระจายตัวอยู่

แม้ว่าโดยทั่วไปแล้วพวกเขาจะมีความแตกต่าง

คุณสร้างบางสิ่งด้วย SDK และคุณใช้หรือใช้บางสิ่งบางอย่างกับ API


22
คุณควรแก้ไขคำตอบของคุณลงไปที่บรรทัดสุดท้ายและข้าม blah-de-blah ทั้งหมด
mhenry1384

หาก C มีชุดของไลบรารีที่ทำให้ซอฟต์แวร์ของ P อยู่ในนั้นไลบรารีเหล่านั้นประกอบขึ้นเป็น API ไม่ใช่ SDK (ยกเว้นว่าเป็น SDK ขั้นต่ำสุดที่ไม่เกี่ยวข้องกับ API) SDK จะรวม API เหล่านี้รวมถึงสินค้าทั้งหมดที่นักพัฒนาต้องการนอกเหนือจาก API แบบดิบดังนั้นจึงเป็น "ชุด" ดังนั้นคุณถูกต้องเกี่ยวกับการสร้างบางสิ่งเมื่อเทียบกับการใช้ / การบริโภค (+ / การควบคุม / การโต้ตอบ) แต่ความแตกต่างนั้นสับสน
Josh Sutterfield

12

Application Programming Interfaceเป็นชุดของรูทีน / โครงสร้างข้อมูล / คลาสที่ระบุวิธีการโต้ตอบกับแพลตฟอร์ม / ซอฟต์แวร์เป้าหมายเช่น OS X, Android, แอปพลิเคชันการจัดการโครงการซอฟต์แวร์เสมือนจริงเป็นต้น

ในขณะที่ชุดพัฒนาซอฟต์แวร์เป็นตัวห่อหุ้ม API / s ที่ทำให้งานง่ายขึ้นสำหรับนักพัฒนา

ตัวอย่างเช่น Android SDK ช่วยให้นักพัฒนาสามารถโต้ตอบกับแพลตฟอร์ม Android โดยรวมขณะที่แพลตฟอร์มนั้นสร้างขึ้นโดยส่วนประกอบซอฟต์แวร์คอมโพสิตที่สื่อสารผ่าน API

นอกจากนี้บางครั้ง SDK ถูกสร้างขึ้นเพื่ออำนวยความสะดวกในการพัฒนาในภาษาการเขียนโปรแกรมเฉพาะ ตัวอย่างเช่นโปรแกรมควบคุมเว็บ Selenium (สร้างขึ้นใน Java) ให้ APIs เพื่อขับเคลื่อนเบราว์เซอร์ใด ๆ ในขณะที่capybaraสามารถพิจารณาเป็น SDK ที่อำนวยความสะดวกให้นักพัฒนา Ruby ในการใช้โปรแกรมควบคุมเว็บ Selenium อย่างไรก็ตามโปรแกรมควบคุมเว็บ Selenium นั้นเป็น SDK ด้วยเช่นกันเนื่องจากมันเป็นการรวมการทำงานร่วมกับไดรเวอร์เบราว์เซอร์ต่าง ๆ ไว้ในแพ็คเกจเดียว


แค่คิดว่ามันจะดีที่จะยกตัวอย่าง
user3137634

9

ฉันไม่แน่ใจว่ามีคำจำกัดความที่เป็นทางการของคำสองคำนี้ ฉันเข้าใจ API เป็นชุดของไลบรารีที่ตั้งโปรแกรมได้และเอกสารสนับสนุนเช่นส่วนหัวหรือไฟล์ IDL SDK มักจะมี API แต่มักจะเพิ่มคอมไพเลอร์เครื่องมือและตัวอย่างในการผสม


1
ต้องระบุ API ทางเทคนิค แต่ไม่จำเป็นต้องเปิดเผยต่อสาธารณะ แต่อาจเป็นความลับ
344 Jason S

8

API เป็นข้อกำหนดเกี่ยวกับวิธีการทำบางสิ่งบางอย่างอินเทอร์เฟซเช่น "รางรถไฟห่างกันสี่ฟุตและแถบโลหะกว้าง 1 นิ้ว" ตอนนี้คุณมี API แล้วคุณสามารถสร้างรถไฟที่จะพอดีกับทางรถไฟเหล่านั้น ติดตามถ้าคุณต้องการที่จะไปทุกที่ API เป็นเพียงข้อมูลเกี่ยวกับวิธีการสร้างรหัสของคุณ แต่ก็ไม่ได้ทำอะไรเลย

SDK เป็นชุดเครื่องมือจริงที่กังวลเกี่ยวกับข้อกำหนดบางอย่างอยู่แล้ว "นี่คือรถไฟถ่านหินและนักซ่อมบำรุงใช้มันเพื่อไปจากที่หนึ่งไปยังอีกที่หนึ่ง" ด้วย SDK คุณไม่ต้องกังวลกับเรื่องเฉพาะ SDK เป็นรหัสจริงมันสามารถใช้เองเพื่อทำอะไรบางอย่าง แต่แน่นอนว่ารถไฟจะไม่เริ่มขึ้นเองคุณยังต้องมีตัวนำเพื่อควบคุมรถไฟ

SDK ยังมี API ของตนเอง "ถ้าคุณต้องการเพิ่มพลังให้รถไฟใส่ถ่านหินลงไปในนั้น", "ดึงคันโยกสีน้ำเงินเพื่อเคลื่อนขบวนรถไฟ", "ถ้ารถไฟเริ่มแสดงตลกให้โทรหาช่างซ่อมบำรุง" เป็นต้น


3

API = พจนานุกรมคำศัพท์ที่มีอยู่และความหมาย (และไวยากรณ์ที่จำเป็นในการรวมเข้าด้วยกัน)

SDK = ระบบประมวลผลคำ ... สำหรับเด็กทารกอายุ 2 ปี ... ที่เขียนจากแนวคิด

แม้ว่าคุณจะสามารถไปโรงเรียนและกลายเป็นอาจารย์ในภาษาของคุณหลังจากไม่กี่ปีที่ผ่านมาการใช้ SDK จะช่วยให้คุณเขียนประโยคที่มีความหมายทั้งหมดในเวลาไม่นาน (การให้อภัยความจริงที่ว่าในตัวอย่างนี้เป็นเด็กที่คุณยังไม่ได้ เพื่อเรียนรู้ภาษาอื่นเป็นเวลาอย่างน้อยเพื่อเรียนรู้การใช้ SDK)


2

แล้ว ... มันเหมือนกับว่าคุณต้องการติดตั้งระบบโฮมเธียเตอร์ในบ้านของคุณ การใช้ API นั้นเหมือนกับการรับสายสกรูบิตและชิ้นส่วนทั้งหมด ความเป็นไปได้ไม่มีที่สิ้นสุด (จำกัด โดยชิ้นส่วนที่คุณได้รับ) แต่บางครั้งก็ท่วมท้น SDK เปรียบเสมือนการรับชุดอุปกรณ์ คุณยังคงต้องรวมมันเข้าด้วยกัน แต่มันก็เหมือนกับการได้รับชิ้นก่อนตัดและคำแนะนำสำหรับชั้นวางหนังสือของ IKEA มากกว่าสกรูกล่อง


0

คุณใช้ SDK เพื่อเข้าถึงฟังก์ชันการทำงานของไลบรารีและ API เพื่อควบคุม


0

API = Application Programming Interface SDK = ชุดพัฒนาซอฟต์แวร์

SDKดูเหมือนว่าจะเป็นชุดที่สมบูรณ์ของAPI s ที่ช่วยให้คุณสามารถดำเนินการดำเนินการใด ๆ ส่วนใหญ่ที่คุณจะต้องสำหรับการสร้างโปรแกรม นอกจากนี้SDKอาจรวมถึงเครื่องมืออื่น ๆ สำหรับการพัฒนาสำหรับแพลตฟอร์ม / รายการที่ใช้

APIบนมืออื่น ๆ เป็นเพียงชุดของวิธีการที่เกี่ยวข้องที่อาจจะดีสำหรับวัตถุประสงค์เฉพาะที่

ตัวอย่างเช่น JDK (Java Development Kit) มี API รวมถึงคอมไพเลอร์รันไทม์และเครื่องมือเบ็ดเตล็ดอื่น ๆ Java API เป็นเพียงไลบรารีทั้งหมดที่ประกอบขึ้นเป็นภาษาหลักที่คุณสามารถใช้งานได้ทันที

ตัวอย่างของ API: Java API, Google Maps API, Flash Player API

ตัวอย่างของ SDK: JDK, GWT, Flex SDK

โดยการใช้ไซต์ของเรา หมายความว่าคุณได้อ่านและทำความเข้าใจนโยบายคุกกี้และนโยบายความเป็นส่วนตัวของเราแล้ว
Licensed under cc by-sa 3.0 with attribution required.