[ Laravel从入门到精通 ] 编写 JSON API —— RESTful 风格 API 设计原则与最佳实践

栏目: PHP · 发布时间: 5年前

内容简介:在移动互联网时代,Laravel 开发者日常接触最多的任务应该就是编写 JSON API 接口,基于 RESTful 风格或类 RESTful 风格,以便允许第三方应用/客户端应用与后台应用通过这些 API 接口进行交互。在 Laravel 项目中实现 JSON API 非常简单,框架底层为此做了大量的工作,提供了大量相关的方法、与之相关的资源控制器、以及 API 资源类、API 认证实现等。在「编写 JSON API」这一系列教程中,学院君将围绕如何构建 JSON API 展开,我们将一起学习编写 API

概述

在移动互联网时代,Laravel 开发者日常接触最多的任务应该就是编写 JSON API 接口,基于 RESTful 风格或类 RESTful 风格,以便允许第三方应用/客户端应用与后台应用通过这些 API 接口进行交互。

Laravel 项目中实现 JSON API 非常简单,框架底层为此做了大量的工作,提供了大量相关的方法、与之相关的资源控制器、以及 API 资源类、API 认证实现等。在「编写 JSON API」这一系列教程中,学院君将围绕如何构建 JSON API 展开,我们将一起学习编写 API 的一些基本原则、Laravel 框架官方提供的用于编写 API 的 工具 、以及一些知名的相关第三方扩展包。

我们首先从编写 JSON API 的基本原则说起。

RESTful 风格 API

REST 是目前最流行的 API 接口设计规范,其全名是 Representational State Transfer,中文译作表现层状态转化,这一规范最早由 HTTP 协议的主要设计者 Roy Thomas Fielding 于 2000 年在他的博士论文中提出,主要目的是便于在不同程序在网络中传递信息。如果一个 API 接口设计符合 REST 规范,我们就将这样的 API 称之为 RESTful 风格 API。

要理解 REST 规范,我们需要把把规范名称拆开来看:

表现层

所谓表现层,指的是 Web 资源的表现层。

在互联网中,每一个 URL 都唯一标识一个独立的 Web 资源,这些资源可能是文本、图片、视频等,而资源的表现层,指的是资源具体呈现的外在表现形式,比如文本可能以 HTML、XML、JSON 等格式呈现,URL 的局限性是只能标识资源的位置,不能标识资源的表现形式,资源的表现形式通常在 HTTP 报文首部通过指定字段来表示,比如我们在请求头中通过 Accept 字段来标识客户端支持的内容类型(表现形式),在响应头中通过 Content-Type 字段来标识返回响应实体的内容类型(表现形式)。

状态转化

当客户端请求服务器上某个 Web 资源(即请求某个 URL)时,有可能会涉及到资源的状态转化,这些状态转化是基于资源的表现层之上的。而要让服务器资源发生状态转化,势必要让客户端使用某种手段对服务器资源进行操作,而在 HTTP 通信中,这些手段就是 HTTP 的请求方法:通过 GET 方法获取资源,通过 POST 方法创建资源,通过 PUT/PATCH 方法更新资源,通过 DELETE 方法删除资源。这些状态转化是基于资源的表现层之上的,通常我们使用的是 JSON 格式数据。

综合上述,RESTful 风格的 API 设计是围绕 Web 资源展开的,在基于 HTTP 协议的 Web 服务中,我们通过 URL 来表示资源的位置,通过在 HTTP 报文首部中设置相应的首部字段来表示资源的类型,资源的位置+类型+实体数据合起来称作资源的表现层,客户端与服务端的交互过程中,对资源的请求和访问可能导致其表现层状态的转化,比如获取、新增、更新、删除等,而这些状态变化则是通过 HTTP 请求方法来实现。

最佳实践

了解了 RESTful 的概念和原则之后,我们来看一下 RESTful 风格 API 的最佳实践:

  • 围绕「资源」展开,且这些资源通过 URL 进行标识,比如 /posts 用于表示所有文章, /posts/15 用于表示 ID 为 15 的文章,至于资源名称用单数还是复数,没有统一规定,但通常我们使用复数,另外 URL 要尽可能简单,不要拖泥带水;
  • 与资源的交互通过 HTTP 请求方法来实现,而不是将操作动作包含到 URL 中,比如 GET /posts/15 用于获取 ID 为 15 的文章, DELETE /posts/15 用于删除 ID 为 15 的文章;
  • 接口的设计需要遵循无状态原则,不同的接口请求之间不要有持久化的 Session 认证,每个接口请求都需要自己独自去认证;
  • 返回的响应状态码尽可能精准描述服务器处理结果,比如成功用 2XX 状态码,重定向用 3XX 状态码,资源不存在用 404,没有权限用 403,需要认证用 401,服务器错误用 5XX 状态码,并且对异常情况尽可能在响应实体中予以说明;
  • 约定在客户端与服务器交互过程中以 JSON 格式传递数据,即资源的外在表现形式是 JSON。

以前面编写的待办任务项目为例,我们在 Laravel 中通过 Artisan 命令创建资源控制器后,在 routes/api.php 中通过 Route::resource('tasks', 'TaskController'); 注册路由,系统会自动为我们构建遵循 RESTful 风格的 API 接口骨架:

[ Laravel从入门到精通 ] 编写 JSON API —— RESTful 风格 API 设计原则与最佳实践

下一篇教程我们将编写对应的控制器方法来实现基于 RESTful 风格的 JSON API 接口。


以上就是本文的全部内容,希望对大家的学习有所帮助,也希望大家多多支持 码农网

查看所有标签

猜你喜欢:

本站部分资源来源于网络,本站转载出于传递更多信息之目的,版权归原作者或者来源机构所有,如转载稿涉及版权问题,请联系我们

深入理解Nginx(第2版)

深入理解Nginx(第2版)

陶辉 / 机械工业出版社 / 2016-2 / 99.00元

本书致力于说明开发Nginx模块的必备知识,第1版发行以后,深受广大读者的喜爱.然而由于Ng,nx功能繁多且性能强大,以致必须了解的基本技能也很庞杂,而第1版成书匆忙,缺失了几个进阶的技巧描述,因此第2版在此基础上进行了完善。 书中首先通过介绍官方Nginx的基本用法和配置规则,帮助读者了解一般Nginx模块的用法,然后重点介绍了女口何开发HTTP模块(含HTTP过滤模块)来得到定制化的Ng......一起来看看 《深入理解Nginx(第2版)》 这本书的介绍吧!

HTML 编码/解码
HTML 编码/解码

HTML 编码/解码

XML 在线格式化
XML 在线格式化

在线 XML 格式化压缩工具

HEX CMYK 转换工具
HEX CMYK 转换工具

HEX CMYK 互转工具