Laravel 开发 RESTful API 的一些心得

最近用 Laravel 写了一段时间的 API,总结一下本身的心得吧。php

Start

  • API开发咱们能够看到,有些网站用token验证身份,有些用OAuth2.0,当时我也纠结,而后看到一个不错的说法。大方面,会涉及到给别人用的使用OAuth,本身使用的用token就足够了
  • 设计最初,最好在路由加个版本号,方便之后扩展
Route::prefix('v1')->group(function () {
	// more
});

一个简单的接口示例 api实例输出css

验证

  • API 开发总会离不开验证,这里推荐使用jwt-auth,1.0 快要来了,新版本的文档也很清晰
  • 刚用jwt-auth时有疑问,Laravel自带的token验证使用的是数据库api_token字段验证,而不见jwt-auth须要这个
    • 而后想本身看源码,结果QAQ
    • 最后去问了官方 >_<
    • 原来用户的信息已经存储在token中加密
    • 一开始有疑问,这样保存,不会被解密吗(真为本身智商担心 !_!)
    • 后来才想起,jwt一开始就运行php artisan jwt:secret生成了秘钥
    • 你不泄露就保证安全了~~~

路由

  • 固然使用官方api的路由Route::apiResource(),一条更比五条强
  • 路由的名字固然是RESTful的方式
  • 保持动词,复数形式,见名知义
  • 有些长的路由,应该用什么分隔呢?
  • laravel用的是中划线(-),由于谷歌收录时,按中划线划分关键字,国内的是按下划线(_)收录,具体看本身了,我是喜欢下划线 >_<
  • 更多看这里: 路由命名规范

表单验证

可使用控制器自带的表单验证,更推荐使用 表单类,能分离都分离出去,控制器不要处理太多事情。 表单验证 能分离的代码都不要吝啬~~~html

数据转换

  • Laravel自带的API Resource
  • 用起来真的很方便,不过发现一个问题,--collection的格式老是转不过来,后来直接放弃了
  • 单个的使用Resources
  • 集合的使用Resources::collection()发现,特别好用 >_<
  • 不得不说,多对多关联时,Laravel处理得太好了条件关联 数据转换
  • 在上面这个例子中,若是关联没有被加载,则 posts 键将会在资源响应被发送给客户端以前被删除。
  • 在有不肯定是否输出关联数据时,这是一个颇有用的功能!!!

响应输出

当时在 laravel-china 看到的这个帖子,而后以为这个方式不错,因此本身也这样子,使用基类的方法统一响应输出。前端

异常

异常算是一大手笔了,处理好异常,可让你的代码优雅不少。 \App\Exceptions\Handler::render方法能够捕获到不少有用的异常,例如,个人代码是这样写的: 异常捕获 UnauthorizedHttpException这个是捕获jwt异常 ValidationException这个是表单异常,捕获以后,表单错误消息能够很好的格式化, ModelNotFoundException这个是模型找不到的异常,捕获以后,能够直接在控制器直接这样laravel

// 未捕获以前的写法
public function show($id)
{
	$user = User::find($id);
	if (! $user) {
		
	}
	
	// do something
}

// 如今
public function show($id)
{
	$user = User::findOrFail($id);
}
// 甚至这样
public function show(User $user)
{
	// do something
}
  • 下面这两个异常能够不捕获,只是方便开发中查看错误消息 NotFoundHttpException404路由找不到的异常,没什么好说的了 MethodNotAllowedHttpException这个是方法不对应,好比你是get路由,却post请求

文档

  • 差点忘了这个,文档很是很是重要
  • 我是不怎么喜欢在注释写文档的
  • 使用swagger-ui+swagger-edit
    • 下载swagger-ui
    • 只须要dist目录的东西(其余能够删除了)
    • 下载swagger-editor
    • 只要dist目录的东西和根目录的index.html
    • 我还把swagger-editorindex.html改为了edit.html,而后把这两个东西整合到同一个目录(记得修改css,js的位置)
    • 新建两个文件api.json,api.yaml 大概就和图中差很少
    • 要修改图中箭头所示成为api.json的位置 api
  • 访问edit.html能够书写文档
  • 访问index.html能够查看文档
  • edit.html写好以后,导出json,而后粘贴到api.json文件 api
  • 记得也把写好的格式保存到api.yaml,由于清楚缓存以后,下次访问时会消失

本身写了一个packages

  • 就方便建立控制器,验证
  • 全部控制器继承重写过的基类,响应输出方便。 laravel-api-helper
  • 例如完整验证只须要三秒钟
    • 第一秒: php artisan api:auth
    • 第二秒: 出现图表明成功; laravel-api-helper
    • 第三秒: 拿出手臂的劳力士,肯定只过了三秒 手臂的手表
  • 更多的使用:laravel-api-helper

工做和API开发有关,用到其余有经验了再回来补补。git

更多参考

RESTful API 设计指南github

相关文章
相关标签/搜索