gpt4 book ai didi

node.js - Restify:URL 中的 API 版本

转载 作者:搜寻专家 更新时间:2023-10-31 22:21:48 24 4
gpt4 key购买 nike

目前正在使用 restify 开发 API,仍然无法习惯在 header 中指定 API 版本。它似乎对用户不太友好。

有没有办法让版本成为url的一部分?

例子是:

http://domain.com/api/v1/action

或者在我的情况下更好:

http://api.domain.com/v1/action

谢谢

最佳答案

您还可以使用 Restify 来定义您的版本:

var server = restify.createServer({
name: 'myAPI',
versions: ['1.0.0', '2.0.0']
});

然后将此中间件与 server.pre 一起使用:

server.pre(function (req, res, next) {
var pieces = req.url.replace(/^\/+/, '').split('/');
var version = pieces[0];

// only if you want to use these 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();
});

最后,在你的 route 你可以做这样的事情:

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
});

例子:

以上示例遵循标准,因为如果未通过 header 或 url 指定版本,则显示最后一个版本。

更新:

我制作了一个插件,在 URL 中包含 API 版本: https://www.npmjs.com/package/restify-url-semver

关于node.js - Restify:URL 中的 API 版本,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/21365693/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com