# Restful API
>[success]`Restful API`是目前`Web API` 设计中比较流行的一种设计风格。
## Restful API
>[info]RESTful是一种软件架构风格、设计风格,而**不是**标准,只是提供了一组设计原则和约束条件。
>[danger]对于这种风格,ThinkPHP框架和laravel框架都给了很好的支持。
### 一、常用的HTTP动词
>[success]这种风格对于熟悉ThinkPHP框架的应该都比较熟悉。
~~~
* GET:读取(Read)
* POST:新建(Create)
* PUT:更新(Update)
* PATCH:更新(Update),通常是部分更新
* DELETE:删除(Delete)
~~~
>[danger]大家可能会发现,通常情况下的网络请求主要是`POST`和`GET`。通常情况下客户端是不支持除`GET`和`POST`之外的请求方式的。这里的解决方案就是:客户端发出的 HTTP 请求,要加上`X-HTTP-Method-Override`属性,来指定请求方式。
~~~http
POST /api/Person/4 HTTP/1.1
X-HTTP-Method-Override: PUT
~~~
### 二、URI与URL
#### URI
>[info]URI,统一资源标志符(Uniform Resource Identifier, URI),表示的是web上每一种可用的资源
URI通常由三部分组成:
①访问资源的命名机制;
②存放资源的主机名;
③资源自身的名称。
#### URL
>[danger]URL是URI的一个子集。
URL的格式由三部分组成:
①第一部分是协议(或称为服务方式)。
②第二部分是存有该资源的主机IP地址(有时也包括端口号)
③第三部分是主机资源的具体地址,如目录和文件名等。
### 三、端点设计
>[success]端点是指用于访问API的URI
设计原则
1. 短小便于输入的URI
2. 人可以读懂的URI
3. 没有大小写混用的URI
4. 修改方便的URI
5. 不会暴漏服务器端架构的URI
6. 规则统一的URI
例:
|目的|端点|方法|
|-|-|-|
|获取用户信息列表|http://api.yifeng.com/v1/users|GET|
|新用户注册|http://api.yifeng.com/v1/users|POST|
|获取特定用户信息|http://api.yifeng.com/v1/users/:id|GET|
|更新用户信息|http://api.yifeng.com/v1/users/:id|PUT/PATCH|
|删除用户信息|http://api.yifeng.com/v1/users/:id|DELETE|
### 四、HTTP状态码
客户端的每一次请求,服务器都必须给出回应。回应包括 HTTP 状态码和数据两部分。当然,也可以根据需求再返回一个 业务状态码。具体的规范可以自行设定。
HTTP 状态码就是一个三位数,分成五个类别。
|状态码|含义|
|-|-|
|1字头|消息|
|2字头|成功|
|3字头|重定向|
|4字头|客户端原因引起的错误|
|5字头|服务器端原因引起的错误|
主要的状态码
|状态码|名称|含义|
|-|-|-|
|200|OK|请求成功|
|201|Created|请求成功,新资源建立|
|202|Accept|请求成功|
|204|No Content|请求成功,没有内容|
|300|Multiple Choices|存在多个资源|
|301|Moved Permanently|资源被永转移|
|302|Found|请求的资源被暂时转移|
|303|See Other|引用他处|
|400|Bad Request|请求不正确|
|401|Unauthorized|需要认证|
|403|Forbidden|禁止访问|
|404|Not Found|没有找到指定的资源|
|429|Too Many Requests|访问次数过多|
|500|Internal Server Error|服务器端发生错误|
|503||服务器暂时停止运营
>[danger]关于状态码这一块大家可以到百度上去了解一下。业务状态码是咱们自行定义的!
### 五、服务器回应
>[success]一般情况下,服务器不要回复纯文本的数据,通常情况下返回的是`XML`或`JSON`格式的数据。
>[danger] Web API其实就是网页的一种,其返回的数据形式更容易让计算机程序处理,而不是返回普通的HTML。所以返回的数据应该尽可能地设计得方便计算机程序处理。
>[info]在这里就使用JOSN作为返回的数据格式。
#### 数据格式返回的指定方法
1. 使用查询参数的方法
2. 使用扩展名的方法
3. 使用在请求首部指定媒体类型的方法
>[danger]如果您的接口不需要同时支持多种类型,也可以不需要进行执定。
>[danger]在返回数据时,在满足需求的情况下,返回的数据量越小越好。(可以让用户来决定返回的数据)
#### 返回数据的封装
>[info]关于响应返回的数据格式,建义封装成统一样的格式。
### 六、版本号
>[success]关于版本号的,有多种解决方案。在这里使用ThinkPHP自带的解决方案。
### 七、API接口文档
>[success]通常情况下,API接口的开发者和使用者是不同的人群,所以做一详细的接口文档是十分必要的。
- 项目介绍
- 课前准备
- 前言
- APP端开发
- HBuildX快速创建uniapp项目
- UniAPP基本知识
- 官方组件练习
- uniapp代码块
- APP登录页面的制作
- 用户注册页面制作
- 密码找回页面制作
- 计价页面制作
- 详情页面制作
- 计价依据页面制作
- VUE快速入门
- Vue在uniapp中的应用
- APP数据模拟
- uniAPP云打包
- UniAPP离线打包
- 后端开发
- ThinkPHP的快速入门
- thinkPHP6.*的安装
- ThinkPHP6的入门介绍
- ThinkPHP6.0中的配置
- 入口文件隐藏
- 命令行工具
- Facade(门面)
- 数据迁移
- 数据填充
- 后端应用的创建
- 路由地址和Url地址的生成
- 后台模板的引入
- 多入口文件的应用以及多入口文件的隐藏
- 后台管理员模块开发
- 管理员表的设计
- 管理员密码的修改
- 验证器的使用
- 管理员登录功能的实现
- 后台权限控制的实现
- 验证码的使用
- 后台系统配置功能开发
- 数据表的分析与设计
- 系统参数配置部分代码的编写
- 类型列表模板的引入
- 配置类型添加
- 配置类型的列表显示
- 类型的编辑与删除
- 代码的优化
- 后台配置类型条目管理
- 会员管理模块
- API接口开发规范和注意事项
- API接口的设计规范
- RestfulAPI
- API接口安全
- 签名
- Postman工具的简单介绍
- API接口应用的创建
- API接口域名部署
- API接口的版本控制
- API接口跨域问题
- API接口开发
- 用户注册接口开发
- 代码的实现
- 完善用户注册接口
- 代码的封装
- 参数过滤
- 签名验证
- 代码结构优化
- 数据验证
- 自定义验证规则
- 全局异常处理
- 异常处理接管
- 手动抛出异常
- 重写HttpException异常类
- 短信接口开发
- 短信接口
- 阿里云短信服务接入
- 完善短信接口
- 完善用户注册接口并实现短信的验证
- 用户密码找回接口开发
- 实现流程与核心代码
- 问题处理
- 用户登录接口开发
- 基本代码的实现
- 用户登录实现
- 用户登录核心代码
- 用户授权验证
- JWT的使用
- JWT的结构
- JWT的安装
- token的生成
- 验证
- JWT使用中的注意事项
- 基础参数接口开发
- API接口的应用
- APP用户登录的实现
- 代码优化
- 用户注册的实现
- 密码找回功能的实现
- 计价功能的实现
- 自动登录的实现
- 用户登录功能限制
- 项目打包(正式包)
- 小程序适配
- 前期准备
- 小程序的调试
- 真机调试
- 多端适配
- ThinkPHP6.0的注意事项
- 关于TP6框架升级问题
- 自定义分页样式