API คืออะไร

API คืออะไร

ลา คำย่อ API คุณจะเห็นคำเหล่านี้มากกว่าหนึ่งครั้งและสองครั้งเมื่อคุณอ่านบทความเกี่ยวกับซอฟต์แวร์. แต่ไม่ใช่ทุกคนที่รู้ว่าจริงๆแล้ว API คืออะไร นั่นคือเหตุผลที่เราชี้แจงในบทความนี้ สิ่งแรกที่ต้องพูดคือเป็นคำย่อของ Application Programming Interface นั่นคือในภาษาสเปน Application Programming Interface และหลายครั้งก็สร้างความสับสนแม้กระทั่งในหมู่ผู้ที่รู้เรื่องการเขียนโปรแกรม

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

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

API คืออะไร?

Una API เป็นเครื่องมือที่นักพัฒนาจัดเตรียมไว้ให้ เพื่อให้พวกเขามีชุดของฟังก์ชันรูทีนย่อยและโพรซีเดอร์หรือวิธีการสำหรับ OOP ที่สามารถใช้ผ่านไลบรารีที่มีอยู่ ข้อเสนอของ API มีตั้งแต่ฟังก์ชันในการสร้างแอปอย่างง่ายฟังก์ชันที่เกี่ยวข้องกับ AI การสร้างกราฟิกการจัดการทรัพยากรฮาร์ดแวร์และอื่น ๆ

ตัวอย่างเช่นคุณแน่ใจว่า API ที่รู้จักกันดีเช่นที่ Linux นำเสนอผ่านไลบรารี glibc หรือกราฟิกเช่น OpenGL และ Vulkan หรืออื่น ๆ เช่น OpenCL สำหรับการประมวลผลที่แตกต่างกัน OpenXR สำหรับความเป็นจริงเสมือนและความเป็นจริงที่เพิ่มขึ้นเป็นต้น ระบบปฏิบัติการและซอฟต์แวร์อื่น ๆ ยังรวม API ของตัวเองไว้ด้วยเพื่อให้โปรแกรมเมอร์คนอื่น ๆ สามารถสร้างส่วนเสริมปลั๊กอินหรือโมดูลสำหรับระบบนั้นเป็นต้น

ตัวอย่างกับ Arduino

หากคุณมีป้าย Arduino และคุณมักใช้ Arduino IDE หรือสภาพแวดล้อมการพัฒนาอื่น ๆ สำหรับ Arduino คุณจะรู้ว่าเมื่อคุณสร้างโค้ดคุณจะใช้ตัวเลือกต่างๆมากมายเพื่อสั่งให้ไมโครคอนโทรลเลอร์ของคุณทำชุดการกระทำต่างๆ ตัวอย่างเช่น pinMode () เป็นฟังก์ชันทั่วไปในการกำหนดค่าขา Arduino ใช่ไหม?

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

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

หากคุณไม่มี API นี้คุณจะไม่สามารถสร้างโปรแกรมเหล่านี้สำหรับ Arduino ได้ด้วยวิธีง่ายๆเช่นนี้เนื่องจากเราควรพยายามทำให้เป็นรหัสประกอบสำหรับไมโครคอนโทรลเลอร์ ATMega328P นั่นคือ ASM สำหรับสถาปัตยกรรม AVR. และนั่นจะซับซ้อนกว่านั้นมากเนื่องจากคุณจะต้องใช้คำแนะนำที่มีอยู่ใน ISA นี้โดยตรง หากเป็นเช่นนั้นคุณไม่เพียง แต่จะต้องรู้เนื้อหาของ ISA นั้นอย่างเพียงพอ แต่ยังรวมถึงด้านอื่น ๆ เช่นจำนวนบันทึกเป็นต้น นั่นคือคุณควรมีความรู้ระดับต่ำเกี่ยวกับฮาร์ดแวร์ที่คุณกำลังทำงานอยู่

ปอ ตัวอย่างเช่นรหัส ASM สิ่งที่คุณควรสร้างเพื่อให้ LED กะพริบเป็นวงคือ:

<br data-mce-bogus="1">

.ORG 0x0000
; the next instruction has to be written to
; address 0x0000
rjmp START
; the reset vector: jump to "main"
START:
ldi r16, low(RAMEND) ; set up the stack
out SPL, r16
ldi r16, high(RAMEND)
out SPH, r16
ldi r16, 0xFF
; load register 16 with 0xFF (all bits 1)
out DDRB, r16
; write the value in r16 (0xFF) to Data
; Direction Register B
LOOP:
sbi PortB, 5
; switch off the LED
rcall delay_05
cbi PortB, 5
; wait for half a second
; switch it on
rcall delay_05 ; wait for half a secon
rjmp LOOP ; jump to loop
DELAY_05:
; the subroutine:
ldi r16, 31
; load r16 with 31
OUTER_LOOP:
; outer loop label
ldi r24, low(1021) ; load registers r24:r25 with 1021, our new
; init value
ldi r25, high(1021) ; the loop label
DELAY_LOOP:
; "add immediate to word": r24:r25 are
; incremented
adiw r24, 1
; if no overflow ("branch if not equal"), go
; back to "delay_loop"
brne DELAY_LOOP
dec r16
; decrement r16
brne OUTER_LOOP
ret
; and loop if outer loop not finished
; return from subroutine

ในขณะที่ ด้วย API สิ่งอำนวยความสะดวกทั้งหมด การเขียนโค้ดเทียบเท่าต่อไปนี้ในระดับสูง (สั้นและใช้งานง่ายกว่ามาก):

<br data-mce-bogus="1">

int ledPin = 13; 		// LED que se encuentra en el pin 13
   void setup(){ 
   pinMode(ledPin, OUTPUT);	// El p1n 13 será una salida digital 
} 
void loop(){ 
   digitalWrite(ledPin, HIGH);	// Enciende el LED
   delay(1000); 				// Pausa de 1 segundo 
   digitalWrite(ledPin, LOW); 	// Apaga el LED 
   delay(1000);				// Pausa de 1 segundo 

ความแตกต่างกับ ABI

API เทียบกับ Linux ABI

ABI เป็นคำที่ไม่ค่อยมีใครรู้จักมันคือ Application Binary Interface หรือในภาษาอังกฤษ Application Binary Interface. ในกรณีนี้เป็นอินเทอร์เฟซระหว่างโมดูลของโปรแกรมโดยทั่วไประหว่างไลบรารีหรือระบบปฏิบัติการภาษาเครื่องสำหรับสถาปัตยกรรมที่คุณอยู่: SPARC, AMD64, ARM, PPC, RISC-V เป็นต้น

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

ความแตกต่างกับ Framework

Un กรอบหรือกรอบเป็นชุดเครื่องมือมากกว่า ตามที่คุณต้องการเพื่อช่วยในการพัฒนาโครงการที่กำหนด ครอบครัวมักจะกำหนดมาตรฐานการเข้ารหัสบางอย่างให้ส่วนประกอบที่มีประโยชน์ ฯลฯ ตัวอย่างเช่น JUnit เป็นเฟรมเวิร์กสำหรับ Java หรือ Symfony / Cake สำหรับ PHP เป็นต้น

ความแตกต่างกับ SDK และ NDK

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

นอกจากนี้ NDK (ชุดพัฒนาพื้นเมือง) มันเป็นส่วนเติมเต็ม ตัวอย่างเช่น Android NDK ช่วยให้นักพัฒนาสามารถนำโค้ด C / C ++ กลับมาใช้ใหม่ได้โดยการนำไปใช้กับแอปพลิเคชันผ่าน JNI (Java Native Interface) ...

ความแตกต่างกับไลบรารี

แผนภาพ Glibc Wikipedia

ในที่สุด ไลบรารีคือชุดของซอร์สโค้ดที่ใช้ซ้ำได้ ที่ทำให้ชีวิตโปรแกรมเมอร์ง่ายขึ้น ตัวอย่างเช่นภายในไลบรารี C stdio.h มีฟังก์ชัน printf เพื่อพิมพ์ข้อความบนหน้าจอ เพื่อให้เป็นไปได้จำเป็นต้องมีซอร์สโค้ดที่ทำให้ระบบปฏิบัติการทำงานนี้ได้ แต่เนื่องจากเป็นสิ่งที่เกิดขึ้นซ้ำซากที่ใช้บ่อยเพียงแค่เรียกใช้ไลบรารีนั้นคุณสามารถใช้ printf ได้โดยไม่ต้องเขียนโค้ดทั้งหมดตั้งแต่เริ่มต้น กล่าวอีกนัยหนึ่งก็คือสามารถมองเห็นได้ว่าเป็นบล็อกสำเร็จรูป

ไลบรารีและ API อาจสับสนได้ง่ายในความเป็นจริง ไลบรารีถูกรวมไว้ใน API. ตัวอย่าง glibc...

ฉันหวังว่าหลังจากนี้คุณจะมีความคิด ชัดเจนยิ่งขึ้นว่า API, ABI, เฟรมเวิร์ก, SDK และไลบรารีคืออะไรรวมถึงสามารถแยกความแตกต่างระหว่างสิ่งเหล่านี้ได้นับจากนี้เป็นต้นไป


เป็นคนแรกที่จะแสดงความคิดเห็น

แสดงความคิดเห็นของคุณ

อีเมล์ของคุณจะไม่ถูกเผยแพร่ ช่องที่ต้องการถูกทำเครื่องหมายด้วย *

*

*

  1. ผู้รับผิดชอบข้อมูล: Miguel ÁngelGatón
  2. วัตถุประสงค์ของข้อมูล: ควบคุมสแปมการจัดการความคิดเห็น
  3. ถูกต้องตามกฎหมาย: ความยินยอมของคุณ
  4. การสื่อสารข้อมูล: ข้อมูลจะไม่ถูกสื่อสารไปยังบุคคลที่สามยกเว้นตามข้อผูกพันทางกฎหมาย
  5. การจัดเก็บข้อมูล: ฐานข้อมูลที่โฮสต์โดย Occentus Networks (EU)
  6. สิทธิ์: คุณสามารถ จำกัด กู้คืนและลบข้อมูลของคุณได้ตลอดเวลา