API分类
- A程序需要B程序的部分功能,只需要将B程序部分功能打包交给A程序直接使用,比如Java jar,这种API一般称为SDK。
- A程序/项目需要B程序/项目的部分功能,只需要B对外提供访问路径/入口,A按照约定好的访问方式进行访问,即可实现对象的功能,这种API称为应用接口
Restful规范产生原因
客户端不仅限于PC端,浏览器、移动APP、小程序等等,这就要求服务端能提供统一的API接口,不同类型的客户端基于相同的协议或规则就能来调用该API接口,并获取预期的数据。
Restful约定
请求路径
针对接口要操作资源统一使用复数路径,一般就是操作实体对象复数,如/employees
请求方法
GET (select):从服务器获取出资源(一项/多项)
POST (create): 在服务器新建添加资源。
PUT (update): 在服务器更新修改资源。客户端提供改变后的完整资源,PUT 更新整个对象。
Patch (update): 在服务器更新资源,客户端提供改变的属性,PATCH更新个别属性
DELETE (delete):从服务器删除资源
请求参数
由需求决定
请求响应
GET :单个资源→→单个资源对象;多个资源→→数组
POST:→→新生成的资源对象
PUT:→→完整的资源对象
PATCH:→→完整的资源对象
DELETE:→→空文档
真实开发具体响应什么以公司规定/操作需求为主,一般建议响应格式为JSON格式
HTTP响应状态码
1xx信息
请求已接收,请继续处理
2xx成功
请求正常处理完毕
200 OK [GET] 请求成功,服务器成功返回用户请求的数据。
201 CREATED [put/post/patch]数据创建或修改成功。
202 Accepted 表示一个请求已经进入后台排队(异步任务)
204 No Content [delete ]删除成功。请求成功,不返回数据
206 partition content部分内容返回,常用于断点续传
3xx重定向
301 Moved Permanently 永久重定向。(如某网站域名永久迁移到新地址)
302 Found 临时重定向
304 Not Modified 资源未更新,缓存命中,使用本地缓存。(节省带宽)
4xx客户端错误
400 Bad Request 请求参数有问题,如参数格式错误或缺少必要字段。
401 Unauthorized 未认证,未登录/登录信息失效。(没身份)
403 forbidden 已认证但没有权限,有身份但没资格(如普通用户想访问管理员接口)
404 Not found 资源不存在,访问了一个不存在的接口或页面
405 Method Not Allowed 请求方式错误。(比如接口需要post请求,但你发送了get请求)
406 Not Acceptable [GET]用户请求的格式不可得。(如请求JSON格式,但只有X mail格式)
410 Gone [GET] 用户请求的资源被永久删除,且不会再得到了
422 Unprocessableentity [post/put/patch] 当创建一个对象时,发生验证错误
429 Too many requests 请求过于频繁,通常出现在限流场景
5xx服务端错误
500 Internal Server Error 服务器内部异常。(代码报错/空指针/数据库异常)
501 Not Implemented 服务端不支持当前请求功能。
502 Bad Gateway 网关错误。常见于Nginx转发请求时后端服务挂了或返回异常。
503 Service, unavailable 服务不可用。系统维护/服务过载/熔断降级。
504 Gateway Timeout 网关超时请求已发送给后端,但长时间未响应
资源表现形式
比如,文本可以用txt格式表现,也可以用HTML格式、XML格式、JSON格式表现,甚至可以采用二进制格式;图片可以用IPG格式表现也可以用PNG格式表现。
它的具体表现形式,应该在HTTP请求的头信息中用Accept和Content-Type字段指定,这两个字段才是对"表现"的描述。
accept:application/json
content-type:application/ison
Accept与content-Type的区别
- Accept属于请求头 ,content-Type属于实体头。Http报头分为通用报头,请求报头,响应报头和实体报头。请求方的http报头结构:通用报头|请求报头|实体报头响应方的http报头结构:通用报头|响应报头|实体报头.
- Accept代表发送端(客户端)希望接受的数据类型。比如:Accept :application/ison;代表客户端希望接受的数据类型是ison类型,后台返回ison数据。Content-Type代表发送端(客户端|服务器)发送的实体数据的数据类型。比如:content-Type :application/json;代表发送端发送的数据格式是ison,后台就要以这种格式来接收前端发过来的数据。