如何在 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 5.3 中重定向路由

如何在 Laravel 4 中将一个路由重定向到 HTTPS,将所有其他路由重定向到 HTTP?

如何在不使用Eloquent ORM时构建Laravel应用程序

如何在Laravel 5.2中将表单数据作为路由参数传递