RESTFul学习
概念
Restful就是一个资源定位及资源操作的风格。不是标准也不是协议,只是一种风格。基于这种分割设计的软件可以更简洁,更有层次,更易于实现缓存等机制。
功能
- 资源:互联网所有的事物都可以被抽象为资源。
- 资源操作:使用POST、DELETE、PUT、GET,使用不同的方法对资源进行操作。
- 分别对应 添加、删除、修改、查询。
传统方式操作资源
通过不同的参数来实现不同的效果!方法单一:POST和GET
- http://127.0.0.1/item/queryItem?id=1 查询:GET
- http://127.0.0.1/item/saveItem 新增:POST
- http://127.0.0.1/item/updateItem 更新:POST
- http://127.0.0.1/item/deleteItem?id=1 删除:GET或POST
RESTFul
使用RESTFul操作资源:可以通过不同的请求方式来实现不同的效果!如下:请求地址一样,但是功能可以不同!
- http://127.0.0.1/item/1 查询:GET
- http://127.0.0.1/item 新增:POST
- http://127.0.0.1/item 更新:PUT
- http://127.0.0.1/item/1 删除:DELETE
使用路径变量的好处
- 使路径变的更加简洁;
- 获得参数更加方便,框架会自动进行类型转换;
- 通过路径变量的类型可以约束访问参数,如果类型不一样,则访问不到对应的请求方法,如这里访问的路径是/commit/1/a,则路径与方法不匹配,而不会是参数转换失败
使用
在SpringMVC中可以使用 @PathVariable 注解,让方法参数的值对应绑定到一个URI模板变量上。
方法体级别的注解变体有如下几个:组合注解
@GetMapping
@PostMapping
@PutMapping
@DeleteMapping
@PatchMapping
RESTful规范与约束
RESTful 架构的核心规范与约束:统一接口
分为四个子约束:
- 每个资源都拥有一个资源标识,每个资源的资源标识可以用来唯一地标明该资源
- 消息的自描述性
- 资源的自描述性。
- HATEOAS Hypermedia As The Engine Of Application State(超媒体作为应用状态引擎):即客户只可以通过服务端所返回各结果中所包含的信息来得到下一步操作所需要的信息,如到底是向哪个URL发送请求等。也就是说,一个典型的REST服务不需要额外的文档标示通过哪些URL访问特定类型的资源,而是通过服务端返回的响应来标示到底能在该资源上执行什么样的操作
目的:实现客户端无需借助任何文档即能调用到所有的服务器资源

REST资源操作
| http方法 | 资源操作 | 幂等 | 安全 |
|---|---|---|---|
| GET | SELECT | 是 | 是 |
| POST | INSERT | 否 | 否 |
| PUT | UPDATE | 是 | 否 |
| DELETE | DELETE | 是 | 否 |
RESTful中根据操作资源的不同,使用不同的http方法,其传输的媒介一般使用json
RESTful设计准则
宾语必须是名词
宾语就是 API 的 URL,是 HTTP 动词作用的对象。它应该是名词,不能是动词。比如,/articles这个 URL 就是正确的,而下面的 URL 不是名词,所以都是错误的。
/getAllCars
/createNewCar
/deleteAllRedCars
复数URL
既然 URL 是名词,那么应该使用复数,还是单数?
这没有统一的规定,但是常见的操作是读取一个集合,比如GET /articles(读取所有文章),这里明显应该是复数。
为了统一起见,建议都使用复数 URL,比如GET /articles/2要好于GET /article/2。
避免多级URL
常见的情况是,资源需要多级分类,因此很容易写出多级的 URL,比如获取某个作者的某一类文章。
GET /authors/12/categories/2
这种 URL 不利于扩展,语义也不明确,往往要想一会,才能明白含义。
更好的做法是,除了第一级,其他级别都用查询字符串表达。
本文是原创文章,采用 CC BY-NC-ND 4.0 协议,完整转载请注明来自 程序员小航
评论
匿名评论
隐私政策
你无需删除空行,直接评论以获取最佳展示效果