如何在 Laravel 中将我的 API 端点路由为 api.domain.com 而不是 domain.com/api
Posted
技术标签:
【中文标题】如何在 Laravel 中将我的 API 端点路由为 api.domain.com 而不是 domain.com/api【英文标题】:How to route my API endpoints in Laravel as api.domain.com instead of domain.com/api 【发布时间】:2020-01-30 06:09:28 【问题描述】:我是第一次使用 Laravel 5.8 构建一个 RESTful API。
我希望我的routes/api.php
指向api.mysite.test
我的问题与Laravel 5.8 use subdomain as API endpoint beside domain.com/api非常相似
上述问题的公认答案是
至于 API 子域,我只是将它停放在主域之上。那你就不用担心它指向什么目录了。
我不是很了解,但我希望能够将mysite.test
用作Web界面,呈现API。
到目前为止,我从RouteServiceProvider.php
中的mapApiRoutes
中删除了前缀并尝试连接子域
protected function mapApiRoutes()
Route::domain('api.'.url('/'))
->middleware('api')
->namespace($this->namespace)
->group(base_path('routes/api.php'));
我的routes/api.php
:
<?php
use Illuminate\Http\Request;
Route::middleware('auth:api')->get('/user', function (Request $request)
return $request->user();
);
Route::apiResource('resources', 'ResourceController');
在/etc/hosts
:
192.168.10.10 mysite.test
在.env
:
APP_URL=mysite.test
在config/app.php
'url' => env('APP_URL'),
当我尝试访问我的资源时
GET api.mysite.test/resources
导致Could do not get any response
这也让我很困扰
>>> url('/')
=> "http://localhost/mysite.test"
而不是我在.env
中所说的mysite.test
【问题讨论】:
您在 mapApiRoutes 中所做的更改是您应该做的。尝试在您的主机文件中添加 192.168.10.10 api.mysite.test,以及 当我为 GET api.mysite.test/resources 添加192.168.10.10 api.mysite.test
到 /etc/hosts
时,我收到状态为“404 未找到”的 html 响应
如果我在 mapApiRoutes 中硬编码 Route::domain('api.mysite.test')
可以正常工作,但为什么 url('/')
会生成 "http://localhost/mysite.test"
?很奇怪吗?
【参考方案1】:
我把自己整理好了。
所以首先正如Mauro Baptista 在 cmets 中指出的那样,所有子域都必须添加到/etc/hosts
。就我而言
192.168.10.10 mysite.test
192.168.10.10 api.mysite.test
事实证明他们共享相同的IP地址没有问题。
第二个问题是我在RouteServiceProvider.php
中生成的URL
Route::domain('api.'.url('/'))
没有生成有效的 URL。
相反,正确的语法是Route::domain('api.'.parse_url(config('app.url'), PHP_URL_HOST))
感谢Adding a Subdomain to Your Laravel Application
【讨论】:
Route::domain(env('app_domain'))
does 如果您添加“app_domain”并在 .env 下分配 api.mysite.test 也可以使用以上是关于如何在 Laravel 中将我的 API 端点路由为 api.domain.com 而不是 domain.com/api的主要内容,如果未能解决你的问题,请参考以下文章
将自定义中间件添加到 Laravel Passport 端点
如何使用 API 中间件在 Laravel 中测试 PHPUnit 一个经过身份验证的用户?
如何在 Laravel 4 中将一个路由重定向到 HTTPS,将所有其他路由重定向到 HTTP?