thinkphp5的api路由通过route.php配置及route_config_file扩展实现多模块支持,而非专用文件;需开启url_route_on,可配置application/api.php等额外路由文件,配合group、resource或手动规则组织api路径,并注意路由缓存更新。

ThinkPHP5 的 API 路由不是靠单独的“API路由文件”实现的,而是通过标准的 route.php 配置 + 合理的路由规则组织来达成。所谓“API路由文件”只是开发者按模块或用途拆分后的逻辑概念,框架本身不识别 api_route.php 这类命名文件。
如何让 route.php 支持多模块 API 路由
ThinkPHP5 默认只加载 route.php,但你可以用 'route_config_file'=>['route','api','admin'] 扩展配置列表,前提是已在 config/app.php 中开启:
-
'url_route_on'=>true(必须) -
'route_config_file'=>['route','api'](指定额外文件名)
然后在 application/api.php(注意:不是 .php 在 route/ 下,而是在 application/ 根目录)中写:
use think\Route;
Route::group('api/v1', function () {
Route::get('user/:id', 'api/v1.User/read');
Route::post('user', 'api/v1.User/save');
});
⚠️ 注意:application/api.php 是有效路径;route/api.php 不会被自动加载,除非你手动 import 或改配置。
为什么不能直接用 domain 绑定 api.mysite.com?
可以,但容易踩两个坑:
- 域名路由需配合
Route::domain()显式注册,且必须在route.php顶层调用,不能在group内 - 若同时启用
url_route_must => true,又没为该域名定义miss路由,404 会直接抛异常而非 fallback 到 PATH_INFO - 本地开发时 hosts 和 Nginx 配置不同步,常导致
api.mysite.com解析失败却误判为路由问题
推荐初期用路径前缀(如 /api/v1)更可控;上线前再切域名路由,并补全 Route::domain('api', 'api') + Route::miss(...)。
资源路由(Route::resource)适合 API 吗?
适合,但要注意默认行为和 REST 规范的偏差:
-
Route::resource('user', 'api/v1.User')会生成 7 条规则,包括GET user/:id/edit—— 这是 HTML 表单页,在纯 API 场景下无意义 - 它默认把
PUT和PATCH都映射到update方法,但 TP5.0 不区分二者语义,需手动用Request::isPut()/isPatch()分流 - 若想精简,用
only限定方法:Route::resource('user', 'api/v1.User')->only(['index','read','save','update','delete'])
真正要严格遵循 REST,建议放弃 resource,手写 get/post/put 等明确调用,避免隐式规则干扰调试。
最易被忽略的是路由缓存:改完 route.php 或新增 api.php 后,不执行 php think optimize:route,开发环境可能命中旧缓存,导致新规则不生效——尤其在 CLI 命令和 Web 请求混用时。
大量免费API接口:立即使用
涵盖生活服务API、金融科技API、企业工商API、等相关的API接口服务。免费API接口可安全、合规地连接上下游,为数据API应用能力赋能!











