RESTful
每一个实体就是一个资源,也可以说是一个具体信息,每一个资源都有一个特定的url(传统资源定位符)
表现层
资源是一种信息实体,,它可以有多种外在表现形式,我们把资源呈现出来的形式叫做“表现层”
url值代表资源的实体,不代表形式.
HTTP请求头信息中,用Accept(期望)和content-type字段指定对表现层的描述
状态转化
http是无状态协议,所有状态都保存在服务器端,如果客户端要操作服务器,必须让服务器发生“形态转化”
- 新增:从无到有 状态的变化
- 更新:从某个状态变成另外一种状态的转化
- 删除:从有到无 状态的变化
7个HTTP方法
- GET 从服务器取出资源(一项或多项)
- POST 在服务器新建一个资源
- PUT 在服务器更新资源(客户端提供改变后的完整资源) PUT更新整个对象 user
- DELETE 在服务器更新资源(客户端提供改变的属性)
- PATCH 从服务器删除资源
- HEAD 获得一个资源的元数据,比如一个资源的hash值或者最后修改日期
- OPTIONS 获得客户端针对一个资源能够实施的操作;(获取该资源的api(能够对资源做什么操作的描述)
HTTP头信息(可自定义) content-type
HTTP响应状态代码(可自定义)
这些就是HTTP1.1协议提供的统一接口
请求头
1.一个API可以允许返回JSON,Xml甚至HTML等文档格式;建议使用json;
2.以前通过URL来规定获取得格式类型,比如
https://api.example.com/employee.json;
https://api.example.com/employee.html等;
但是更建议使用Accept这个请求头;
Accept与Content-Type的区别
1.Accept属于请求头, Content-Type属于实体头。
Http报头分为通用报头,请求报头,响应报头和实体报头。
请求方的http报头结构:通用报头|请求报头|实体报头
响应方的http报头结构:通用报头|响应报头|实体报头
2.Accept代表发送端(客户端)希望接受的数据类型。
比如:Accept:application/json;
代表客户端希望接受的数据类型是json类型,后台返回json数据
Content-Type代表发送端(客户端|服务器)发送的实体数据的数据类型
比如:Content-Type:application/json;
代表发送端发送的数据格式是json, 后台就要以这种格式来接收前端发过来的数据.
二者合起来,
Accept:application/json;
Content-Type:application/json;
即代表希望接受的数据类型是json格式,本次请求发送的数据的数据格式也是json格式.
注解
@RequestMapping的属性
- value/path:映射路径
- method:限定请求的方式,枚举:GET, HEAD, POST, PUT, PATCH, DELETE, OPTIONS, TRACE
- params:限定要处理请求的参数,只有匹配该参数的请求,才会被该方法处理
- headers:限定要处理请求的请求头信息,只有匹配该请求头内容的请求,才会被该方法处理
- consumes消费: 指定处理请求的提交内容类型
- produces生产: 指定返回的内容类型,仅当request请求头中的(Accept)类型中包含该指定类型才返回.方法仅处理request请求中Accept头中包含了”application/json”的请求,同时暗示了返回的内容类型为application/json.
@PathVariable参数别名
@RestController相当于@Controller所有的方法自动添加上@ResponseBody
@requestBody注解常用来处理content-type不是默认的application/x-www-form-urlcoded编码的内容.
比如说:application/json或者是application/xml等,一般情况下来说常用其来处理application/json类型
通过@requestBody可以将请求体中的JSON字符串绑定到相应的bean上,当然,也可以将其分别绑定到对应的字符串上