JSON: οργάνωση και ανταλλαγή δεδομένων ανάμεσα σε εφαρμογές
Το JSON (Σημειογραφία Αντικειμένων JavaScript, JavaScript Object Notation) είναι μορφή αναπαράστασης δεδομένων σε κείμενο. Επιτρέπει σε διαφορετικές εφαρμογές να ανταλλάσσουν πληροφορίες όπως ονόματα, τιμές, λίστες και καταστάσεις, χωρίς να χρειάζεται να γνωρίζουν τον εσωτερικό κώδικα η μία της άλλης. Η μορφή είναι απλή στην ανάγνωση, αλλά η επιτυχημένη χρήση της απαιτεί ξεκάθαρη σημασία πεδίων, σωστούς τύπους τιμών και συστηματικό χειρισμό ελλιπών ή μη έγκυρων δεδομένων.
Από τι αποτελείται μια εγγραφή
Ένα αντικείμενο περιέχει ζεύγη ονόματος και τιμής. Η τιμή μπορεί να είναι κείμενο, αριθμός, λογική τιμή, κενή τιμή, λίστα ή άλλο αντικείμενο. Για παράδειγμα, μια καταχώριση βιβλίου μπορεί να έχει τίτλο, τιμή, διαθεσιμότητα και πίνακα κατηγοριών. Το όνομα του πεδίου είναι μέρος μιας συμφωνίας μεταξύ των συστημάτων, όχι απλή αισθητική επιλογή.
Τα ονόματα πρέπει να είναι κατανοητά και σταθερά. Αν μια υπηρεσία χρησιμοποιεί για το ίδιο νόημα διαφορετικά ονόματα σε κάθε απόκριση, οι καταναλωτές της χρειάζονται περιττές εξαιρέσεις. Εξίσου σημαντικό είναι να αποφασιστεί πότε επιτρέπεται η απουσία πεδίου και πότε επιστρέφεται ρητά κενή τιμή. Οι δύο περιπτώσεις δεν σημαίνουν πάντα το ίδιο πράγμα και πρέπει να αντιμετωπίζονται με συνέπεια.
Κείμενα, αριθμοί και ημερομηνίες χωρίς παρερμηνείες
Μια αριθμητική τιμή πρέπει να μεταφέρεται ως αριθμός όταν προορίζεται για υπολογισμούς. Μια ταχυδρομική διεύθυνση ή ένας κωδικός με αρχικά μηδενικά συχνά χρειάζεται να παραμείνει κείμενο. Η ημερομηνία δεν αποτελεί ξεχωριστό βασικό τύπο της μορφής: συνήθως μεταφέρεται ως συμβολοσειρά με προκαθορισμένη αναπαράσταση. Χωρίς κοινό κανόνα για τη χρονική ζώνη, δύο εφαρμογές μπορεί να ερμηνεύσουν διαφορετικά την ίδια χρονική στιγμή.
Προσοχή χρειάζονται και οι νομισματικές τιμές. Δεν βασιζόμαστε σε ασαφείς μονάδες ούτε θεωρούμε ότι κάθε δεκαδική αναπαράσταση υποστηρίζει την επιθυμητή ακρίβεια για οικονομικούς υπολογισμούς. Όταν ανταλλάσσονται ποσά, απαιτείται συμφωνία για μονάδα, ακρίβεια και στρογγυλοποίηση. Η ίδια προσοχή ισχύει για εμβαδά, αποστάσεις και ποσοστά, γιατί ένας σκέτος αριθμός δεν εξηγεί τι μετρά.
Πώς χρησιμοποιείται σε επικοινωνία εφαρμογών
Μια διαδικτυακή διεπαφή API (Διεπαφή Προγραμματισμού Εφαρμογών, Application Programming Interface) μπορεί να επιστρέψει μια συλλογή αποτελεσμάτων με αυτή τη μορφή. Ο αποδέκτης διαβάζει την απόκριση, αναγνωρίζει τους τύπους και δημιουργεί τη δική του παρουσίαση. Έτσι τα ίδια προϊόντα μπορούν να εμφανίζονται σε δημόσιο κατάλογο, σύστημα διαχείρισης και εφαρμογή κινητού, χωρίς κάθε κανάλι να έχει ξεχωριστή, χειροκίνητα ενημερωμένη λίστα.
Η μεταφορά δεδομένων δεν εγγυάται ότι οι πληροφορίες είναι ορθές. Η εφαρμογή που τα παρέχει χρειάζεται κανόνες αυθεντικότητας, πρόσβασης, ταξινόμησης και σελιδοποίησης. Αν μια απόκριση επιστρέφει μόνο μέρος των εγγραφών, ο καταναλωτής πρέπει να γνωρίζει πώς ζητά τις υπόλοιπες. Οι κωδικοί σφάλματος, η περιγραφή των περιορισμών και η συμπεριφορά κατά την αλλαγή μιας διεπαφής είναι μέρος της συνολικής συμφωνίας.
Έλεγχος σχήματος και συμβατότητα εκδόσεων
Ένα έγγραφο μπορεί να είναι συντακτικά έγκυρο αλλά να μην εξυπηρετεί τη χρήση του. Για παράδειγμα, το πεδίο ηλικίας μπορεί να περιέχει αρνητικό αριθμό ή η κατηγορία να αναφέρεται σε τιμή που δεν υπάρχει. Το σχήμα δεδομένων περιγράφει αναμενόμενους τύπους, υποχρεωτικά πεδία και επιτρεπόμενες δομές. Η επικύρωση πρέπει να συνδυάζεται με επιχειρησιακούς ελέγχους, επειδή ούτε το πιο αυστηρό τεχνικό σχήμα γνωρίζει όλες τις πραγματικές έννοιες.
Όταν προστεθεί νέο πεδίο, εξετάζουμε αν οι παλιοί καταναλωτές μπορούν να συνεχίσουν να λειτουργούν. Η αλλαγή του νοήματος μιας ήδη δημοσιευμένης τιμής είναι σοβαρότερη από την προσθήκη μιας προαιρετικής ιδιότητας. Διατηρούμε τεκμηρίωση αλλαγών και δοκιμάζουμε τις εκδόσεις που χρησιμοποιούνται πράγματι. Η προσαρμογή δεν πρέπει να βασίζεται στην ελπίδα ότι όλες οι εφαρμογές θα ενημερωθούν την ίδια στιγμή.
Ασφάλεια εισερχομένων και εξερχομένων δεδομένων
Δεν αντιμετωπίζουμε ένα εισερχόμενο έγγραφο ως εντολή που πρέπει να εκτελεστεί. Επαληθεύουμε το μέγεθος, τη δομή, τις τιμές και τα δικαιώματα του αιτούντος. Ελέγχουμε επίσης το βάθος εμφωλευμένων αντικειμένων όταν υπάρχει κίνδυνος υπερβολικής κατανάλωσης πόρων. Η σωστή ανάλυση της σύνταξης δεν αντικαθιστά τον έλεγχο πρόσβασης στα δεδομένα που ζητά ή μεταβάλλει ένας χρήστης.
Κατά την έξοδο αφαιρούμε πεδία που δεν χρειάζεται να είναι δημόσια. Ένα αντικείμενο που χρησιμοποιείται εσωτερικά μπορεί να περιλαμβάνει πληροφορίες προσωπικού χαρακτήρα, στοιχεία κόστους ή διαχειριστικές σημειώσεις. Δεν πρέπει να αποστέλλεται αυτούσιο απλώς επειδή είναι εύκολο να σειριοποιηθεί. Αντίστοιχα, όταν το περιεχόμενο μιας τιμής προβάλλεται σε ιστοσελίδα, απαιτείται κατάλληλη προστασία στο τελικό σημείο εμφάνισης.
JSON-LD και πληροφορία κατανοητή από μηχανές αναζήτησης
Το JSON-LD (JSON για Συνδεδεμένα Δεδομένα, JavaScript Object Notation for Linked Data) χρησιμοποιεί τη μορφή για να περιγράψει δομημένες οντότητες και σχέσεις, συχνά μέσα σε ιστοσελίδες. Μπορεί να δηλώσει, για παράδειγμα, ότι μια δημόσια σελίδα αφορά άρθρο ή προϊόν, με χαρακτηριστικά που συμφωνούν με το ορατό περιεχόμενο. Η ύπαρξη τέτοιων δεδομένων δεν υποκαθιστά την πραγματική απάντηση προς τον επισκέπτη ούτε εγγυάται ειδική εμφάνιση στα αποτελέσματα αναζήτησης.
Η βασική αρχή είναι η συνέπεια. Αν η δημόσια σελίδα παρουσιάζει μια τιμή ή διαθεσιμότητα, η δομημένη περιγραφή δεν πρέπει να δηλώνει κάτι διαφορετικό. Πριν δημιουργηθεί σημασιολογική πληροφορία, απαιτείται καθαρή πηγή δεδομένων και σαφές πεδίο εφαρμογής. Πρακτική συνέχεια παρέχει το JSON-LD και η οργάνωση δομημένων δεδομένων.
Εντοπισμός λαθών κατά την ανάπτυξη
Συνηθισμένα σφάλματα είναι τα περιττά κόμματα, τα λανθασμένα εισαγωγικά και οι ασυνεπείς τύποι. Ένα κείμενο που μοιάζει οπτικά σωστό μπορεί να μην είναι έγκυρο και πρέπει να ελέγχεται με πραγματικό αναλυτή. Για προβλήματα νοήματος εξετάζουμε δείγματα από τις ακραίες περιπτώσεις: άδειες λίστες, απουσία φωτογραφίας, μηδενική τιμή, ελληνικά ονόματα και πολύ μεγάλα πεδία κειμένου.
Επιπλέον, καταγράφουμε σε ποιο πεδίο παρουσιάστηκε η αποτυχία χωρίς να εκθέτουμε ευαίσθητα δεδομένα. Ο εντοπισμός λαθών γίνεται ευκολότερος όταν οι εφαρμογές συμφωνούν σε ονομασία, μορφή σφαλμάτων και τρόπο δοκιμής. Η έγκυρη σύνταξη είναι η αρχή της αξιοπιστίας· η πραγματική επιτυχία είναι η σωστή ερμηνεία της πληροφορίας.
Συμβάσεις ονομασίας και τεκμηρίωση για ομάδες
Ένα κοινό πρότυπο δεν πρέπει να αφήνεται στην ερμηνεία του κάθε προγραμματιστή. Συμφωνούμε σε σταθερούς κανόνες ονομασίας πεδίων, επιτρεπόμενες τιμές, αναπαράσταση σφαλμάτων και διαχείριση άγνωστων ιδιοτήτων. Στη συνοδευτική τεκμηρίωση προσθέτουμε παραδείγματα κανονικής απόκρισης, κενής συλλογής και αποτυχίας. Τα παραδείγματα πρέπει να είναι αντιπροσωπευτικά, χωρίς προσωπικά ή άλλα ευαίσθητα πραγματικά δεδομένα.
Όταν αλλάζει μια σύμβαση, καταγράφουμε αν η αλλαγή είναι συμβατή με προηγούμενους καταναλωτές και ποια δοκιμή το αποδεικνύει. Ενθαρρύνουμε επίσης σαφή πολιτική για αναγνωριστικά που μπορεί να μεταφέρονται ως κείμενο, ώστε να μη χάνονται αρχικά μηδενικά ή να μην αλλοιώνεται η ακρίβειά τους. Η σωστή τεκμηρίωση μειώνει τα προβλήματα συνεργασίας ανάμεσα σε διαφορετικές ομάδες περισσότερο από την απλή υπόσχεση ότι η μορφή είναι εύκολη στη χρήση.
Συχνές απορίες στην πράξη
Είναι πρόγραμμα ή βάση δεδομένων;
Ούτε το ένα ούτε το άλλο. Είναι μορφή κειμένου για αναπαράσταση και μεταφορά δεδομένων. Η αποθήκευση και η επεξεργασία γίνονται από άλλες εφαρμογές.
Μπορεί να περιέχει εικόνες απευθείας;
Συνήθως μεταφέρει διευθύνσεις ή μεταδεδομένα εικόνων. Η μεταφορά δυαδικού περιεχομένου ως κείμενο αυξάνει τον όγκο και απαιτεί ξεχωριστές αποφάσεις.
Πώς ξεχωρίζει η κενή τιμή από πεδίο που λείπει;
Η κενή τιμή δηλώνεται ρητά. Το πεδίο που απουσιάζει δεν υπάρχει στο αντικείμενο. Η εφαρμογή ορίζει τι σημαίνει καθεμία από αυτές τις καταστάσεις.
Αρκεί ο συντακτικός έλεγχος;
Όχι. Χρειάζεται επαλήθευση τύπων, ορίων, σχέσεων, εξουσιοδότησης και πραγματικής σημασίας των τιμών.
Τι χρειάζεται για αξιόπιστη δημόσια χρήση;
Τεκμηριωμένο σχήμα, σταθεροί κανόνες αλλαγών, έλεγχος δικαιωμάτων και συμφωνία ανάμεσα στα δεδομένα και σε όσα βλέπει ο τελικός χρήστης.