API และ SDK แตกต่างกันอย่างไร


174

ฉันกำลังดู API และ SDK ต่างๆเมื่อฉันรู้ว่าฉันไม่สามารถบอกความแตกต่างระหว่างสิ่งที่เรียกว่าAPIและสิ่งที่เรียกว่าSDKได้

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

ดังนั้นความแตกต่างทางความหมายระหว่าง SDK และ API คืออะไร


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

ดูเพิ่มเติมที่ " Library vs. framework vs API?
gnat

คำตอบ:


175

ฉันคิดว่ามันค่อนข้างตรงตามบรรทัดของ "SDK ทั้งหมดคือ / มี API แต่ไม่ใช่ API ทั้งหมดเป็น SDK"

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

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

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


7
ฉันต้องการเพิ่มว่า SDK เป็นเพียงตัวอย่างของวิธีที่คุณโต้ตอบกับ API ดังกล่าว
มัฟฟินแมน

10
ฉันคิดว่าคุณอาจคว่ำนิคนั้น SDK เป็นชุดของสิ่งต่าง ๆ ที่มี (เหนือสิ่งอื่นใด) ของ API เพื่อโต้ตอบกับไลบรารี (ไม่ใช่ไลบรารี แต่เป็นส่วนต่อประสานกับไลบรารีที่ coder ใช้ไลบรารีจะใช้)
Danny Staple

7
SDK สามารถรวม API เครื่องมือเอกสารตัวอย่างและทุกอย่างอื่นที่จำเป็น
gregmac

4
@gregmac ฉันไม่ได้บอกความจริงเหรอ?

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

85
  • API = อินเตอร์เฟสการเขียนโปรแกรมประยุกต์
  • SDK = ชุดพัฒนาซอฟต์แวร์

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

ตัวอย่างของ API:

ตัวอย่างของ SDK:


3
+10 สำหรับ "คุณอาจใช้ API โดยไม่ต้องมีส่วนประกอบพื้นฐาน" Btw, ลิงค์ที่สองลง .......
Pacerier

24

API →เอกสารที่มีอินเตอร์เฟส (ณ เวลาใดเวลาหนึ่งและสำหรับผู้ชมบางกลุ่ม) เอกสารอาจไม่สมบูรณ์และ / หรือไม่สามารถใช้ได้กับบุคคลทั่วไปและอาจเป็นไปตามวัตถุประสงค์ สำหรับบุคคลที่สามเพื่อใช้งาน)

SDK →เอกสารอินเทอร์เฟซ (+ ตัวอย่าง & เครื่องมือ)


4
ในที่สุดคนที่กล่าวถึงเอกสาร!
gregmac

4
API ของบางรายการนั้นไม่มีเอกสารประกอบ - บางครั้งคุณต้องตรวจสอบ / สะท้อนส่วนต่อประสาน
JBRWilkinson

ไม่ใช่ "ตัวอย่าง" ส่วนหนึ่งของ API ใช่ไหม
Pacerier

1
@Pierier ... ไม่อย่างนั้น ตัวอย่างอาจเป็นส่วนหนึ่งของเอกสาร API แต่อินเทอร์เฟซที่แท้จริงอาจเป็น "ไม่มีเอกสาร" (เช่นเอกสารที่เกี่ยวข้องกับเอกสารจะถูกเก็บเป็นความลับสำหรับโลกภายนอก: คิดว่า ... idk, microsoft ) ในขณะที่ยังเป็น API มันเป็นเพียงส่วนต่อประสาน ฟังก์ชั่นคลาสการโทรบางทีโปรโตคอลอาจเป็นรูปแบบไฟล์ แต่ไม่มีอะไรเพิ่มเติม
ZJR

17

"SDK" เป็นส่วนรวมมากกว่า "API"

โดยทั่วไปแล้วคุณจะพบ SDK เดียวที่ครอบคลุมทั้งแพลตฟอร์ม ยกตัวอย่างเช่นมี MacOS X SDK หนึ่งชุดและ iOS SDK หนึ่งชุดและแต่ละชุดจะมี API สำหรับฟังก์ชั่นการใช้งานที่หลากหลาย

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

ทั้งสองคำนั้นแม่นยำมากโดยไม่มีบริบท


11

API คืออะไร

API เป็นอินเทอร์เฟซที่อนุญาตให้โปรแกรมซอฟต์แวร์โต้ตอบกัน กำหนดชุดของกฎที่ควรตามด้วยโปรแกรมเพื่อสื่อสารกับแต่ละอื่น ๆ โดยทั่วไปแล้ว API จะระบุวิธีการกำหนดกิจวัตรโครงสร้างข้อมูล ฯลฯ เพื่อให้แอพพลิเคชั่นสองตัวสามารถสื่อสารกันได้ API แตกต่างกันไปตามหน้าที่การใช้งานที่มีให้ มี API ทั่วไปที่จัดเตรียมฟังก์ชันการทำงานของไลบรารีของภาษาการเขียนโปรแกรมเช่น Java API นอกจากนี้ยังมี API ที่ให้ฟังก์ชันการทำงานเฉพาะเช่น Google Maps API นอกจากนี้ยังมี API ที่ขึ้นกับภาษาซึ่งสามารถใช้โดยภาษาการเขียนโปรแกรมเฉพาะเท่านั้น นอกจากนี้ยังมี API ภาษาอิสระที่สามารถใช้กับภาษาการเขียนโปรแกรมหลายภาษา API จะต้องมีการใช้งานอย่างระมัดระวังโดยเปิดเผยเฉพาะฟังก์ชั่นหรือข้อมูลที่ต้องการจากภายนอกในขณะที่ทำให้ส่วนอื่น ๆ ของแอปพลิเคชันไม่สามารถเข้าถึงได้ การใช้งาน API ได้รับความนิยมอย่างมากในอินเทอร์เน็ต มันเป็นเรื่องธรรมดามากที่จะอนุญาตการใช้งานบางอย่างและข้อมูลผ่าน API ไปยังด้านนอกบนเว็บ ฟังก์ชั่นนี้สามารถรวมกันเพื่อเสนอการทำงานที่ปรับปรุงให้กับผู้ใช้

SDK คืออะไร

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

API และ SDK แตกต่างกันอย่างไร?

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


7

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

ฉันหมดคำย่อ


8
ด่วนรับ TLAs เพิ่มเติมด้วยตัวคุณเอง!
Mason Wheeler

4
ฉันพร้อมแล้วสำหรับ EIEIO
JeffO

5

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


1

สองเซ็นต์ของฉัน: ฉันเชื่อว่าคำว่า API มักจะใช้ไม่ถูกต้อง

API คืออินเทอร์เฟซการเขียนโปรแกรมประยุกต์

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

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

และ SDK เป็นไลบรารีชนิดหนึ่งดังนั้นจึงเป็นความสับสน


1
ฉันเห็นด้วย. ฉันอาจหยุดพูดสั้น ๆ ว่ามัน "ไม่ถูกต้อง" เรือลำนี้แล่นได้และใช้ "API" ได้เปลี่ยนไปแล้ว แต่ฉันเห็นด้วยว่า "ห้องสมุด" มักจะเป็นคำที่ดีกว่าสำหรับสิ่งที่ผู้คนเรียกว่า "API"
Harry Wood

0

จำนวนคำตอบอื่น ๆ อธิบายว่า SDK เป็นเครื่องมือแต่ไม่มีของพวกเขาโดยตรงออกมาและบอกว่า API ที่เป็นสเปค

API สำหรับ compoonent X คือข้อมูลทั้งหมดที่คุณต้องการเพื่อเขียนส่วนประกอบอื่น ๆ ที่จะโต้ตอบกับ X SDK สำหรับคอมโพเนนต์ X อาจมีรูทีนไลบรารีที่ทำให้คุณเขียนส่วนประกอบนั้นได้ง่ายขึ้น แต่ไลบรารีไม่ได้ API: มันเป็นเพียงศูนย์รวมของ API


นี่เป็นเพียงความคิดเห็นของคุณหรือคุณสามารถสำรองข้อมูลอย่างใด
ริ้น

"API อธิบายและกำหนดพฤติกรรมที่คาดหวังในขณะที่ห้องสมุดเป็นการดำเนินการตามกฎชุดนี้" en.wikipedia.org/wiki/…
โซโลมอนช้า

ต่อการอ่านของฉันนี้ไม่เกี่ยวข้องกับจุดที่คุณพยายามทำ: "ว่า API เป็นสเปค"
gnat

-3

ฉันต้องการจะเปรียบเทียบวิธีนี้

หากคุณเป็นผู้พัฒนาโดยใช้เครื่องมือของ Microsoft:

API = Microsoft.Net Framework Vs SDK = Visual Studio

หากคุณเป็นนักพัฒนาโดยใช้ Java:

API = Java RunTime Vs SDK = เครื่องมือใด ๆ ที่จะให้ Development Kit (JDK)

ฉันเดาว่า SDK จำเป็นต้องพึ่งพา API ที่เกี่ยวข้อง - ไม่มี SDK หากไม่มี API


ฉันคิดว่าสิ่งที่คุณกำลังพูดถึงในแง่ของ Visual Studio นั้นเป็น IDE ซึ่งสามารถให้การเข้าถึง SDK และ / หรือ API อย่างน้อยหนึ่งรายการ
KeithS

1
Visual Studio ไม่ใช่ SDK แต่บางรุ่นมี Windows หรือ. NET SDK เนื่องจากคุณมีแนวโน้มที่จะพัฒนาสำหรับพวกเขาโดยใช้ VS
JBRWilkinson

-3

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


-4

เมื่อแอพพลิเคชั่นได้รับการพัฒนาและปรับปรุงโดยการเชื่อมต่อกับแอพพลิเคชั่นอื่นจำเป็นต้องอนุญาตให้แอปพลิเคชั่นอื่น (ตรรกะ) เชื่อมต่อกับแกนตรรกะ - ซึ่งทำได้ผ่านชุด API ที่กำหนด SDK ใช้ในการสร้าง / สร้างรหัสที่ใช้ API เพื่อโต้ตอบกับแอปพลิเคชันอื่น ๆ


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