Architecture Decision Record

Active theme: Light

← Παραδείγματα καταγραφής αποφάσεων

Καταγραφή αρχιτεκτονικής απόφασης: API με JSON ή gRPC

Κατάσταση

Αποδεκτή

Πλαίσιο

Σχεδιάζουμε ένα API για μια νέα υπηρεσία που θα χρησιμοποιείται από πολλούς πελάτες. Εξετάσαμε δύο επιλογές υλοποίησης του API: JSON πάνω από HTTP ή gRPC.

Το JSON πάνω από HTTP είναι μια ευρέως χρησιμοποιούμενη προσέγγιση για τη δημιουργία API και υποστηρίζεται από πολλές γλώσσες προγραμματισμού και πλαίσια. Αυτή η προσέγγιση είναι απλή, ελαφριά και εύκολη στην κατανόηση, κάτι που τη κάνει καλή επιλογή για πολλά έργα. Ωστόσο, μπορεί να είναι λιγότερο αποδοτική από άλλες επιλογές, ειδικά στον χειρισμό μεγάλων ποσοτήτων δεδομένων.

Το gRPC, από την άλλη, είναι μια νεότερη τεχνολογία που προσφέρει πιο αποδοτικό τρόπο δημιουργίας API. Χρησιμοποιεί δυαδική σειριοποίηση για τη μεταφορά δεδομένων, η οποία μπορεί να είναι ταχύτερη και πιο συμπαγής από το JSON. Το gRPC υποστηρίζει επίσης αμφίδρομη ροή (streaming), κάτι που το κάνει καλή επιλογή για εφαρμογές πραγματικού χρόνου.

Απόφαση

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

Επιπλέον, πιστεύουμε ότι η υποστήριξη του gRPC για αμφίδρομη ροή θα είναι ωφέλιμη για εφαρμογές πραγματικού χρόνου που ενδέχεται να αναπτύξουμε στο μέλλον.

Συνέπειες

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

Ωστόσο, πιστεύουμε ότι τα οφέλη της χρήσης του gRPC υπερτερούν αυτών των πιθανών μειονεκτημάτων και είμαστε βέβαιοι ότι αυτή η απόφαση θα οδηγήσει σε πιο αποδοτικό και κλιμακώσιμο API.