מה זה API

מה זה API

לאס ראשי תיבות API הייתם רואים אותם לא פעם ופעמיים כשאתם קוראים מאמרים על תוכנה. אבל לא כולם יודעים מהו ממש API. לכן אנו מבהירים זאת במאמר זה. הדבר הראשון שיש לומר הוא שהם ראשי התיבות של ממשק תכנות יישומים, כלומר בספרדית ממשק תכנות יישומים. ופעמים רבות זה מייצר בלבול גם בקרב מי שיודע משהו על תכנות.

לדוגמא, ל- Arduino יש ממשק API לתכנות משלו, המציע מספר פונקציות שתוכלו להשתמש בהן ב- Arduino IDE או בסביבות אחרות כדי לתכנת את המיקרו-בקר כדי לאפשר לכם ליצור את הפרויקטים שלכם. אבל ... אתה יכול לספר לי ההבדל בין ספריית תכנות ל- API? האם יש הבדלים בין מסגרת ל- API? האם API זהה ל- ABI? יש הרבה ספקות שאולי ממשיכים ליצור בלבול ושאנחנו הולכים להבהיר עכשיו.

אני לא יודע אם אתה יודע את זה שפות ברמה נמוכה, כמו הרכבה או ASM, תלויים ישירות בארכיטקטורת החומרה, ואילו הרמות הגבוהות מופשטות מהחומרה כדי להקל על משימת המתכנת, אך תלויות במערכת ההפעלה (syscalls) או בממשקי API מסוימים וכו '. כדי שכל זה לא יישמע לכם סיני, בואו נראה במה מדובר ...

מהו API?

א API הוא כלי איתו מספקים מפתחים כך שיעמוד לרשותם סדרה של פונקציות, תת-דרכים ונהלים או שיטות ל- OOP שניתן להשתמש בהם באמצעות הספריות הקיימות. בין מה שמציע API זה בין פונקציות ליצירת אפליקציות פשוטות, פונקציות הקשורות ל- AI, עם יצירת גרפיקה, ניהול משאבי חומרה וכו '.

לדוגמא, אתה בטוח שממשקי API ידועים כמו זו שמציעה לינוקס דרך ספריית glibc, או גרפיקה כגון OpenGL ו- Vulkan, או גם אחרים כמו OpenCL למחשוב הטרוגני, OpenXR למציאות מדומה ומוגברת וכו '. מערכות הפעלה ותוכנה אחרות כוללות גם ממשקי API משלהם, כך שמתכנתים אחרים יכולים ליצור תוספים, תוספים או מודולים עבור אותה מערכת וכו '.

דוגמא עם ארדואינו

אם יש לך תג Arduino ואתה משתמש לעתים קרובות ב- Arduino IDE, או כל סביבת פיתוח אחרת עבור Arduino, תדע שכאשר אתה יוצר קוד אתה משתמש במספר אפשרויות בכדי להזמין את המיקרו-בקר שלך לבצע סדרת פעולות. לדוגמא, pinMode () הוא פונקציה אופיינית להגדרת סיכה של ארדואינו, נכון?

כשאתה כותב pinMode (9, INPUT)לדוגמה, אתה מציין שסיכה 9 בלוח הארדואינו צריכה לעבוד כקלט, כלומר המיקרו-בקר ימתין למידע שייכנס דרך אותו סיכה כדי לקרוא אותו ולבצע פעולה. אך האם תהיתם פעם כיצד הוא מסוגל להבין את הפקודה הזו?

ובכן, לארדואינו יש ממשק API לפיתוח המועמד לרשותנו. ניתן להוסיף ספריות צד שלישי לממשק ה- API הזה כפי שראינו בדוגמאות רבות בבלוג זה. כמו SparkFun של חיישנים מסוימים וכו '. עם כל אלה, ניתן להזין את הפונקציות ב- Arduino IDE והוא יתרגם את הקוד כראוי בכדי לטעון אותו בזיכרון המיקרו-בקר כדי שיוכל לעבד אותו.

אם לא היה לך API זה, לא תוכל ליצור תוכניות אלה עבור Arduino בצורה כה פשוטה, מכיוון שננסה להכין אותן בקוד הרכבה למיקרו-בקרת ATMega328P, כלומר ASM לאדריכלות AVR. וזה יהיה הרבה יותר מסובך, מכיוון שתצטרך להשתמש ישירות בהוראות הזמינות ברשות זו. אם כן, לא רק תצטרך להכיר בצורה נאותה את הרפרטואר של אותה רשות, אלא גם היבטים אחרים כגון מספר ההרשמות וכו '. כלומר, עליכם להיות בעלי ידע ברמה נמוכה על החומרה בה אתם עובדים.

ידי לדוגמא, קוד 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 לעומת לינוקס ABI

ABI הוא מונח פחות מוכר, הוא ממשק בינארי יישומי, או באנגלית Application Binary Interface. במקרה זה, מדובר בממשק בין מודולים של תוכנית, בדרך כלל בין ספריה או מערכת הפעלה בשפת מכונה לארכיטקטורה בה אתה נמצא: SPARC, AMD64, ARM, PPC, RISC-V וכו '.

הודות ל- ABI, הדרך להתקשר לפונקציות נקבעת, פורמט בינארי שיכולים להבין את המכונה שאליה אתה מכין או את שיחות המערכת, כיצד מטפלים בחריגים, כיצד מעבירים נתונים וכו '.

הבדלים עם מסגרת

Un מסגרת או מסגרת היא יותר מכלים של כלים לרשותכם כדי לעזור בפיתוח פרויקט נתון. ה- famework מגדיר בדרך כלל כמה תקני קידוד, מספק רכיבים שימושיים וכו '. לדוגמא, JUnit הוא מסגרת עבור Java, או Symfony / Cake for PHP וכו '.

הבדלים עם SDK ו- NDK

SDK היא ערכת פיתוח תוכנהכלומר ערכת פיתוח תוכנה. זה חורג מהמסגרת או ה- API. דוגמה יכולה להיות Android Studio או iOS xCode וכו '. לדוגמא, הראשון, בנוסף ל- API של Android עצמו, כולל גם IDE או סביבת פיתוח משולבת לתכנות והידור, ספריות, כלים וכו '.

יתר על כן, NDK (ערכת פיתוח הילידים) זה השלמה. לדוגמה, אנדרואיד NDK מאפשר למפתחים לעשות שימוש חוזר בקוד C / C ++ על ידי הצגתו ליישומים באמצעות JNI (Java Native Interface) ...

הבדלים עם ספרייה

תרשים גליבק ויקיפדיה

לבסוף, הספרייה היא אוסף של קוד מקור רב פעמי שמקל על המתכנתים את החיים. לדוגמא, בתוך ספריית C stdio.h יש פונקציה printf להדפסת טקסט על המסך. כדי שזה יהיה אפשרי, יש צורך בקוד מקור שגורם למערכת ההפעלה לבצע את המשימה הזו. אך מכיוון שמדובר במשהו חוזר מאוד שמשתמשים בו לעתים קרובות, פשוט על ידי הפעלת הספריה הזו תוכלו לעשות שימוש ב- printf מבלי לכתוב את כל הקוד מאפס. במילים אחרות, במילים אחרות, ניתן לראות בהם גושים מוקדמים.

ניתן לבלבל בין ספרייה ו- API בקלות, למעשה, ספריות עטופות בתוך ממשק API. דוגמא glibc...

אני מקווה שאחרי זה יהיה לך רעיון ברור יותר לגבי API, ABI, מסגרת, SDK וספרייה, בנוסף ליכולת להבדיל ביניהם מעתה ואילך.


היה הראשון להגיב

השאירו את התגובה שלכם

כתובת הדוא"ל שלך לא תפורסם. שדות חובה מסומנים *

*

*

  1. אחראי לנתונים: מיגל אנחל גטון
  2. מטרת הנתונים: בקרת ספאם, ניהול תגובות.
  3. לגיטימציה: הסכמתך
  4. מסירת הנתונים: הנתונים לא יועברו לצדדים שלישיים אלא בהתחייבות חוקית.
  5. אחסון נתונים: מסד נתונים המתארח על ידי Occentus Networks (EU)
  6. זכויות: בכל עת תוכל להגביל, לשחזר ולמחוק את המידע שלך.