ForgeTotal.js 5
bg

Total.js 5

Извиквайте външни услуги с API() и драйверите на NEWAPI()

Total.js 5 · total5@0.0.19 apiservicesintegrations Изпълнено с Total.js 5

API(name, schema, data, [$]) извиква операция на външна услуга, а NEWAPI() регистрира драйвера, който прави извикването, така че кодът на вашите действия не зависи от начина, по който се стига до услугата (HTTP, библиотека, опашка...).

  • NEWAPI('name', driver) регистрира драйвера на услугата name ('a,b' регистрира един драйвер за две имена, а NEWAPI(driver) регистрира този по подразбиране, default). NEWAPI('name', config, driver) запазва и обект config, който всяко извикване получава като options.config.
  • Драйверът е 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') кара празен отговор да се провали с това съобщение.
  • Ако за името не е регистриран драйвер, извикването се проваля с 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 });
}