RESTful API 学习
前言
本人非专科 (材料人),仅爱好学习 (兴趣爱好),文章内容可能有落后或者错误,非常需要大家分享意见和纠错!
一、API 类型和Web 发展和前后端分离
1、API分类
- 分类1:打包功能直接调用,比如JAVA jar。一般叫这个API称为 SDK
- 分类2:通过接口HTTP协议访问进行请求。叫做 web应用接口
2、web发展阶段
- 静态内容阶段
- CGI 程序阶段
- 脚本语言阶段
- 瘦客户端应用阶段
- RIA 应用阶段
- 移动 Web 应用阶段
3、传统 vs 前后端分离
问题:前后端严重耦合
- 前端需要改bug调试时,需要在当前电脑安装一整后端的开发工具,启动后端程序。
- 还要求后端人员会html,js等前端语言。
- 前端页面也会嵌入很多后端的代码
- 一旦后端换了一套语言,前端也需要重新开发
- 沟通成本,调试成本,前后端开发进度相互影响,从而大大降低开发效率
前端服务器纯静态资源服务器 (html/css/js/images),将响应数据通过js/vue/jQuery技术渲染到页面上。
接口服务器发送数据 (JSON格式) :
[
{id: 1, name: "hansjack"},
{id: 1, name: "shark2051"}
]
优点:
- 前后端责任清晰,后端专注于数据上,前端专注于视觉上。
- 无需等待对方的开发工作结束,提高开发效率。
- 可应对复杂多变的前端需求。
- 增强代码可维护性
二、RESTful接口设计
统一接口设计,具有 RESTful 风格的 API 接口。
REST 是一种设计 API 接口规则,在web项目中非常受欢迎;在设计接口时候,如果满足 REST 约束条件和原则的应用程序或设计就称其为 RESTful 应用。
1、约束规则
(1 路径设计
传统的web接口 (请求映射方法) 设计需要:
文章列表:
@Controller
public class PostController {
@RequestMapping("/post/list")
public String list(Model model) {
model.addAttribute("list", EssayService.list())
return "post/list";
}
}
- 请求路径,简明
- 请求方式,可变,忽略
- 请求参数,需求
- 请求响应,模板路径
RESTful接口设计需要:
@Controller
public class Postcontroller
@RequestMapping(value ="/posts",method = RequestMethod.GET)
@ResponseBody
public List<Post> list(){
return PostService.list();
}
}
RESTful API将应用程序的状态和功能划分为资源,并通过HTTP方法对这些资源进行操作。每个资源都有一个唯一的URL标识。
(2 请求方式1
HTTP方法 | 操作 | 幂等性 | 安全性 |
---|---|---|---|
GET | 获取资源 | ✅ | ✅ |
POST | 创建资源 | ❌ | ❌ |
PUT | 更新或替换资源 | ✅ | ❌ |
DELETE | 删除资源 | ✅ | ❌ |
PATCH | 部分更新资源 | ❌ | ❌ |
HEAD | 获取资源元数据 | ✅ | ✅ |
OPTIONS | 获取资源支持的方法 | ✅ | ✅ |
请求客户端一般使用GET、POST两个方法2 :
(3 请求参数
一定是名称,对应资源。
(4 请求响应
JSON格式
2、状态码 2
HTTP 状态码五个类型:
1xx
:相关信息2xx
:操作成功3xx
:重定向4xx
:客户端错误5xx
:服务器错误
(1 状态码1xx
(2 状态码2xx
(3 状态码3xx
(4 状态码4xx
(5 状态码5xx
3、资源表现形式
HTTP请求的头信息中使用Accept和Content-Type字段指定。
三、实践
1、发布文章
调用了 Typecho_Db::lastInsertId() 方法,但实际上这个方法并不存在。正确的做法是通过 Typecho_Db::query() 方法执行INSERT语句,它会自动返回插入的ID。
6、权限细化
资源类型 | 游客 | 注册用户 | 作者 | 编辑 | 管理员 |
---|---|---|---|---|---|
文章查看 | ✓ | ✓ | ✓ | ✓ | ✓ |
文章创建 | ✗ | ✓ | ✓ | ✓ | ✓ |
文章编辑 | ✗ | 自己 | 自己 | ✓ | ✓ |
文章删除 | ✗ | 自己 | 自己 | ✓ | ✓ |
评论查看 | ✓ | ✓ | ✓ | ✓ | ✓ |
评论创建 | ✗ | ✓ | ✓ | ✓ | ✓ |
评论删除 | ✗ | 自己 | 自己 | ✓ | ✓ |
用户管理 | ✗ | ✗ | ✗ | ✗ | ✓ |
系统设置 | ✗ | ✗ | ✗ | ✗ | ✓ |
7、令牌认证
获取访问令牌
POST /api/v1/tokens
Content-Type: application/json
{
"name": "username_or_email",
"password": "user_password"
}
评论区