什么是RestFul代码风格

前言

开发工程中,Rest风格是相对来说对请求路由做出了比较大的优化,那么什么是Rest风格呢?

What is Rest

举个例子,比如我们过去用SpringMVC的Controller去接请求,假设就是单纯的一个根据id查对象,那么我们会这么写

@GetMapping("/queryOne")
@ResponseBody
public Student queryOne(int id){
	return service.queryOne(id);
}

没毛病吧,那么我们前端的请求地址就会是这样

http://xxx.x.x.x:8080/queryOne?id=x

我现在不想让用户看见我的请求内容,同时我还向用这一个请求地址对应多个拦截方法
比如:我向这个地址发Put请求,后台自动去调update方法,同一个请求地址前台发Get请求,后台则会自动调queryOne方法,这个逻辑就是RestFul风格的代码格式

Why Rest?

  1. 各个资源虽然可能有关联,但依旧是能够简单地切掉这些关联导致相互独立的,所以不会有非常乱的耦合性
  2. 对资源的操作就这么几种,所以很容易设计一致的URL
  3. 我们明白对资源的读操作是无副作用的,所以能玩缓存

而现在互联网99%的人都在说,我这个是用Rest风格书写的,其实就是用了用Put和Post请求,美化了一下url,其实根本没有触碰到核心的东西,关于Rest如果没有思考过下面两个问题,那么基本就是走走过场

  1. 对于用户登录和用户退出这两个业务需求,REST指导下的架构和设计如何满足
  2. 批量的删除、修改、新增如何满足

How Rest?

到这个点我们需要一个例子,就拿上面那个例子吧,这次前台请求的url我们就是规定好是/stu, ok下面看一下怎么实现
在这里插入图片描述

	/**
	 * REST请求 <BR>
	 * 请求地址: http://ip:port/path/user/1 <BR>
	 */
	@GetMapping("/{id}")
	@ResponseBody
	public Student getStuById(@PathVariable("id") int id) {
		return studentService.queryById(id);
	}

Spring针对Rest设计了专门的注解@PathVariable,它可以拿到url中的参数,那么我们的url请求就变成了

http://ip:port/path/stu/1 

只要是这个url并且是get请求就自动的进入这个方法,拿到id=1的请求参数,然后后台再执行操作,那么同理put

	@PutMapping("/{id}")
	@ResponseBody
	public String updateStudent(@PathVariable int id, @RequestBody Student student) {
		student.setId(id);
		studentService.updateStudent(student);
		// 重定向到update页面
		return "success";
	}

没错 同一个url

http://ip:port/path/stu/1      +Json对象

只要是put请求就进入了updateStudent这个方法,进行业务逻辑处理

进阶

进阶一点就要提到@ReqeustParam和@PathVariable的区别了

@RequstParam

  1. 它是一个可以接url?id=x,它能接到x,自动的给方法参数
//请求中包含username参数(如/user?userName=zhang),则自动传入。
@GetMapping("/user")
@ResponseBody
public String queryUserName(@RequestParam String userName){
	...
}
  1. 发送的key和后台接的参数,名称不一样
http://ip:port/path/user?user=张三
@GetMapping("/user")
@ResponseBody
public String queryUserName(@RequestParam("user") String userName){
   ...
}
  1. 多个参数同名:
    但是在传递参数的时候如果是url?userName=zhangsan&userName=wangwu时,即两个同名参数,前台传递了两个一样的参数,可用如下方式:
public User queryOne(@RequestParam(value="userName") String []  userNames)
//或者是
public User queryOne(@RequestParam(value="list") List<String> list)

@PathVaribale

而它翻译过来是路径变量,顾名思义它接参数需要变量在url上占位,多个参数就要这么写

@GetMapping("/{pageNum}/{pageSize}")
@ResponseBody
public List<User> querySome(@PathVaribale int pageNum,@PathSize int pageSize){
...
}

两者结合

那么问题来了,两者能不能结合起来?当然可以,比如条件查询,我们看看name为张三的用户顺便分页

 http://ip:port/path/user/1/3?name=张三
@GetMapping(/{pageNum}/{pageSize})
@ResponseBody
public List<User> querySome(@PathVariable int pageNum,@PathVariable int pageSize,@RequestParam String name){
	...
}

总结

至于 上面针对Rest的思考

  1. 对于用户登录和用户退出这两个业务需求,REST指导下的架构和设计如何满足
  2. 批量的删除、修改、新增如何满足

留个小尾巴吧,我会抽个时间带大家剖析一下,今天关于Rest就这么多吧

  • 0
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论
Ajax是一种用于在Web页面上进行异步通信的术,它可以在不刷新整个页面的情况下,通过与服务器进行数据交换来更新部分页面内容。而RESTful是一种设计风格,它提倡使用统一的URL和HTTP方法来进行资源的操作。 在使用Ajax和RESTful风格传值时,可以通过发送HTTP请求来实现数据的传输和操作。具体步骤如下: 1. 客户端通过JavaScript代码创建一个XMLHttpRequest对象,用于发送HTTP请求。 2. 设置XMLHttpRequest对象的请求方法(GET、POST、PUT、DELETE等)和请求URL。 3. 如果需要传递参数,可以将参数以键值对的形式添加到请求URL中,或者将参数作为请求体的一部分发送。 4. 设置请求头,指定请求的数据格式(如JSON、XML等)。 5. 注册回调函数,用于处理服务器返回的响应数据。 6. 发送HTTP请求。 7. 服务器接收到请求后,根据请求方法和URL进行相应的处理,并返回响应数据。 8. 客户端接收到服务器返回的响应数据后,通过回调函数进行处理,更新页面内容。 使用Ajax和RESTful风格传值的好处是可以实现前后端的解耦,提高系统的可扩展性和灵活性。同时,RESTful风格的URL设计也使得API更加清晰和易于理解。 相关问题: 1. 什么是Ajax? 2. 什么是RESTful风格? 3. 如何使用Ajax发送GET请求? 4. 如何使用Ajax发送POST请求? 5. 如何使用Ajax发送PUT请求? 6. 如何使用Ajax发送DELETE请求?

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

商朝

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值