您可以使用您的API并在Laravel中吃(消耗)它吗?

我已经制作了一个在Laravel中返回json的API. (路径/ api.php)

现在我想在我的项目Web侧面使用所述API(routes / web.php(包括中间件),刀片视图等).

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

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.但我觉得这不是最好的练习或聪明.除登录和注册之外的其他路由使用存储在会话中的api令牌来进行调用.他们将令牌“x-token”作为标题附加到$internal_request.在中间件中执行此操作更好吗?在某处有一些最好的实现示例吗?

我的API有这样的方法:

POST api / register
检查是否存在必填字段并具有严格格式(验证)

我的网络路线已经/注册

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

所以web应该是api的超集(验证明智).

最佳答案 据我所知,您希望对api和Web请求应用相同的逻辑,您可能只想(a)验证Web请求的表单和/或(b)将响应包装在json中以获取API请求.

我认为最好的方法是为web和api请求引用相同的控制器和方法,例如:

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

在你的routes / api.php中,添加Route :: post(‘/ register’,’RegistrationController @ register)`

所以最终两个请求(api / register和/ register)都命中了同一个控制器
和方法.

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

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);
    }
}
点赞