Skip to content
Διάρκεια άρθρου: Λιγότερο απο 1 λεπτό Λεπτά

API χωρίς σύγχυση: Ποιο εργαλείο χρειάζεσαι πραγματικά;

Ο όρος API χρησιμοποιείται συχνά για πολλά διαφορετικά πράγματα: από το GraphQL και το REST μέχρι το JSON, το OAuth και το Swagger. Όμως δεν ανήκουν όλα στην ίδια κατηγορία. Κάποια είναι αρχιτεκτονικές και πρωτόκολλα επικοινωνίας, άλλα είναι μορφές δεδομένων, εργαλεία τεκμηρίωσης ή συστήματα εξουσιοδότησης. Η σωστή επιλογή εξαρτάται από το πρόβλημα που προσπαθείς να λύσεις.

GraphQL: ακριβώς τα δεδομένα που χρειάζεσαι

Το GraphQL δημιουργήθηκε αρχικά από το Facebook για τις mobile εφαρμογές του και έγινε δημόσια διαθέσιμο το 2015. Βασική του ιδέα είναι ότι ο client ζητά ακριβώς τα πεδία που χρειάζεται. Έτσι αποφεύγεται η λήψη υπερβολικών δεδομένων ή η ανάγκη για πολλά διαφορετικά αιτήματα ώστε να εμφανιστεί μία οθόνη.

Οι queries διαβάζουν δεδομένα, τα mutations τα αλλάζουν και τα subscriptions υποστηρίζουν ενημερώσεις σε πραγματικό χρόνο. Το GraphQL είναι ιδιαίτερα χρήσιμο όταν το ίδιο backend εξυπηρετεί website, iPhone, Android και άλλους clients με διαφορετικές ανάγκες. Ωστόσο, απαιτεί περισσότερη ρύθμιση στο caching και περιορισμούς σε πολύπλοκα queries, ώστε να μην επιβαρύνεται η βάση δεδομένων.

gRPC: γρήγορη επικοινωνία μεταξύ υπηρεσιών

Το gRPC μοιάζει περισσότερο με κλήση συνάρτησης που εκτελείται σε άλλον υπολογιστή. Χρησιμοποιεί HTTP/2 και συνήθως Protocol Buffers αντί για JSON. Η δομή των δεδομένων δηλώνεται σε ένα αρχείο .proto, ώστε και οι δύο πλευρές να γνωρίζουν εκ των προτέρων τι ανταλλάσσουν.

Τα δυαδικά μηνύματα είναι μικρότερα από τα συνηθισμένα μηνύματα JSON, ενώ το HTTP/2 επιτρέπει πολλές κλήσεις στην ίδια σύνδεση. Το gRPC υποστηρίζει επίσης streaming από τον server, από τον client ή και προς τις δύο κατευθύνσεις. Γι’ αυτό ταιριάζει σε microservices που επικοινωνούν συνεχώς μεταξύ τους.

Δεν σημαίνει όμως ότι είναι πάντα «δέκα φορές ταχύτερο» από το REST. Το όφελος εξαρτάται από την εφαρμογή και γίνεται πιο αισθητό σε μεγάλους όγκους δεδομένων, επαναχρησιμοποιούμενες συνδέσεις και συνεχή streaming. Για web εφαρμογές χρειάζεται συνήθως το gRPC Web, ενώ η δυαδική μορφή είναι δυσκολότερη στην αποσφαλμάτωση.

OAuth: εξουσιοδότηση, όχι API

Το OAuth είναι framework εξουσιοδότησης. Επιτρέπει σε μία εφαρμογή να αποκτήσει περιορισμένη πρόσβαση σε υπηρεσία χωρίς να γνωρίζει τον πραγματικό κωδικό πρόσβασης του χρήστη. Για παράδειγμα, μια εφαρμογή μπορεί να διαβάζει τις επαφές κάποιου, χωρίς να έχει δικαίωμα να τις διαγράψει.

Η πρόσβαση παρέχεται μέσω access token, το οποίο μπορεί να έχει συγκεκριμένα δικαιώματα, ημερομηνία λήξης και δυνατότητα ανάκλησης. Το OAuth δεν είναι από μόνο του σύστημα σύνδεσης χρήστη. Το OpenID Connect προσθέτει το κομμάτι της ταυτότητας πάνω στο OAuth 2.0. Επομένως, το OAuth είναι η «άδεια», όχι ο τρόπος με τον οποίο μεταφέρονται τα δεδομένα.

JSON και XML: μορφές δεδομένων

Το JSON είναι ένας απλός και ευανάγνωστος τρόπος αναπαράστασης δομημένων δεδομένων. Μπορεί να περιλαμβάνει πεδία, λίστες και αντικείμενα μέσα σε άλλα αντικείμενα. Παρότι το όνομά του προέρχεται από τη JavaScript, υποστηρίζεται από σχεδόν όλες τις δημοφιλείς γλώσσες προγραμματισμού.

Το JSON χρησιμοποιείται συχνά από REST APIs και GraphQL, όμως δεν καθορίζει τον τρόπο επικοινωνίας. Περιγράφει μόνο τη μορφή των δεδομένων. Αν ένα API είναι το «όχημα» παράδοσης, το JSON είναι ο τρόπος με τον οποίο είναι γραμμένες οι πληροφορίες μέσα στο πακέτο.

Το XML έχει αυστηρότερη δομή, tags, attributes, namespaces και schemas. Παραμένει σημαντικό σε enterprise συστήματα, στο SOAP, στο RSS και σε μορφές αρχείων όπως τα docx και xlsx. Είναι πιο βαρύ από το JSON, αλλά η επικύρωση της δομής του μπορεί να είναι ιδιαίτερα χρήσιμη.

REST: η πιο συνηθισμένη επιλογή

Το REST είναι αρχιτεκτονικό στυλ που συνεργάζεται φυσικά με το HTTP. Το GET χρησιμοποιείται για ανάκτηση δεδομένων, το POST για αποστολή ή δημιουργία, το PUT για αντικατάσταση, το PATCH για μερική αλλαγή και το DELETE για διαγραφή.

Κάθε αίτημα είναι stateless, δηλαδή περιέχει τις πληροφορίες που χρειάζεται ο server χωρίς να εξαρτάται από προηγούμενα αιτήματα. Αυτό διευκολύνει την κατανομή της κίνησης σε πολλούς servers και επιτρέπει την αξιοποίηση του caching από browsers, proxies και CDNs.

Το μειονέκτημα είναι ότι τα σταθερά endpoints μπορεί να επιστρέφουν περισσότερα ή λιγότερα δεδομένα από όσα χρειάζεται ο client. Παρ’ όλα αυτά, το REST παραμένει εξαιρετικό σημείο εκκίνησης για δημόσια web και mobile APIs.

Webhooks και WebSocket

Ένα webhook επιτρέπει σε μια υπηρεσία να ενημερώσει τη δική σου εφαρμογή όταν συμβεί κάτι. Αντί να ρωτάς συνεχώς μια υπηρεσία αν ολοκληρώθηκε μια πληρωμή, της δίνεις ένα URL και εκείνη στέλνει HTTP request όταν υπάρξει εξέλιξη. Χρειάζεται έλεγχος γνησιότητας και διαχείριση διπλών αποστολών, επειδή ένα webhook μπορεί να επαναληφθεί.

Το WebSocket δημιουργεί μόνιμη αμφίδρομη σύνδεση. Ο server μπορεί να στέλνει δεδομένα χωρίς να περιμένει νέο αίτημα από τον client. Είναι κατάλληλο για συνομιλίες, online παιχνίδια, συνεργατικούς editors και ζωντανά dashboards. Σε μεγάλη κλίμακα απαιτεί σωστή διαχείριση συνδέσεων, επανασύνδεση και ανάκτηση μηνυμάτων που χάθηκαν.

MQTT, Swagger και SOAP

Το MQTT σχεδιάστηκε για μικρά μηνύματα σε ασταθείς και ακριβές συνδέσεις και χρησιμοποιείται κυρίως στο IoT. Βασίζεται στο publish-subscribe μοντέλο: οι συσκευές δημοσιεύουν δεδομένα σε topics και ένας broker τα προωθεί στους subscribers.

Το Swagger είναι εργαλείο τεκμηρίωσης και δοκιμής APIs. Η προδιαγραφή OpenAPI περιγράφει endpoints, παραμέτρους και απαντήσεις με machine-readable τρόπο, ενώ εργαλεία όπως το Swagger UI παρουσιάζουν αυτές τις πληροφορίες σε διαδραστική μορφή.

Τέλος, το SOAP είναι messaging protocol που χρησιμοποιεί XML και αυστηρή δομή. Παραμένει σε παλαιότερα enterprise συστήματα, όπου η αντικατάστασή του θα ήταν ακριβή και επικίνδυνη. Το νεότερο δεν είναι πάντα καλύτερο· σημασία έχει η καταλληλότητα για το συγκεκριμένο πρόβλημα.

Αν γνώριζες ήδη αυτές τις διαφορές ή βρήκες το άρθρο ενδιαφέρον, μπορείς να το μοιραστείς. Για περισσότερα σχετικά άρθρα, εξερεύνησε και τα υπόλοιπα θέματα της ιστοσελίδας.

‹ ›