ความแตกต่างระหว่าง 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.