首页 » PHP教程 » api接口php模板技巧_3分钟短文太爽了用Laravel写API接口

api接口php模板技巧_3分钟短文太爽了用Laravel写API接口

访客 2024-12-07 0

扫一扫用手机浏览

文章目录 [+]

本期为大家说一说用laravel写restful风格的API,看看能有多大略。

以路由开端

写API接口,与传统的渲染前端模板页面有什么差异?少了视图,只须要准备好数据, 并按照规则格式化,返回就可以了。

api接口php模板技巧_3分钟短文太爽了用Laravel写API接口

laravel默认的api接口路由在 routes/api.php 文件内定义,默认的情形下预定义了一个资源类型的api接口,代码如下:

api接口php模板技巧_3分钟短文太爽了用Laravel写API接口
(图片来自网络侵删)

Route::middleware('auth:api')->get('/user', function (Request $request) { return $request->user();});

调用了 auth:api 中间件用于验证用户的授权,如果授权通过,声明的get方法获取用户的信息,并返回 User 模型。
这在之前的章节是很常见的操作,我们不做赘述了。

那么这个路由文件,是什么时候加载上去的呢?在文件 app/Providers/RouteServiceProvider.php 内,看这样一段:

protected function mapApiRoutes(){ Route::prefix('api') ->middleware('api') ->namespace($this->namespace) ->group(base_path('routes/api.php'));}

该做事供应者声明路由利用 api 字符前缀,并调用 api 中间件,该中间件定义在 app/Http/Kernel.php 文件内:

protected $middlewareGroups = [ 'api' => [ 'throttle:60,1', \Illuminate\Routing\Middleware\SubstituteBindings::class, ],];

至于命名空间 $this->namespace 一样平常返回 App\Http\Controllers,我们为了区分API与其他运用,在目录 app/Http/Controller 下创建 API 目录,用于存储所有API干系的掌握器。

那么上述的 RouteServiceProvider.php 文件内 mapApiRoutes 方法内的 namespace 须要这样写:

->namespace($this->namespace . '\API')

仍旧以 Event 模型作为示例,在 routes/api.php 文件内声明一个资源类型的路由:

Route::resource('/events', 'API\EventsController');

把稳命名空间上多出来的前缀 API\ ,这解释我们是把 EventController 文件放在了 API 目录下。

用户权限

让我们把目光还聚焦在系统默认声明的那条路由:

Route::middleware('auth:api')->get('/user', function (Request $request) { return $request->user();});

把稳中间件 auth:api,由于api要求是无状态的,每次要求之间没有任何关联,以是利用用户权限区分资源的返回。
那么我们怎么拿到用户授权呢?这在 config/auth.php 文件内定义,看系统自带的这一段配置代码:

'guards' => [ 'api' => [ 'driver' => 'token', 'provider' => 'users', 'hash' => false, ],],

这一段定义了我们利用何种办法认证用户的身份。
默认的驱动 token 定义在框架文件 laravel/framework/src/Illuminate/Auth/TokenGuard.php 内。
长话短说,默认布局类传入的字段如下:

UserProvider $provider,Request $request,$inputKey = 'api_token',$storageKey = 'api_token',$hash = false

大略说,便是利用 users 表的 api_token 字段用户鉴权。
那么默认我们 users 表显然短缺一个这样的字段,现在利用迁移文件补上:

php artisan make:migration add_api_token_field_to_users_table --table=users

首先是迁移方法 up 函数:

public function up(){ Schema::table('users', function (Blueprint $table) { $table->string('api_token', 60)->unique(); });}

还有回滚利用的 down 方法:

public function down(){ Schema::table('users', function (Blueprint $table) { $table->dropColumn('api_token'); });}

这些都是常规操作,我们在之前的章节,利用了N多次了。
实行指令迁移数据库:

php artisan migrate看看效果

准备好了路由,而且路由内声明了一个get方法返回用户模型数据。
也准备好了数据库表字段 api_token。
我们在数据库表内找到一个用户数据,把api_token值设置为 1234,用于测试。

现在在浏览器内要求类似如下的url地址:

http://www.example.com/api/user?api_token=1234

如无非常,顺利会输出一个 json 字符串,

{ "id":1, "provider":null, "provider_id":null, "first_name":"Tom", "last_name":"Hanks", "email":"tom@admin.com", "city":"", "state_id":null, "zip":"43016", "lat":null,"lng":null, "timezone":"America\/New_York", "title":"Laravel Developer", "created_at":"2020-10-14 17:46:19", "updated_at":"2020-10-14 17:46:20", "last_login_at":null, "is_admin":0, "api_token":"1234"}

这个json格式的数据是怎么来的呢?是在路由内,$request->user() 方法返回的User模型,利用 toArray() 格式化方法得到的。
为了演示,很多字段与实际可能有所出入。

特殊须要把稳的是,关键的密码字段,以及 token 字段,是默认隐蔽的,这得益于 User 模型内 $hiden 属性的定义:

protected $hidden = [ 'password', 'remember_token',];

这些字段都对对外不公开访问。

写在末了

本文先容了如何声明api地址,已经阐明了api从中间件到路由的由来,明白了api授权的办法,可以为我们更灵巧地定制授权办法供应便利。
这在laravel内都是可插拔的,更换为我们的逻辑代码就可以愉快事情了。

Happy coding :-)

我是@程序员小助手,专注编程知识,圈子动态的IT领域原创作者

标签:

相关文章

介绍白点控制之路,从原理到方法

白点,作为生活中常见的现象,无处不在。对于如何控制白点,许多人却感到困惑。本文将从原理出发,探讨白点的控制方法,并结合实际案例,为...

PHP教程 2025-01-03 阅读1 评论0

介绍直播王者,如何开启你的电竞直播之旅

随着电竞产业的蓬勃发展,越来越多的年轻人投身于电竞直播行业。王者荣耀作为一款备受欢迎的MOBA手游,吸引了大量玩家和观众。如何开启...

PHP教程 2025-01-03 阅读1 评论0