对Restful的理解

什么是Restful?

Restful是Roy Thomas Fielding这位大神在他的博士论文文中提出来。由于其超前的思想,在当时并未引起过多的注意。

直到近几年来,大概08年以后开始慢慢流行起来。

restful是一种设计思想。是Representational State Transfer的英文缩写:表现层状态转换或者表述型状态转换。这里省略了主语,是资源的表现型状态转换。

资源在网络中的体现就是URI。我们平时网上冲浪其实就是获取各种URI资源。获取的方式最简单的就是在浏览器地址栏输入URL。例如要访问百度资源:htttp://www.baidu.com

没有出现rest风格的时候,我们在编写javaweb程序时,例如要操作数据库里用户信息,我们的URL可以能会设计成:

http://127.0.0.1/user/query/1 GET  根据用户id查询用户数据

http://127.0.0.1/user/save POST 新增用户

http://127.0.0.1/user/update POST 修改用户信息

http://127.0.0.1/user/delete GET/POST 删除用户信息

而有了Restful风格后则设计为:

http://127.0.0.1/user/1 GET  根据用户id查询用户数据

http://127.0.0.1/user  POST 新增用户

http://127.0.0.1/user  PUT 修改用户信息

http://127.0.0.1/user  DELETE 删除用户信息

可以发现URI都是一样的,改变的只是客户端的请求方式而已,这就是restful风格的服务端无状态性(个人肤浅理解,更深入理解还需多实践才能懂得)。

Restful风格接口实现

@RestController
@RequestMapping("new/user")
public class UserController {
	
	@Autowired
	private UserService userService;
	
	/**
	 * 查询
	 * @param id
	 * @return
	 */
	@RequestMapping(value="{id}",method=RequestMethod.GET)
	public ResponseEntity<User> queryUserById(@PathVariable Long id){
		try {
			User user=this.userService.queryById(id);
			if (user == null) {
				return ResponseEntity.status(HttpStatus.NOT_FOUND).body(null);
			}
			return ResponseEntity.status(HttpStatus.OK).body(user);
		} catch (Exception e) {
			e.printStackTrace();
		}
		return ResponseEntity.status(HttpStatus.INTERNAL_SERVER_ERROR).body(null);
	}
	
	/**
	 * 新增
	 * @param user
	 * @return
	 */
	@RequestMapping(method=RequestMethod.POST)
	public ResponseEntity<Void> insertUser(User user){
		try {
			Boolean bool=userService.save(user)==1;
			if (bool) {
				return ResponseEntity.status(HttpStatus.CREATED).build();//HttpStatus.CREATED:201,build();没有返回值用build.
			}
		} catch (Exception e) {
			e.printStackTrace();
		}
		return ResponseEntity.status(HttpStatus.INTERNAL_SERVER_ERROR).build();//HttpStatus.INTERNAL_SERVER_ERROR:500
	}
	
	/**
	 * restful风格修改资源接口
	 * @param user 
	 * @return void
	 */
	@RequestMapping(method=RequestMethod.PUT)
	public ResponseEntity<Void> updateUser(User user){
		try {
			Boolean bool=userService.update(user)==1;
			if (bool) {
				return ResponseEntity.status(HttpStatus.NO_CONTENT).build();//HttpStatus.NO_CONTENT:204,build();没有返回值用build.
			}
		} catch (Exception e) {
			e.printStackTrace();
		}
		return ResponseEntity.status(HttpStatus.INTERNAL_SERVER_ERROR).body(null);
	}
	
	/**
	 * 删除
	 * @param id
	 * @return
	 */
	@RequestMapping(method=RequestMethod.DELETE)
	public ResponseEntity<Void> deleteUser(long id){
		try {
			Boolean bool=userService.deleteById(id)==1;
			if (bool) {
				return ResponseEntity.status(HttpStatus.NO_CONTENT).build();
			}
		} catch (Exception e) {
			e.printStackTrace();
		}
		return ResponseEntity.status(HttpStatus.INTERNAL_SERVER_ERROR).build();
	}
	
	
	
	

}

HTTP响应状态码

响应结果示例

SpringMVC框架很强大,原生态的支持了restful风格

例如:@RequestMapping

           @ResponseBody

           @PathVariable

  • 0
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值