gpt4 book ai didi

laravel - 你可以拥有你的 API 并在 Laravel 中使用它吗?

转载 作者:行者123 更新时间:2023-12-02 17:00:20 26 4
gpt4 key购买 nike

我制作了一个在 Laravel 中返​​回 json 的 API。 (routes/api.php)

现在我想在我的 web 中使用所述 API - 项目侧(routes/web.php(包括中间件)、 Blade View 等)。

我目前的解决方案是这样的:

public function register(Request $request) {
// password1 == password2 etc (form logic / validation)
$internal_request = Request::create($this->base_api_url . 'register', 'POST');
$internal_request->replace($request->input());
$response = Route::dispatch($internal_request);
}

如果表单有效,则将请求“转发”到我的 api 的 api 对应部分。但我感觉这并不是真正的最佳实践或明智之举。除 login 以外的其他路线和register使用 session 中存储的 api token 进行调用。他们将 token “x-token”作为标题附加到 $internal_request 。在中间件中执行此操作是否更好?某处有一些最佳实现的示例吗?

我的 API 有一个这样的方法:

POST api/register检查所需字段是否存在并且具有正确的格式(验证)

我的网络路线有 /register

这将首先检查密码是否与密码验证输入匹配(pass1 == pass2),然后将其传递给等效的 api。

所以web应该是 api 的超集(验证方面) .

最佳答案

据我了解您的问题,您希望对 api 和 web 请求应用相同的逻辑,并且您可能只想 (a) 验证 web 请求的表单和/或 (b) 将响应包装在 json 中API 请求。

我认为最好的方法是为 Web 和 API 请求引用相同的 Controller 和方法,例如:

在你的routes/web.php中,添加Route::post('/register', 'RegistrationController@register);`

并在您的routes/api.php中添加Route::post('/register', 'RegistrationController@register)`

最终两个请求(api/register 和/register)到达同一个 Controller 以及方法。

现在,在您的 Controller 中,您可以根据请求执行额外的操作,如下所示:

public function register(Request $request) {
if(!$request->expectsJson()) { // you may want to swap this with $request->isJson() depending on the HTTP headers for your app
$this->validateWebRegistration($request); // your validation logic specific to web requests here
}

// common logic here (including validation); store result as $result

if($request->expectsJson()) { // based on HTTP headers as above
return response()->json($result);
} else {
return view('register', $result);
}
}

关于laravel - 你可以拥有你的 API 并在 Laravel 中使用它吗?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/42250310/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com