Δημοσιεύστε μια ροή δεδομένων: ας τρέξουν το widget σας χωρίς το κλειδί σας
Ένα widget χτισμένο πάνω στη δική σας σύνδεση Binance ή OANDA ήταν άχρηστο για οποιονδήποτε άλλον. Τώρα μπορείτε να δημοσιεύσετε ακριβώς τις αναγνώσεις που κάνει, ως endpoint μόνο για ανάγνωση με cache κάτω από το δικό σας προφίλ — χωρίς να μοιραστείτε κλειδί και χωρίς ανοιχτό proxy.
Στο μοίρασμα υπήρχε ένα άβολο κενό. Φτιάχνετε ένα πανέμορφο διάγραμμα FX πάνω στη σύνδεσή σας με το OANDA, το δημοσιεύετε, και ο πρώτος που το εγκαθιστά διαβάζει Συνδέστε το OANDA για να χρησιμοποιήσετε αυτά τα δεδομένα — έναν ευγενικό τρόπο να ζητήσετε από έναν άγνωστο να ανοίξει λογαριασμό σε χρηματιστή για να κοιτάξει ένα διάγραμμα. Μοιρασμένο σε ζωντανή οθόνη ήταν ακόμη χειρότερα: το widget πάγωνε σε μικρογραφία.
Η λύση δεν είναι να δανείσετε σε κάποιον το κλειδί σας. Είναι να δημοσιεύσετε τις αναγνώσεις που όντως κάνει το widget σας, ως δικά τους endpoints, κάτω από το δικό σας προφίλ:
GET /<όνομα-χρήστη>/api/w/<widget>/<endpoint>?symbol=EUR_USD&interval=H1
Ενεργοποιείται από τον διάλογο δημοσίευσης — Δημοσίευση ροής δεδομένων μόνο για ανάγνωση — και όσοι δεν έχουν δική τους σύνδεση διαβάζουν τη ροή σας αντί να τους ζητείται να συνδεθούν.
Τρεις κανόνες, και ο καθένας τους είναι μια άρνηση
Μόνο αναγνώσεις που είναι ασφαλές να μοιραστούν. Δεκατρείς μέθοδοι δεδομένων
μπορούν να δημοσιευτούν. Οι υπόλοιπες είναι φραγμένες, καθεμιά για τον δικό της λόγο:
account και positions είναι κι αυτές αναγνώσεις, αλλά επιστρέφουν το υπόλοιπό σας,
την καθαρή αξία, τα κέρδη και τις ζημιές και τις ανοιχτές σας θέσεις. order και
closePosition κινούν χρήματα. upsert και delete καταστρέφουν δεδομένα. Το scrape
χρεώνει τρίτο μέρος ανά κλήση. Και το σκέτο http είναι ήδη χωρίς διαπιστευτήρια: η
δημοσίευσή του θα έχτιζε απλώς ένα ανοιχτό proxy με το όνομά σας πάνω.
Μόνο οι κλήσεις που όντως έκανε το widget. Οι επιτυχημένες αναγνώσεις του widget καταγράφονται καθώς αυτό τρέχει, και ο διάλογος δημοσίευσης σας δείχνει τη λίστα — κεριά από το Binance — BTCUSDT, 1h — ως το συγκεκριμένο πράγμα που αποδέχεστε. Ένα αίτημα που ζητά παράμετρο την οποία δεν δημοσιεύσατε ποτέ, ή τιμή εκτός του συνόλου στο οποίο την διευρύνατε, απορρίπτεται πριν αποκρυπτογραφηθεί οτιδήποτε. Οι παράμετροι που δεν έχουν καμία θέση σε ένα URL — ένα SQL ερώτημα, ένα διάνυσμα — δεν εμφανίζονται ποτέ εκεί: αναπαράγονται αυτούσιες από την αποθήκευση.
Οι αρνήσεις είναι δυσδιάκριτες. Ένα endpoint που δεν υπάρχει, μια παράμετρος εκτός της λίστας της και ένα κοινό στο οποίο δεν ανήκετε επιστρέφουν όλα το ίδιο 404. Το αν υπάρχει ροή μόνο για φίλους είναι από μόνο του πληροφορία για τον δημιουργό, και η απάντηση δεν τη διαρρέει ποτέ.
Ποιος μπορεί να τη διαβάσει, και τι σας κοστίζει
Το κοινό δεν είναι ένας τέταρτος διακόπτης που ξεχνιέται: ακολουθεί την ανάρτηση ανακοίνωσης — όλοι, οι ακόλουθοί σας ή οι φίλοι σας. Μια ιδιωτική ανακοίνωση απενεργοποιεί εντελώς τη ροή, γιατί μια ανακοίνωση που βλέπετε μόνο εσείς να στηρίζει ένα endpoint που καλούν άλλοι δεν στέκει.
Το κόστος είναι το κομμάτι που αξίζει να κατανοηθεί, γιατί είναι αυτό που φοβίζει. Επιλέγετε ένα διάστημα ανανέωσης — κάθε 30 δευτερόλεπτα, 5 λεπτά, ωριαία ή ημερήσια — και αυτό είναι το μέγιστο με το οποίο μπορεί να χρησιμοποιηθεί η σύνδεσή σας, όσοι κι αν ανοίξουν το widget. Όσοι διαβάζουν μοιράζονται ένα μόνο αντίγραφο στην cache. Δέκα θεατές και δέκα χιλιάδες κάνουν τον ίδιο αριθμό κλήσεων, και ανά παράθυρο επιτρέπεται ακριβώς μία ανανέωση ακόμη κι αν πολλοί αναγνώστες αστοχήσουν στην cache την ίδια στιγμή.
Το κλειδί σας δεν φεύγει ποτέ από τον διακομιστή. Το υπόλοιπο, οι θέσεις και οι εντολές σας δεν δημοσιεύονται ποτέ. Και η ροή είναι δεμένη με την καταχώριση: αποσύρετε το widget και τα endpoints σταματούν να εξυπηρετούν.
Η δική του σύνδεση κερδίζει πάντα
Μια δημοσιευμένη ροή είναι εφεδρεία, ποτέ υποκατάστατο. Αν όποιος ανοίγει το widget σας έχει δική του σύνδεση OANDA, το widget χρησιμοποιεί τη δική του: τον λογαριασμό του, τα δεδομένα του, τα όριά του. Η ροή συμβουλεύεται μόνο αφού το widget αποτύχει να βρει δική του σύνδεση, και μια αστοχία είναι σιωπηλή: βλέπει το συνηθισμένο συνδέστε αυτόν τον τόπο αντί για ένα νέο σφάλμα προς εκμάθηση.
Αυτά τα endpoints περνούν από τους ίδιους προσαρμογείς τόπων που ήδη έχει η εφαρμογή, οπότε μια δημοσιευμένη ροή επιστρέφει ακριβώς τις ίδιες μορφές με αυτές που βλέπατε όταν φτιάχνατε το widget — σε κάθε ενεργό τόπο του καταλόγου, χωρίς ειδικό κώδικα για κανέναν.
Τι σκόπιμα δεν κάνει
- Ένας κοινόχρηστος πίνακας συναλλαγών σχεδιάζει το διάγραμμά του, όχι το πάνελ λογαριασμού. Είναι η λίστα φραγής που κάνει τη δουλειά της, όχι σφάλμα.
- Ένας επιλογέας συμβόλων προσφέρει μόνο όσα σύμβολα απαριθμήσατε. Ένα widget με ελεύθερη εισαγωγή υποβιβάζεται σε ένα σταθερό σύνολο. Αυτό είναι το αντάλλαγμα για να μην χτιστεί ανοιχτό proxy προς τον χρηματιστή σας.
- Στην ιδιωτική λειτουργία δεν δημοσιεύεται ροή. Εκεί τα διαπιστευτήριά σας ζουν μόνο μέσα στη σφραγίδα αυτής της συσκευής: κανένας διακομιστής δεν τα έχει, άρα κανένας δεν μπορεί να ανανεώσει κάτι για λογαριασμό σας.
- Ένα fork δεν κληρονομεί τη ροή. Οι ροές είναι δεμένες με την καταγωγή ενός widget, οπότε κάθε εγκατεστημένο αντίγραφο επιλύει τα ίδια endpoints και ένα fork δεν επιλύει κανένα.
Είναι μικρό πράγμα να το ανοίξετε, και αλλάζει τι σημαίνει δημοσίευση: ένα widget που μοιράζεστε είναι πλέον ένα widget που οι άνθρωποι μπορούν πραγματικά να τρέξουν.
Ανοίξτε το Nexow, πάρτε ένα widget που χτίσατε πάνω σε σύνδεση με κλειδί, και δημοσιεύστε το με τη ροή ανοιχτή.
Κατασκευάστε το πρώτο σας widget στο επόμενο λεπτό
Η προεπισκόπηση είναι ζωντανή και δωρεάν για δοκιμή. Χωρίς εγγραφή, χωρίς ρύθμιση — απλώς περιγράψτε τι θέλετε να δείτε.

