Externe Dienste mit API() und den Treibern von NEWAPI() aufrufen
API(name, schema, data, [$]) ruft eine Operation eines externen Dienstes auf, und NEWAPI() registriert den Treiber, der den Aufruf ausführt, sodass der Code deiner Aktionen nicht davon abhängt, wie der Dienst erreicht wird (HTTP, eine Bibliothek, eine Warteschlange...).
NEWAPI('name', driver)registriert den Treiber des Dienstesname('a,b'registriert einen Treiber für zwei Namen undNEWAPI(driver)dendefault).NEWAPI('name', config, driver)speichert zusätzlich einconfig-Objekt, das jeder Aufruf alsoptions.configerhält.- Der Treiber ist
function(options, next).options.nameist der Dienst,options.schemadie Operation,options.datadie Daten undoptions.configdie Konfiguration. Antworte mitnext(error, response). API('name', 'operation', data)gibt einen Builder zurück: Schließe ihn mit.callback($)(die Antwort geht an die Aktion$),.callback(function(err, response) {})oderawait ....promise($)ab..configure({ key: value })ergänztoptions.configfür diesen Aufruf, und.error('text')lässt eine leere Antwort mit dieser Meldung fehlschlagen.- Ist für den Namen kein Treiber registriert, schlägt der Aufruf mit
API is not initializedfehl.
// 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 });
}