Loading [MathJax]/jax/output/CommonHTML/config.js
前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >专栏 >Laravel 开发 RESTful API 的一些心得

Laravel 开发 RESTful API 的一些心得

作者头像
前端教程
发布于 2018-03-29 04:17:14
发布于 2018-03-29 04:17:14
4.2K00
代码可运行
举报
文章被收录于专栏:程序员IT圈程序员IT圈
运行总次数:0
代码可运行

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

Start

API开发我们可以看到,有些网站用token验证身份,有些用OAuth2.0,当时我也纠结,然后看到一个不错的说法。大方面,会涉及到给别人用的使用OAuth,自己使用的用token就足够了

设计最初,最好在路由加个版本号,方便以后扩展。

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
Route::prefix('v1')->group(function () {
    // more
});

如果前端想跨域,请使用这个很方便的包barryvdh/laravel-cors(https://github.com/barryvdh/laravel-cors)

一个简单的接口示例:

验证

API 开发总会离不开验证,这里推荐使用jwt-auth,1.0 快要来了,新版本的文档也很清晰

刚用 jwt-auth时有疑问,Laravel自带的token验证使用的是数据库apitoken字段验证,而不见 jwt-auth需要这个。然后想自己看源码,结果 QAQ,最后去问了官方 ><,原来用户的信息已经存储在token中加密。一开始有疑问,这样保存,不会被解密吗(真为自己智商担忧 !_!)?后来才想起,jwt一开始就运行 php artisan jwt:secret生成了秘钥,你不泄露就保证安全了~~~

路由

当然使用官方 api的路由 Route::apiResource(),一条更比五条强。

路由的名字当然是RESTful的方式。

保持动词,复数形式,见名知义。

有些长的路由,应该用什么分隔呢?

laravel用的是中划线(-),因为谷歌收录时,按中划线划分关键字,国内的是按下划线(_)收录,具体看自己了,我是喜欢下划线 >_<

更多看这里: 路由命名规范(https://laravel-china.org/courses/laravel-specification/502/router)

表单验证

可以使用控制器自带的表单验证,更推荐使用表单类(https://laravel-china.org/docs/laravel/5.5/validation#creating-form-requests),能分离都分离出去,控制器不要处理太多事情。

能分离的代码都不要吝啬~~~

数据转换

Laravel自带的API Resource

用起来真的很方便,不过发现一个问题, --collection的格式总是转不过来,后来直接放弃了。

单个的使用 Resources

集合的使用 Resources::collection()发现,特别好用 >_<

不得不说,多对多关联时, Laravel处理得太好了,条件关联:https://laravel-china.org/docs/laravel/5.5/eloquent-resources#resource-responses。

在上面这个例子中,如果关联没有被加载,则 posts 键将会在资源响应被发送给客户端之前被删除。

在有不确定是否输出关联数据时,这是一个很有用的功能!!!

响应输出

当时在 laravel-china 看到的这个帖子,然后觉得这个方式不错,所以自己也这样子,使用基类的方法统一响应输出。

异常

异常算是一大手笔了,处理好异常,可以让你的代码优雅很多。

\App\Exceptions\Handler::render方法可以捕获到很多有用的异常,例如,我的代码是这样写的:

UnauthorizedHttpException这个是捕获 jwt异常。

ValidationException这个是表单异常,捕获之后,表单错误消息可以很好的格式化。

ModelNotFoundException这个是模型找不到的异常,捕获之后,可以直接在控制器直接这样。

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
// 未捕获之前的写法
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(https://github.com/swagger-api/swagger-ui)
  • 只需要 dist目录的东西(其他可以删除了)
  • 下载swagger-editor(https://github.com/swagger-api/swagger-editor)
  • 只要 dist目录的东西和根目录的 index.html
  • 我还把 swagger-editorindex.html改成了 edit.html,然后把这两个东西整合到同一个目录(记得修改css,js的位置)
  • 新建两个文件 api.json, api.yaml 大概就和图中差不多
  • 要修改图中箭头所示成为 api.json的位置

访问 edit.html可以书写文档,编写语法:https://www.gitbook.com/book/huangwenchao/swagger/details。

访问 index.html可以查看文档。

edit.html写好之后,导出 json,然后粘贴到 api.json文件。

记得也把写好的格式保存到 api.yaml,因为清楚缓存之后,下次访问时会消失

自己写了一个packages

就方便创建控制器,验证,所有控制器继承重写过的基类,响应输出方便。

例如完整验证只需要三秒钟:

第一秒: php artisan api:auth

第二秒:出现图代表成功。

第三秒:拿出手臂的劳力士,确定只过了三秒。

更多的使用:laravel-api-helper(https://github.com/DavidNineRoc/laravel-api-helper)

工作和API开发有关,用到其他有经验了再回来补补。

更多参考

RESTful API 设计指南:http://www.ruanyifeng.com/blog/2014/05/restful_api。

觉得本文对你有帮助?请分享给更多人。

本文参与 腾讯云自媒体同步曝光计划,分享自微信公众号。
原始发表:2018-03-09,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 程序员IT圈 微信公众号,前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体同步曝光计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
暂无评论
推荐阅读
编辑精选文章
换一批
Django跨域(前端跨域)
其实AJAX就是在Javascript中多添加了一个对象:XMLHttpRequest对象。所有的异步交互都是使用XMLHttpServlet对象完成的。也就是说,我们只需要学习一个Javascript的新对象即可。
全栈程序员站长
2022/07/21
8.2K0
Django跨域(前端跨域)
Django---Ajax
Ajax准备知识:json 什么是json? 定义: JSON(JavaScript Object Notation, JS 对象标记) 是一种轻量级的数据交换格式。 它基于 ECMAScript (w3c制定的js规范)的一个子集,采用完全独立于编程语言的文本格式来存储和表示数据。 简洁和清晰的层次结构使得 JSON 成为理想的数据交换语言。 易于人阅读和编写,同时也易于机器解析和生成,并有效地提升网络传输效率。 讲json对象,不得不提到JS对象: 合格的json对象:
用户1214487
2018/01/24
4.9K0
Django---Ajax
Django之json、Ajax简介及实例介绍
JSON 格式于2001年由 Douglas Crockford 提出,目的就是取代繁琐笨重的 XML 格式。
菲宇
2019/06/13
6.8K0
Django之json、Ajax简介及实例介绍
09.Django基础七之Ajax
    AJAX(Asynchronous Javascript And XML)翻译成中文就是“异步的Javascript和XML”。即使用Javascript语言与服务器进行异步交互,传输的数据为XML(当然,传输的数据不只是XML,现在更多使用json数据)。
changxin7
2019/09/30
3.8K0
09.Django基础七之Ajax
ajax全套
对于WEB应用程序:用户浏览器发送请求,服务器接收并处理请求,然后返回结果,往往返回就是字符串(HTML),浏览器将字符串(HTML)渲染并显示浏览器上。
菲宇
2019/06/13
3.2K0
ajax全套
同源策略和跨域解决方案
下表给出了相对http://a.xyz.com/dir/page.html同源检测的示例: 
py3study
2020/01/19
1.6K0
同源策略和跨域解决方案
AJAX
XMLHttpRequest对象有一个onreadystatechange事件,可以监听这五个状态,它会在XMLHttpRequest对象的状态发生变化时被调用 xmlHttp.readyState属性中存放在此时的状态值 通过以上内容,我们可以监听到来自服务器的响应
py3study
2020/01/20
4.4K0
原生——ajax
什么是Ajax?(前后端数据交互) Asynchronous JavaScript and XML(异步JavaScript和XML)
FinGet
2019/06/28
2.1K0
AJAX全套
对于WEB应用程序:用户浏览器发送请求,服务器接收并处理请求,然后返回结果,往往返回就是字符串(HTML),浏览器将字符串(HTML)渲染并显示浏览器上。
用户1214487
2022/03/26
1.7K0
Ajax全接触-imooc
同步——客户端发起请求,服务端需要处理,响应,此时客户端完全等待,当服务器处理完毕,客户端重新载入页面,如果出现错误,再次发生请求,处理,等待...
chenchenchen
2023/01/30
5.9K0
史上最全的AJAX
对于web应用程序:用户浏览器发送请求.服务器接收并处理请求,然后返回结果,往往返回就是字符串(HTML),浏览器将字符串(HTML),渲染并显示浏览器上·
Wyc
2018/09/11
4.5K0
ajax跨域的基本流程
创建XMLHttpRequest对象,也就是创建一个异步调用对象;判断XHR对象属性;创建一个新的HTTP请求,并指定该HTTP请求的方法、URL及验证信息;设置响应HTTP请求状态变化的函数;发送HTTP请求;获取异步调用返回的数据;使用JavaScript和DOM实现局部刷新。
行云博客
2020/07/13
9800
34.Ajax
优先级 如果发送的是【普通数据】 jQuery XMLHttpRequest iframe 如果发送的是【文件】 iframe jQuery(FormData) XMLHttpRequest(FormData) 原生Ajax Ajax主要就是使用 【XmlHttpRequest】对象来完成请求的操作,该对象在主流浏览器中均存在(除早起的IE),Ajax首次出现IE5.5中存在(ActiveX控件) 1、XmlHttpRequest对象介绍 XmlHttpRequest对象的主要方法: a. void op
zhang_derek
2018/04/11
2K0
初学者必看Ajax的总结
image.png 整理 Ajax 的一些常用的基础知识,挺适合初学的朋友 一、Ajax 简介、优劣势、应用场景以及技术 Ajax 简介 : Asynchronous Javascript And XML (异步的 JavaScript 和 XML) 它并不是一种单一的技术,而是有机利用一系列交互式网页应用相关的技术所形成的结合体 AJAX 是一种用于创建快速动态网页的技术。通过在后台与服务器进行少量数据交换,AJAX 可以使网页实现异步更新。这意味着可以在不重新加载整个网页的情况下,对网页的某部分进行更
沈唁
2018/05/24
2.9K0
AJAX和JSON
open方法不会向服务器发送真正请求,它相当于初始化请求并准备发送只能向同一个域中使用相同协议和端口的URL发送请求,否则会因为安全原因而报错。
乐心湖
2021/01/18
2.8K0
AJAX和JSON
Web前端-Ajax基础技术(下)
ajax,web程序是将信息放入公共的服务器,让所有网络用户可以通过浏览器进行访问。
达达前端
2019/07/03
2.6K0
Web前端-Ajax基础技术(下)
JavaWeb——AJAX异步技术实现方式与案例实战(原生的JS方式、使用JQuery方式)
AJAX是一门很重要的技术,主要作用就是增强用户的体验。AJAX全名为:ASynchronous JavaScript And XML,异步的JavaScript和XML。其中同步和异步的差异,以客户端向服务器发送请求及服务器响应的过程,简单说明下:
Winter_world
2020/09/25
4K0
JavaWeb——AJAX异步技术实现方式与案例实战(原生的JS方式、使用JQuery方式)
同源策略及规避方法
A网页设置的 Cookie,B网页不能打开,除非这两个网页"同源"。所谓"同源"指的是"三个相同"。
玖柒的小窝
2021/10/09
6590
Ajax技术详解(上)
我们知道,在没有ajax技术之前,客户端若要与服务端进行数据交互,它的大概流程是:客户端发起一个http请求(也可能是其他的请求)然后处于等待状态,等到服务端将数据发送给客户端,客户端才会进行下一步操作,简单来讲,就是单纯的同步操作。然而,在现如今这个用户至上的年代,任何一个让用户不满的小操作都会导致巨大的流量丢失。
石璞东
2020/05/09
2.1K0
无内鬼 整点AJAX
AJAX 即 “Asynchronous JavaScript and XML”(异步的 JavaScript 与 XML 技术),指的是一套综合了多项技术的浏览器端网页开发技术。AJAX 的概念由 Jesse James Garrett 所提出,说白了就可以使用 JavaScript 代码发送网络请求并处理响应,由浏览器实现。
henu_Newxc03
2021/12/26
5.3K0
相关推荐
Django跨域(前端跨域)
更多 >
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档
本文部分代码块支持一键运行,欢迎体验
本文部分代码块支持一键运行,欢迎体验