若laravel作为后端api接口框架,新下载的laravel需要哪些初始化操作呢?
设置时区和语言
config/app.php >
'timezone' => 'PRC', //时区
'locale' => 'zh-CN', //应用程序语言环境配置
// 其他app.php中没有的配置,可自行添加
'log_max_files' => 30, //日志保存天数
路由服务提供者
App\Providers\RouteServiceProvider.php >
public function boot()
{
Route::pattern('id', '[0-9]+'); //添加参数正则验证
parent::boot();
}
protected function mapApiRoutes()
{
Route::prefix('api') //前缀 domain/api/user/login
->middleware('api') //中间件
->namespace($this->namespace . '\Api\\') //控制器所在目录
->group(base_path('routes/api.php'));//路由文件
}
下面分析下->middleware('api'),api路由默认的中间件api是什么?
App\Http\Kernel.php >
protected $middlewareGroups = [
'web' => [
...
],
'api' => [
'throttle:60,1',
'bindings',
],
];
protected $routeMiddleware = [
'bindings' => \Illuminate\Routing\Middleware\SubstituteBindings::class,
'throttle' => \Illuminate\Routing\Middleware\ThrottleRequests::class,
...
];
throttle
throttle:节流阀。throttle:60,1 :一分钟访问60次,throttle为中间件名称,:后为参数。对应类文件名ThrottleRequests。但这里选择注释的原因:1,控制接口访问频率的,这个很有用。然而它响应内容是一个HTML页面,我们希望得到一个json响应。2,不同接口有不同的限制频率,而不是所有接口频率限制一样。本人认为正确的做法是,自定义该中间件返回Json响应,并在路由文件中为每个接口设置中间件。
bindings
bindings:绑定。对应类文件名SubstituteBindings。将路由参数转化为特定对象的组件。
路由 >
Route::get('user/{userid}', 'UserController@info');
UserController >
public function info(UserModel $userid){..}
它将user/参数对应为UserModel,userid为主键,这样根据userid参数自动实例化为数据库模型对象$userid。
回过头来看路由服务配置,就知道该如何配置了。如果两者都不使用可注释->middleware('api')
protected function mapApiRoutes()
{
Route::prefix('api')
//->middleware('api') //中间件
->namespace($this->namespace . '\Api\\')
->group(base_path('routes/api.php'));
}
auth中间件
检查是否登陆。打开默认的api路由文件
routes\api.php >
Route::middleware('auth:api')->get('/user', function (Request $request) {
return $request->user();
});
auth:api:auth是中间件名称,:是参数。
App\Http\Kernel.php >
protected $routeMiddleware = [
'auth' => \Illuminate\Auth\Middleware\Authenticate::class,
...
];
auth中间件的类文件为Authenticate.php,那查看源码可知,如果验证未通过,抛出Exception,也不是我们希望的Json数据。所以通常要自定义(上面已提到ThrottleRequests中间件同样的问题)。
auth驱动
紧接着上部分,看看auth认证是如何检查是否登陆的。上面已提到auth中间件的源类文件是Authenticate.php,那么看下源码(一般编辑器都能直接跟踪源代码,如果不能,试试ctrl+p快捷键,输入文件名):
\Illuminate\Auth\Middleware\Authenticate.php >
//核心代码
protected function authenticate(array $guards)
{
//guards卫兵
//就是Route::middleware('auth:api')的api参数
if (empty($guards)) {
return $this->auth->authenticate();
}
foreach ($guards as $guard) {
if ($this->auth->guard($guard)->check()) {
return $this->auth->shouldUse($guard);
}
}
throw new AuthenticationException('Unauthenticated.', $guards);
}
那么主要的验证代码是check()函数,如果说web验证是否登陆是根据session,那么接口并没有session。这些配置在配置文件config/auth.php中:
'defaults' => [
'guard' => 'api',
'passwords' => 'users',
],
'guards' => [
'web' => [
'driver' => 'session',
'provider' => 'users',
],
'admin' => [
'driver' => 'session',
'provider' => 'admins',
],
'api' => [
'driver' => 'jwt',
'provider' => 'users',
],
],
在$this->auth->guard($guard)方法时会读取这个文件,如果使用的Route::middleware('auth:api'),那么则是$this->auth->guard('api'),读取到guards数组下的api数组。
'api' => [
'driver' => 'jwt',
'provider' => 'users',
],
api接口,一般选择jwt。
本文详细介绍Laravel作为API后端框架的初始化步骤,包括时区、语言环境配置,路由正则验证,中间件自定义及JWT认证设置,帮助开发者快速搭建稳定、高效的API服务。
1249

被折叠的 条评论
为什么被折叠?



