REST风格及RESTful入门

REST风格

        REST(Representational State Transfer)是一种访问网络资源的格式,它是一种软件架构风格。REST被称为风格,是一种约定方式,而不是一种规则,及可以打破,但并不代表其不重要。REST提供了对应的架构方式,按照这种架构设计项目可以降低开发的复杂性,提高系统的可伸缩性,而且书写的访问网络资源形式简单,有利于开发,所以在大部分企业的开发中都在使用此风格书写,并慢慢形成了一种潜规则,So,我们需要了解,并且学会用这种风格书写程序。

eg:

·传统风格资源描述方式

        http://localhost/user/getById?id=1

·Rest风格资源描述方式

        http://localhost/user

        传统方式一般是一个请求url对应一种操作,这样做不仅麻烦,也不安全,因为会程序的人读取了你的请求url地址,就大概知道该url实现的是一个什么样的操作。

再看REST风格的描述,会发现请求地址变的简单,并且光看请求URL并不是很能猜出来该URL的具体功能。

Rest风格的优点:

①隐藏资源的访问行为,无法通过地址得知对资源是何种操作

②书写简单

REST风格描述方式(http://localhost/user)很难判断出此地址是用来查询、新增或者还是删除等操作,所以我们在书写这种风格的网络资源时要使用行为动作来进行区分。

eg:

http://localhost/users         查询全部用户信息 GET(查询)

http://localhost/users/1         查询指定用户信息 GET(查询)

http://localhost/users         添加用户信息 POST(新增/保存)

http://localhost/users         修改用户信息 PUT(修改/更新)

http://localhost/users/1         删除用户信息 DELETE(删除)

比较常用的就4种,分别是GET , POST , PUT , DELETE

1.发送GET请求是用来做查询

2.发送POST请求是用来做新增

3.发送PUT请求是用来做修改

4.发送DELETE请求是用来做删除

RESTful

根据REST风格对资源进行访问被称为RESTful。

入门操作:

过程与SpringMvc操作相同SpringMvc入门,不过在Controller中需要添加各种类型响应的方法

要注意:

一、在请求响应时要解决中文乱码的问题

二、在pom中要添加jackson依赖

 

 

新增操作

常规代码书写

@RequestMapping("/save")
@ResponseBody
public String save(@RequestBody User user) {
System.out.println("user save..."+user);
return "{'module':'user save'}";
}

RESTful书写

@RequestMapping(value = "/users",method = RequestMethod.POST)
@ResponseBody
public String save() {
System.out.println("user save...");
return "{'module':'user save'}";
}

使用method属性限定该方法的访问方式为POST

删除操作

常规书写

@RequestMapping("/delete")
@ResponseBody
public String delete(Integer id) {
System.out.println("user delete..." + id);
return "{'module':'user delete'}";
}

RESTful书写

@RequestMapping(value = "/users/{id}",method = RequestMethod.DELETE)
@ResponseBody
public String delete(@PathVariable Integer id) {
System.out.println("user delete..." + id);
return "{'module':'user delete'}";
}

使用method属性限定该方法的访问方式为DELETE。

其余的更新,查询方法与新增删除的书写类似,都是通过定义method属性来限定访问的方法。

但是书写过多会发现,虽然访问时的路径变得简单了,但是书写的过程很繁琐

发现的问题:

问题1:每个方法的@RequestMapping注解中都定义了访问路径/books,重复性太高。

问题2:每个方法的@RequestMapping注解中都要使用method属性定义请求方式,重复性太高。

问题3:每个方法响应json都需要加上@ResponseBody注解,重复性太高。

对于上述的问题,对应的解决方案:

问题1:每个方法的@RequestMapping注解中都定义了访问路径/books,重复性太高。

            将@RequestMapping提到类上面,用来定义所有方法共同的访问路径。

问题2:每个方法的@RequestMapping注解中都要使用method属性定义请求方式,重复性太高。

             使用@GetMapping @PostMapping @PutMapping @DeleteMapping代替

问题3:每个方法响应json都需要加上@ResponseBody注解,重复性太高。

             1.将ResponseBody提到类上面,让所有的方法都有@ResponseBody的功能

             2.使用@RestController注解替换@Controller与@ResponseBody注解,简化书写

最终的代码如图

心得:REST风格书写过程不难,但是在对于书写访问网络资源的格式这里,前期最好还是用常规方法书写,用REST方法虽然方便,但对于初学者来说,过度的简化对于学者的理解不太友好,在后期对写过代码的理解也会有影响,所以等真正熟悉了这里的操作后,再转用REST风格来书写,可以更有效的帮助我们学习与开发。

 

 

  • 1
    点赞
  • 4
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值