Menschen richtig sind, dass es nicht durch restify unterstützt wird, aber ich dachte, ich würde werfen Sie meine Lösung für dieses Problem in den Mix. Ich mache so etwas wie dieses (Warnung, nicht getesteten Code folgen):
Nachdem ich einen Server erstellen, aber VOR ich die Routen erklären, melde ich einen benutzerdefinierten Parser die URL-style-Version Spezifizierer in ein übersetzen HTTP-style specifier:
server.use(versionParser);
Und versionParser.js sieht ungefähr so aus:
var semver = require('semver');
var restify = require('restify');
module.exports = function (req, res, next) {
// we expect every request to have the form "/api/[api-version]/..."
// verify that the api-version is a valid semver value
var urlPieces = req.url.replace(/^\/+/, '').split('/');
var api = urlPieces[0];
var apiVersion = urlPieces[1];
if (api !== 'api' || !semver.valid(apiVersion)) {
return next(new restify.InvalidContentError({message: "Invalid Version Specifier"}));
}
req.header('Accept-Version', apiVersion);
return next();
}
Auf diese Weise können die restify Routen der Accept-Header-Version überprüfen, da sie von Natur aus tun.
Nebenbei bemerkt: Der semver Teil ist auf diese Antwort wahrscheinlich nicht relevant, aber ich wollte, dass die API-Version in der URL zu überprüfen, ein gültiger semver Wert war, da es Flexibilität in den URL-Werten so ermöglicht, dass ein Benutzer könnte Nutzen Sie die Flexibilität von restify in Versionsspezifizierern.
Ich denke, dass abgesehen von nur diejenigen Routen selbst erklärt ('App.get ('/ v1/action', ...) '), Restify unterstützt diese Art von Schema nicht. – robertklep
@robertklep hm das ist, was ich dachte .. zu schlecht – Tom
Es scheint wie es einfacher sein könnte, etwas wie/api/action zu tun? V = 1, obwohl ich noch eine anmutige Art und Weise, damit umzugehen haben. – jczaplew