Καλέστε εξωτερικές υπηρεσίες με το API() και τους drivers του NEWAPI()
Το API(name, schema, data, [$]) καλεί μια λειτουργία μιας εξωτερικής υπηρεσίας και το NEWAPI() καταχωρίζει τον driver που κάνει την κλήση, έτσι ώστε ο κώδικας των ενεργειών σας να μην εξαρτάται από το πώς προσεγγίζεται η υπηρεσία (HTTP, μια βιβλιοθήκη, μια ουρά...).
- Το
NEWAPI('name', driver)καταχωρίζει τον driver της υπηρεσίαςname(το'a,b'καταχωρίζει έναν driver για δύο ονόματα και τοNEWAPI(driver)καταχωρίζει τονdefault). ΤοNEWAPI('name', config, driver)αποθηκεύει επίσης ένα αντικείμενοconfigπου κάθε κλήση λαμβάνει ωςoptions.config. - Ο driver είναι
function(options, next). Τοoptions.nameείναι η υπηρεσία, τοoptions.schemaη λειτουργία, τοoptions.dataτα δεδομένα και τοoptions.configη ρύθμιση. Απαντήστε μεnext(error, response). - Το
API('name', 'operation', data)επιστρέφει έναν builder: ολοκληρώστε τον με.callback($)(η απάντηση πηγαίνει στην ενέργεια$),.callback(function(err, response) {})ήawait ....promise($). Το.configure({ key: value })προσθέτει στοoptions.configγια εκείνη την κλήση και το.error('text')κάνει μια κενή απάντηση να αποτύχει με αυτό το μήνυμα. - Αν δεν έχει καταχωριστεί driver για το όνομα, η κλήση αποτυγχάνει με
API is not initialized.
// The driver of a fake weather service: in a real one this would be an HTTP request
NEWAPI('weather', { unit: 'C' }, function(options, next) {
if (options.schema === 'forecast')
next(null, { city: options.data.city, temperature: 21, unit: options.config.unit, service: options.name });
else
next('Unknown operation ' + options.schema);
});exports.install = function() {
ROUTE('GET /forecast/', forecast);
ROUTE('GET /forecast-fahrenheit/', fahrenheit);
ROUTE('GET /unknown/', unknown);
ROUTE('GET /missing/', missing);
ROUTE('GET /promise/', promise);
};
function forecast($) {
API('weather', 'forecast', { city: $.query.city }).callback($);
}
function fahrenheit($) {
API('weather', 'forecast', { city: $.query.city }).configure({ unit: 'F' }).callback($);
}
function unknown($) {
API('weather', 'rain', {}).callback($);
}
function missing($) {
API('nobody', 'forecast', {}).callback($);
}
async function promise($) {
const data = await API('weather', 'forecast', { city: 'Oslo' }).promise($);
$.json({ city: data.city, same: true });
}