【发布时间】:2016-10-21 10:45:33
【问题描述】:
我已经阅读了很多对 RESTful API 的 URI 进行版本控制的最佳实践,例如(http://api.example.com/v1/users -> http://api.example.com/v2/users 和 HATEOAS),但对我的代码库中的目录或命名空间结构知之甚少( PHP+silex 框架)。
我的代码库现在可以做什么:代码库本身支持 API 的多个版本,通过路由或 Accept 标头识别版本,并且可以根据识别的 API 版本调用不同的控制器/类/方法(例如在 v1 UserController::listUsers() 中,在v2:UserControllerV2::getListUsers())。
随着时间的推移,API 会有越来越多的版本,但在某些时候旧版本应该从代码库中删除。
所以问题是
- 应该对哪些类进行版本控制? (控制器、模型、视图等...)
- 当您涉及到捆绑领域驱动设计时,如何做到这一点? (版本完整的包目录或只是在包内?)
- 它们应该如何进行版本控制? (类继承(如何?),目录结构......)
- 代码重复更少,
- 轻松删除旧版本
- 如果您修复版本之间共享的问题,则副作用更少
当前src 目录结构是例如(public, vendor 高一级):
.
└── TestNext
├── ApiV1
│ └── Route
│ └── ApiV1RoutesProvider.php
├── Configuration
│ ├── Controller
│ ├── Loader
│ │ └── YamlConfigLoader.php
│ ├── Model
│ └── Service
│ └── SymfonyConfigServiceProvider.php
├── Security
│ └── Authenticator
│ └── TokenAuthenticator.php
├── Shared
│ └── Controller
│ └── BaseController.php
├── User
│ ├── Controller
│ │ └── UserController.php
│ ├── Model
│ └── Service
├── Bootstrap.php
├── Console.php
└── Constants.php
【问题讨论】:
标签: php api rest domain-driven-design versioning