Wywołuj usługi zewnętrzne przez API() i sterowniki NEWAPI()
API(name, schema, data, [$]) wywołuje operację usługi zewnętrznej, a NEWAPI() rejestruje sterownik, który wykonuje wywołanie, dzięki czemu kod Twoich akcji nie zależy od tego, jak dociera się do usługi (HTTP, biblioteka, kolejka...).
NEWAPI('name', driver)rejestruje sterownik usługiname('a,b'rejestruje jeden sterownik dla dwóch nazw, aNEWAPI(driver)rejestruje domyślny,default).NEWAPI('name', config, driver)zapisuje też obiektconfig, który każde wywołanie otrzymuje jakooptions.config.- Sterownik to
function(options, next).options.nameto usługa,options.schemaoperacja,options.datadane, aoptions.configkonfiguracja. Odpowiedz przeznext(error, response). API('name', 'operation', data)zwraca builder: zakończ go przez.callback($)(odpowiedź trafia do akcji$),.callback(function(err, response) {})lubawait ....promise($)..configure({ key: value })dodaje dooptions.configdla tego wywołania, a.error('text')sprawia, że pusta odpowiedź kończy się błędem z tym komunikatem.- Jeśli dla nazwy nie zarejestrowano sterownika, wywołanie kończy się błędem
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 });
}