ForgeTotal.js 5
el

Total.js 5

Καλέστε εξωτερικές υπηρεσίες με το API() και τους drivers του NEWAPI()

Total.js 5 · total5@0.0.19 apiservicesintegrations Εκτελέστηκε με το Total.js 5

Το 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.
definitions/api.js
// 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);
});
controllers/weather.js
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 });
}