2

我正在使用 Laravel 创建一个版本化的 JSON API,然后我将使用 AngularJS 访问它来填充我的页面。目前我正在使用版本化控制器返回 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\v1我可以通过将命名空间更改为or来使应用程序功能App\Controllers\API\v1\v0,但前者不允许正确的版本控制,而后者似乎有点......不优雅。

我应该为我的命名空间使用哪些约定来充分版本化我的 API?任何意见,将不胜感激!:)

4

1 回答 1

5

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

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

如果您只是修补错误,则同样适用。内部从 1.0.1 更改为 1.0.2 ,但 API 应保持在“v1”。

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

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

于 2013-09-20T21:02:23.133 回答