用于API版本控制的PHP命名空间约定


PHP Namespace Conventions for Versioning an API?

我正在使用Laravel创建一个版本化的JSON API,然后我将使用AngularJS访问该API以填充我的页面。目前,我正在使用版本化控制器返回JSON(最终我计划实现依赖注入和版本化存储库)。

我试图用App'Controllers'API'v1.0格式命名我的控制器,但当我在浏览器中访问localhost:800/api/1.0/companies(返回JSON)时,我会被告知Class App'Controllers'API'v1.0'CompaniesController does not exist。我猜这是因为.被解释为反斜杠之一?我可以通过将名称空间更改为App'Controllers'API'v1App'Controllers'API'v1'v0来实现应用程序功能,但前者不允许正确的版本控制,而后者似乎有点。。。不雅的。

我应该为我的名称空间使用什么约定来充分地版本化我的API?如有任何建议,我们将不胜感激!:)

API应该只在外部使用主要版本。遵循最佳实践语义版本控制,当您向项目引入向后不兼容的更改时,主要版本会发生更改。

如果你只是添加功能,或者以向后兼容的方式修改现有功能,那么你只需要这样做,你的现有消费者就不会受到影响(不过,如果他们愿意,他们可以利用新的更改)。您的API可以在内部将版本从1.0.0更改为1.1.0,但暴露给消费者的版本仍然只是"v1"。

如果你只是在修补bug,同样的道理也适用。从1.0.1更改为1.0.2内部,但API应保持在"v1"。

现在,如果您重命名/删除资源,或者进行一些其他会破坏现有客户端的剧烈更改,您的内部版本可能会从1.2.0升级到2.0.0,因为破坏向后兼容性需要进行重大版本更改。因此,新的主要版本必须以"v2"的形式向API的消费者公开。

因此,为了与此保持一致,命名空间和URL都应该只反映主要版本(例如"v1"),并且应该确保永远不会破坏主要版本中的向后兼容性。