RESTful接口规划

最近新开了一个项目需要重新设计一套针对app的接口
我们使用的是 PHP + laravel
最开始的设计方案是
abc.com/api/v1 作为线上的访问入口
qa.abc.com/api/v1 作为测试环境的访问入口
pre.abc.com/api/v1 作为预发布环境的访问入口
但是看了看网上的设计规范, 比较推荐另外一种方式
api.abc.com和在header中定义version的方式
基于这个规范设计出另外一套接口
api.abc.com 作为线上的入口
qa-api.abc.com 作为测试环境的入口
pre-api.abc.com 作为预发布环境的入口
然后在header中添加version

但是这样设计带来了一个问题, app pc wap共享同一套代码, 针对api的几个特定域名, 需要把这几个特定的域名映射到同一套路由上. 感觉这样设计很扭曲.
还有一个问题就是如果使用api/v1这种设计方法, 我可以把不同的版本生成不同的控制器. 但是如果使用header version的方案, 是不是就是在同一个控制器内部再根据version的值生成不同的数据结构, 随着业务的发展会不会控制器内部的代码复杂度越来越高.
希望大家不吝指教!!!

阅读 2.6k
3 个回答

网上的不一定就是对的,适合的就是好的。我觉得你的就很好。

通过url或者header中体现版本,并不影响你的控制器结构啊。
难道abc.com/api/v1 能指向 /api/controller/v1/XXXController , header中加版本 就没办法指向吗?
当然,我建议是通过文件夹区分版本而不是在控制器内部通过version来判断。

通过文件夹来区分就行了。
网上的文章也只是提供一种选择和思路,具体要怎么选择,看你自己本身的真实环境了。

撰写回答
你尚未登录,登录后可以
  • 和开发者交流问题的细节
  • 关注并接收问题和回答的更新提醒
  • 参与内容的编辑和改进,让解决方法与时俱进
推荐问题