Tom*_*mas 7 routes node.js restify
目前正在开发具有restify的API,但仍然不能习惯在头文件中指定API版本.它似乎不是非常用户友好.
有没有办法让版本成为网址的一部分?
示例是:
http://domain.com/api/v1/action
Run Code Online (Sandbox Code Playgroud)
在我的情况下甚至更好:
http://api.domain.com/v1/action
Run Code Online (Sandbox Code Playgroud)
谢谢
Mar*_*nez 14
您也可以使用Restify来定义您的版本:
var server = restify.createServer({
name: 'myAPI',
versions: ['1.0.0', '2.0.0']
});
Run Code Online (Sandbox Code Playgroud)
然后使用此中间件server.pre:
server.pre(function (req, res, next) {
var pieces = req.url.replace(/^\/+/, '').split('/');
var version = pieces[0];
// only if you want to use this routes:
// /api/v1/resource
// /api/v1.0/resource
// /api/v1.0.0/resource
if (!semver.valid(version)) {
version = version.replace(/v(\d{1})\.(\d{1})\.(\d{1})/, '$1.$2.$3');
version = version.replace(/v(\d{1})\.(\d{1})/, '$1.$2.0');
version = version.replace(/v(\d{1})/, '$1.0.0');
}
if (semver.valid(version) && server.versions.indexOf(version) > -1) {
req.url = req.url.replace(version + '/', '');
req.headers['accept-version'] = version;
}
return next();
});
Run Code Online (Sandbox Code Playgroud)
最后,在您的路线中,您可以执行以下操作:
server.get({ path: '/resource/:id', version: '1.0.0' }, function () {
// send object in version 1.0.0
});
server.get({ path: '/resource/:id', version: '2.0.0' }, function () {
// send object in version 2.0.0
});
Run Code Online (Sandbox Code Playgroud)
例子:
以上示例遵循标准,因为如果未通过标头或URL指定版本,则显示最后一个版本.
更新:
我制作了一个插件,在URL中有API版本:https: //www.npmjs.com/package/restify-url-semver
| 归档时间: |
|
| 查看次数: |
6232 次 |
| 最近记录: |