ο Ακρωνύμια API θα τα έχετε δει περισσότερες από μία φορές και δύο φορές όταν διαβάζετε άρθρα σχετικά με το λογισμικό. Αλλά δεν γνωρίζουν όλοι τι είναι πραγματικά ένα API. Γι 'αυτό το αποσαφηνίζουμε σε αυτό το άρθρο. Το πρώτο πράγμα που πρέπει να πούμε είναι ότι είναι το ακρωνύμιο της διεπαφής προγραμματισμού εφαρμογών, δηλαδή στα ισπανικά, της διεπαφής προγραμματισμού εφαρμογών. Και πολλές φορές δημιουργεί σύγχυση ακόμη και σε όσους γνωρίζουν κάποιο προγραμματισμό.
Για παράδειγμα, το Arduino έχει το δικό του API προγραμματισμού, προσφέροντας μια σειρά από λειτουργίες που μπορείτε να χρησιμοποιήσετε στο Arduino IDE ή σε άλλα περιβάλλοντα για να προγραμματίσετε τον μικροελεγκτή για να σας επιτρέψει να δημιουργήσετε τα έργα σας. Αλλά ... θα μπορούσατε να μου πείτε τη διαφορά μεταξύ βιβλιοθήκης προγραμματισμού και API; Υπάρχουν διαφορές μεταξύ ενός πλαισίου και ενός API; Είναι ένα API ίδιο με το ABI; Υπάρχουν πολλές αμφιβολίες που ίσως συνεχίσουν να δημιουργούν σύγχυση και ότι πρόκειται να διευκρινίσουμε τώρα.
Δεν ξέρω αν το ξέρεις αυτό γλώσσες χαμηλού επιπέδου, όπως το assembler ή το ASM, εξαρτώνται άμεσα από την αρχιτεκτονική του υλικού, ενώ οι υψηλού επιπέδου αφαιρούν από το υλικό για να διευκολύνουν την εργασία του προγραμματιστή, αλλά εξαρτώνται από το λειτουργικό σύστημα (syscalls) ή από συγκεκριμένα API κ.λπ. Για να μην ακούγονται όλα αυτά σαν κινεζικά, ας δούμε τι σημαίνει ...
Τι είναι το API;
ένα Το API είναι ένα εργαλείο με το οποίο παρέχονται προγραμματιστές ώστε να έχουν στη διάθεσή τους μια σειρά από λειτουργίες, υπορουτίνες και διαδικασίες ή μεθόδους για το OOP που μπορούν να χρησιμοποιηθούν μέσω των υφιστάμενων βιβλιοθηκών. Μεταξύ αυτών που προσφέρει ένα API είναι οι λειτουργίες για τη δημιουργία απλών εφαρμογών, λειτουργιών που σχετίζονται με το AI, με τη δημιουργία γραφικών, τη διαχείριση πόρων υλικού κ.λπ.
Για παράδειγμα, είμαι βέβαιος ότι είστε εξοικειωμένοι με API όπως αυτό που προσφέρει το Linux μέσω της βιβλιοθήκης glibc ή γραφικά όπως OpenGL και Vulkan, ή και άλλοι όπως το OpenCL για ετερογενή πληροφορική, OpenXR για εικονική και επαυξημένη πραγματικότητα κ.λπ. Άλλα λειτουργικά συστήματα και λογισμικό περιλαμβάνουν επίσης τα δικά τους API, έτσι ώστε άλλοι προγραμματιστές να μπορούν να δημιουργήσουν πρόσθετα, πρόσθετα ή λειτουργικές μονάδες για αυτό το σύστημα κ.λπ.
Παράδειγμα με τον Arduino
Εάν έχετε σήμα Το Arduino και χρησιμοποιείτε συχνά το Arduino IDE, ή οποιοδήποτε άλλο περιβάλλον ανάπτυξης για το Arduino, θα γνωρίζετε ότι όταν δημιουργείτε έναν κώδικα χρησιμοποιείτε πολλές επιλογές για να παραγγείλετε τον μικροελεγκτή σας να κάνει μια σειρά ενεργειών. Για παράδειγμα, το pinMode () είναι μια τυπική λειτουργία για τη διαμόρφωση ενός pin 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
Το ABI είναι ένας λιγότερο γνωστός όρος, είναι ένας Εφαρμογή Binary Interface ή στα Αγγλικά Binary Application Interface. Σε αυτήν την περίπτωση, είναι μια διεπαφή μεταξύ των ενοτήτων ενός προγράμματος, γενικά μεταξύ μιας βιβλιοθήκης ή ενός λειτουργικού συστήματος γλώσσας μηχανής για την αρχιτεκτονική στην οποία βρίσκεστε: SPARC, AMD64, ARM, PPC, RISC-V κ.λπ.
Χάρη στο ABI, καθορίζεται ο τρόπος κλήσης των λειτουργιών, δυαδική μορφή το οποίο μπορεί να κατανοήσει το μηχάνημα για το οποίο συντάσσετε ή τις κλήσεις συστήματος, τον τρόπο χειρισμού των εξαιρέσεων, τον τρόπο διαβίβασης δεδομένων κ.λπ.
Διαφορές με ένα πλαίσιο
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) ...
Διαφορές με βιβλιοθήκη
Τέλος, Η βιβλιοθήκη είναι μια συλλογή επαναχρησιμοποιήσιμου πηγαίου κώδικα που διευκολύνει τη ζωή των προγραμματιστών. Για παράδειγμα, μέσα στη βιβλιοθήκη C stdio.h υπάρχει μια λειτουργία printf για εκτύπωση κειμένου στην οθόνη. Για να είναι δυνατό αυτό, απαιτείται ένας πηγαίος κώδικας που κάνει το λειτουργικό σύστημα να κάνει αυτήν την εργασία. Αλλά επειδή είναι κάτι πολύ επαναλαμβανόμενο που χρησιμοποιείται συχνά, απλά κάνοντας χρήση αυτής της βιβλιοθήκης, μπορείτε να χρησιμοποιήσετε το printf χωρίς να γράψετε όλο τον κώδικα από το μηδέν. Με άλλα λόγια, με άλλα λόγια, μπορούν να θεωρηθούν ως προκατασκευασμένα μπλοκ.
Μια βιβλιοθήκη και ένα API μπορούν εύκολα να συγχέονται, στην πραγματικότητα, οι βιβλιοθήκες τυλίγονται μέσα σε ένα API. Παράδειγμα glibc...
Ελπίζω ότι μετά από αυτό θα έχετε μια ιδέα σαφέστερο για το τι είναι ένα API, ABI, ένα πλαίσιο, ένα SDK και μια βιβλιοθήκη, εκτός από το ότι μπορούν να κάνουν διάκριση μεταξύ τους από τώρα και στο εξής.