php+tp框架+API,【路由】利用Thinkphp路由实现API开发版本管理
# 前言
*****
### 在使用Thinkphp接口開發(fā)項(xiàng)目的程中可能會(huì)遇到這樣的場(chǎng)景
+ 準(zhǔn)備將原有系統(tǒng)重構(gòu)一遍,但是出于某種原因,老的系統(tǒng)在未來(lái)一段時(shí)間內(nèi)必須和新的版本共存;
+ APP存在老版本不能強(qiáng)制升級(jí),所以服務(wù)端接口需要同時(shí)兼容新老客戶端同時(shí)正常使用;
+ 其他更多需要新老兼容的場(chǎng)景
如果只是在一套接口中做特殊判斷,將會(huì)變得非常難維護(hù)。所以更好的方法是進(jìn)行版本管理。本文主要分享通過URL路由方式來(lái)達(dá)到版本控制。
在實(shí)際的開發(fā)中不同的版本方法名基本上都是一樣的。以用戶注冊(cè)接口為例,
方法名都是: register
>[success] 兩個(gè)版本通過以下url訪問,URL格式:域名/模塊名/版本號(hào)/控制器/方法名
```
v1版本:http://www.tp5.com/api/v1/user/register
v2版本:http://www.tp5.com/api/v2/user/register
```
首先我們?cè)趓oute.php文件中定義好路由規(guī)則
```php
return [
'api/:version/:controller/:function' => 'api/:version.:controller/:function',
];
```
接下來(lái)看一下目錄結(jié)構(gòu)

其中 application/api/controller/v1/User.php 中文件代碼如下
```php
namespace app\api\controller\v1;
class User
{
public function register()
{
dump('我是v1版本的register方法');
}
}
```
其中 application/api/controller/v2/User.php 中文件代碼如下
```php
namespace app\api\controller\v2;
class User
{
public function register()
{
dump('我是v2版本的register方法');
}
}
```
## 接下來(lái)我們使用postman工具模擬請(qǐng)求 v1和v2版本的url
### v1版本http://www.tp5.com/api/v1/user/register

### v2版本http://www.tp5.com/api/v2/user/register

至此,已經(jīng)完成了最簡(jiǎn)單的通過thinkphp5路由規(guī)則實(shí)現(xiàn)API的版本控制,是不是非常簡(jiǎn)單呢?
> 其他API版本控制的思路
+ 通過域名路由 v1.api.tp5.com v2.api.tp5.com 在route.php中獲取對(duì)應(yīng)版本標(biāo)識(shí)并路由到應(yīng)控制器文件中
+ 在header中傳入version參數(shù),并route.php中獲取對(duì)應(yīng)值再路由對(duì)應(yīng)控制器文件中
+ 直接將版本號(hào)作為參數(shù)傳入進(jìn)行路由~
實(shí)際上thinkphp的路由規(guī)則遠(yuǎn)比想象的要強(qiáng)大靈活很多,建議多閱讀官方ThinkPHP5.1完全開發(fā)手冊(cè)之路由篇 https://www.kancloud.cn/manual/thinkphp5_1/353960 ,希望大家可以結(jié)合自己的業(yè)務(wù)場(chǎng)景充分利用路由的功能讓URL更規(guī)范以及優(yōu)雅,也可隱式傳入額外請(qǐng)求參數(shù),讓自己的系統(tǒng)更加安全,優(yōu)雅!
## 開發(fā)幫助及交流
如您對(duì)本文感興趣想與我聯(lián)系交流 您可以
+ 郵件至:xieyongfa@ecarde.cn
+ QQ:2392523899 [點(diǎn)我聊天](http://wpa.qq.com/msgrd?v=3&uin=2392523899&site=qq&menu=yes&from=message&isappinstalled=0)
+ 微信交流

總結(jié)
以上是生活随笔為你收集整理的php+tp框架+API,【路由】利用Thinkphp路由实现API开发版本管理的全部?jī)?nèi)容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: linux驱动read函数 copyto
- 下一篇: php 字符串 替换 最后,php如何替