Извиквайте външни услуги с API() и драйверите на NEWAPI()
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.
// 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 });
}