值为 post data 的 API 路由前缀

Posted

技术标签:

【中文标题】值为 post data 的 API 路由前缀【英文标题】:API route prefix with a value of post data 【发布时间】:2021-11-04 12:01:39 【问题描述】:

是否可以有一个动态 API 路由前缀,其值基于发布请求数据中的 organization 字段?

比如post请求数据是:

id: 1, name: 'John Doe', organization: 'CISCO'

我想要的路线是:

Route::prefix('CISCO')->group(function() 
    Route::post('create', [Controller::class, 'create'];
)

如果不可能,是否有任何其他方法可以传递 organization 值,以便我能够构建动态前缀路由?

【问题讨论】:

【参考方案1】:

在您的示例中,CISCO 是您 URL 中的一个参数。

你可以这样做:

Route::prefix('organization')->group(function() 
    Route::post('create', [Controller::class, 'create'];
);

通往这条路线:

POST http://youdomain.com/CISCO/create

然后在你的控制器中:

public function create($organization)

    dd($organization); //CISCO


小心使用这样的前缀,因为它会导致路由问题。例如,如果您有另一条这样的路线:

Route::prefix('organization')->group(function() 
    Route::post('create', [Controller::class, 'create'];
);

Route::prefix('shop')->group(function() 
    Route::post('create', [ShopController::class, 'create'];
);

Laravel 将很难理解它应该使用哪个路由。

这里的好习惯是添加另一个前缀,所以看起来像这样:

Route::prefix('organization/organization')->group(function() 
    Route::post('create', [Controller::class, 'create'];
);

Route::prefix('shop/shop')->group(function() 
    Route::post('create', [ShopController::class, 'create'];
);

另外,请记住,当您有多个路由使用它时,使用前缀很有用。如果你只有一条路线,你应该只做这样的事情:


Route::post('organization/organization/create', [Controller::class, 'create'];
Route::post('shop/shop/create', [ShopController::class, 'create'];

【讨论】:

感谢@toyi,由于我的声誉低,目前我无法投票。将在 4 分钟内接受此答案。 谢谢!很高兴它解决了你的问题。我已经用一些可能对您有用的附加信息更新了我的答案。祝你有美好的一天:)

以上是关于值为 post data 的 API 路由前缀的主要内容,如果未能解决你的问题,请参考以下文章

nodejs路由的部分通配

.Net Core Web API,根据值创建路由逻辑到具有相同路由前缀的不同控制器

一切正常,但我更改了路由文件以添加前缀。它开始显示控制器不存在的反射异常

关于eShopOnContainers api网关路由前缀的问题

仅公开路由的 .NET OData API 子集(排除 API 返回 404)

在 Azure Functions 上使用不同的路由前缀