像 Twilio 一样按日期对 REST api 进行版本控制有什么好处?

2024-07-04

基本上,我认为对 REST api 进行版本控制是个好主意。这是常识。通常您会遇到两种执行此操作的方法:

  • 或者,您的 url 中有一个版本标识符,例如/api/v1/foo/bar,
  • 或者,您使用标头,例如Accept: vnd.myco+v1.

到目前为止,一切都很好。这是什么几乎所有大公司都这样做 http://www.lexicalscope.com/blog/2012/03/12/how-are-rest-apis-versioned/。两种方法都有其优点和缺点,并且讨论了很多此类内容here https://stackoverflow.com/questions/389169/best-practices-for-api-versioning.

现在我在 Twilio 看到了一种完全不同的方法,如上所述here https://blog.apigee.com/detail/restful_api_design_tips_for_versioning。他们使用日期:

在编译时,开发人员会包含编译代码时应用程序的时间戳。该时间戳出现在所有 HTTP 请求中。

当请求进入 Twilio 时,他们会进行查找。根据时间戳,他们可以识别创建此代码时有效的 API,并进行相应的路由。

这是一个非常聪明和有趣的方法,尽管我认为它有点复杂。例如,很难理解时间戳是编译时间还是 API 发布时的时间戳。

现在,虽然我不知何故发现这也很聪明,但我想知道这种方法的真正好处是什么。当然,这意味着您只需记录 API 的一个版本(当前版本),但另一方面,它使得跟踪已更改的内容变得更加困难。

有谁知道这种方法的优点是什么,那么为什么 Twilio 决定这样做呢?

请注意,我知道这个问题听起来好像答案主要基于意见,但我猜 Twilio 这样做有充分的技术理由。因此,请不要以主要基于意见的方式关闭这个问题,因为我希望答案不是这样。


有趣的问题,+1,但据我所知,他们只有两个版本:2008-08-01 and 2010-04-01。所以从我的角度来看,这只是另一种拼写方式v1 and v2所以我不认为有技术原因,只是偏好。

这是我在他们的决定中所能找到的全部:https://news.ycombinator.com/item?id=2857407 https://news.ycombinator.com/item?id=2857407

EDIT:请务必阅读下面的评论,其中 @kelnos 和 @andes 提到使用这种方法来版本 API 的优点。

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

像 Twilio 一样按日期对 REST api 进行版本控制有什么好处? 的相关文章

  • 为什么要为 RESTful API 创建单独的应用程序?

    Yii 2 的指南中说 虽然不是必需的 但建议您开发 RESTful API 作为一个单独的应用程序 与您的 Web 前端不同 后端更方便维护 Source RESTful Web 服务 快速入门 http www yiiframework
  • Angular 2 Spring 安全 CSRF 令牌

    大家好 我在为我的应用程序设置安全解决方案时遇到问题 所以我有一个 REST API 后端 运行在http 本地主机 51030 http localhost 51030并使用 Spring Framework 进行开发 对于前端 我有一个
  • JAX-RS框架[关闭]

    Closed 这个问题不符合堆栈溢出指南 help closed questions 目前不接受答案 我一直在使用 JAX RS 参考实现 泽西岛 进行一些工作 我知道至少有两个其他框架 Restlet 和 Apache CXF 我的问题是
  • 获取访客的 Optimizely A/B 测试和变化

    当我在网站上运行实验时 我希望能够找出当前访问者看到的测试和变体 我无法找到如何做到这一点优化Javascript API https www optimizely com docs api 您可以获得第一个正在运行的实验的 ID 假设您有
  • REST 比 GraphQL 更适合的项目? [关闭]

    Closed 这个问题是基于意见的 help closed questions 目前不接受答案 根据我阅读的文章 GraphQL 在往返方面更加资源高效 并且它还可以完成 REST 可以提供的功能 鉴于 Web 应用程序将从头开始 软件架构
  • 我应该根据当前的内部 api 创建公共 api

    我的项目是拥有公共网站和内容管理系统 CMS 我正在使用 Lambda 和 API Gateway 作为 api CMS 当前有一个 api GET 请求来获取下表中的所有数据 横幅 表 属性 id 字符串 主键 分区键 标题 字符串 is
  • Office 365 REST Api 和 Microsoft Graph 之间的区别

    我想知道 Office 365 REST API 和 Microsoft Graph 之间的区别 因为我们可以找到这两者的类似功能 https msdn microsoft com en us office office365 howto
  • Linux 相当于 GetCommandLine 和 CommandLineToArgv?

    我想知道是否有一些 API 可以在 Linux 上获取当前进程的命令行参数 我想我是非常不清楚的 该问题的真正目的是通过命令行参数传递 unicode 文件名 从文件中读取 proc self cmdline 例如 wallyk zf od
  • 如何从 Skyscanner API post 请求检索会话密钥 - Ruby

    在我的应用程序中 我想按我使用过的航班详细信息获取实时价格天空扫描仪 API http business skyscanner net portal en GB Documentation FlightsLivePricingList 我在
  • Office 加载项 Outlook API 使用 displayNewMessageForm 方法附加文档问题

    我正在开发 Outlook 的 Office 插件 需要打开带有预定义附件的新邮件 尝试从当前项目 消息 获取附件 如下所示 Office context mailbox item attachments 这是一个输出 我得到附件类型 id
  • Jersey/JAX-RS :在响应标头中返回内容长度而不是分块传输编码

    我正在使用 Jersey 创建 RESTful API 资源 并且ResponseBuilder生成响应 RESTful 资源的示例代码 public class infoResource GET Path service id Produ
  • 如何在RESTful API中使用OpenID?

    我正在使用 RESTful API 构建基于 Pylons 的 Web 应用程序 该应用程序目前缺乏任何身份验证 因此 我将实现这一点 并且为了避免存储用户密码时出现的所有麻烦和谨慎 我想使用 OpenID 进行身份验证 最好的方法是什么
  • REST - PUT 方法在省略可选字段时是否必须删除该字段?

    我有资源Car其中有一些必填字段和其他可选字段 The Car是根据以下请求创建的 POST cars plate XYZ A2C4 color blue owner John OPTIONAL REST 客户端想要更新这辆车的所有必需信息
  • 如何从 Instagram API 中提取 cookie

    我的任务是保存用户的故事 所以我正在深入研究 Instagram API 目前我知道抓取用户的故事是非官方的 所以我们正在使用https i instagram com api v1 feed reels tray 该请求需要一个 cook
  • Laravel API TokenMismatchException

    我有一个带有发布数据的 API 调用 假设这是登录过程 使用 Chrome 的 Postman 扩展 我通过 POST 发送用户名和密码以登录用户 但我收到了这样的消息 Illuminate Session TokenMismatchExc
  • Spring 4.0.0 向后兼容

    我进行了搜索 但找不到任何表明 Spring 4 0 0 不完全向后兼容 Spring 3 x 的内容 确实是这样吗 如果您已经更新了第三方依赖项并更新了项目中的任何 Spring 弃用 那么您应该是安全的 Spring Framework
  • 如何在 Jersey Rest 中忽略 JSON 对象以及属性编辑

    作为我的要求的一部分 我公开了一个 Web 服务 该服务将 Employee 类作为 JSON 格式的输入 员工类别如下 如果您看到类中有 3 个属性 例如状态 密码 创建时间 现在我试图阻止用户提供状态和创建时间等属性 我的意思是说我不想
  • 在 PHP 中创建 RESTful API?

    我开发了一个非常快速且简单的 PHP 应用程序 用于从 XML 文件读取分类广告并允许用户对其执行 CRUD 操作 这是一项家庭作业 我现在的任务是将此应用程序开发为 RESTful 服务 这位教授实际上似乎没有任何 RESTful 服务的
  • 逻辑和物理 URL

    这个问题是我之前问题的延伸 此网络服务是否安静 https webmasters stackexchange com questions 49832 what qualifies as a rest web service尝试更好地理解 R
  • Laravel Passport 密码授予令牌:自己的移动应用程序

    所以我的移动应用程序将是客户端 我为其生成了一个 client id 和一个 client secret 使用移动应用程序的用户必须使用其用户名 密码登录 我应该在哪里存储 client id 和 client secret 是否可以公开它

随机推荐