博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
Restful风格
阅读量:3710 次
发布时间:2019-05-21

本文共 4303 字,大约阅读时间需要 14 分钟。

什么是REST

REST是英文representational state transfer(表象性状态转变)或者表述性状态转移;Rest是web服务的一种架构风格;使用HTTP,URI,XML,JSON,HTML等广泛流行的标准和协议;轻量级,跨平台,跨语言的架构设计;它是一种设计风格,不是一种标准,是一种思想。

Rest架构的主要原则

  •     网络上的所有事物都被抽象为资源
  •     每个资源都有一个唯一的资源标识符
  •     同一个资源具有多种表现形式(xml,json等)
  •     对资源的各种操作不会改变资源标识符
  •     所有的操作都是无状态的
  •     符合REST原则的架构方式即可称为RESTful

什么是Restful

  • 对应的中文是rest风格的
  • Restful web service是一种常见的rest的应用,是遵守了rest风格的web服务
  • rest风格的web服务是一种ROA(The Resource-Oriented Architecture)(面向资源的架构)

为什么会出现Restful

在Restful之前的操作:

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 删除用户信息

之前的操作是没有问题的,大神认为是有问题的,有什么问题呢?你每次请求的接口或者地址,都在做描述,例如查询的时候用了query,新增的时候用了save,其实完全没有这个必要,我使用了get请求,就是查询.使用post请求,就是新增的请求,我的意图很明显,完全没有必要做描述,这就是为什么有了restful

如何使用

SpringMVC实现Restful服务,原生态的支持了Restful风格的架构设计,所涉及到的注解:

@RequestParam@PathVariable@ResponseBody

 地址①

地址②

如果想获取地址①中的的值1,则使用@PathVariable

如果想获取地址②中的 中的,则使用 @RequestParam

package com.yj.controller; import org.springframework.beans.factory.annotation.Autowired;import org.springframework.http.HttpStatus;import org.springframework.http.ResponseEntity;import org.springframework.stereotype.Controller;import org.springframework.web.bind.annotation.PathVariable;import org.springframework.web.bind.annotation.RequestMapping;import org.springframework.web.bind.annotation.RequestMethod;import org.springframework.web.bind.annotation.RequestParam;import org.springframework.web.bind.annotation.ResponseBody;import com.yj.entity.User; @RequestMapping("/user")@Controllerpublic class RestUserController {     @Autowired    private UserService userService;     /**     * http://127.0.0.1:8080/user/1     * 根据用户id查询用户数据     * @param id     * @return     */    @RequestMapping(value = "{id}", method = RequestMethod.GET)    @ResponseBody    public ResponseEntity
queryUserById(@PathVariable("id") Long id) { try { User user = userService.queryUserById(id); if (null == user) { // 资源不存在,响应404 return ResponseEntity.status(HttpStatus.NOT_FOUND).body(null); } // 200 // return ResponseEntity.status(HttpStatus.OK).body(user); return ResponseEntity.ok(user); } catch (Exception e) { e.printStackTrace(); } // 500 return ResponseEntity.status(HttpStatus.INTERNAL_SERVER_ERROR).body(null); } /** * http://127.0.0.1:8080/user,并且以form-data的形式提交数据 * 新增用户 * @param user * @return */ @RequestMapping(method = RequestMethod.POST) public ResponseEntity
saveUser(User user) { try { userService.saveUser(user); return ResponseEntity.status(HttpStatus.CREATED).build(); } catch (Exception e) { e.printStackTrace(); } // 500 return ResponseEntity.status(HttpStatus.INTERNAL_SERVER_ERROR).body(null); } /** * http://127.0.0.1:8080/user?id=1&name=test * 更新用户资源 * @param user * @return */ @RequestMapping(method = RequestMethod.PUT) public ResponseEntity
updateUser(User user) { try { userService.updateUser(user); return ResponseEntity.status(HttpStatus.NO_CONTENT).build(); } catch (Exception e) { e.printStackTrace(); } // 500 return ResponseEntity.status(HttpStatus.INTERNAL_SERVER_ERROR).body(null); } /** * http://127.0.0.1:8080/user?id=1 * 删除用户资源 * @param id * @return */ @RequestMapping(method = RequestMethod.DELETE) public ResponseEntity
deleteUser(@RequestParam(value = "id", defaultValue = "0") Long id) { try { if (id.intValue() == 0) { // 请求参数有误 return ResponseEntity.status(HttpStatus.BAD_REQUEST).build(); } userService.deleteUserById(id); // 204 return ResponseEntity.status(HttpStatus.NO_CONTENT).build(); } catch (Exception e) { e.printStackTrace(); } // 500 return ResponseEntity.status(HttpStatus.INTERNAL_SERVER_ERROR).body(null); }}

 

转载地址:http://kvsjn.baihongyu.com/

你可能感兴趣的文章
EL表达式
查看>>
Javaweb MVC设计模式、Modle发展史、项目分层和三层架构
查看>>
HTML表格和HTML表单
查看>>
JSP访问数据库,Session对象和九大内置对象
查看>>
Springboot分层图解
查看>>
并查集(Disjiont Set)
查看>>
Java操作HBase
查看>>
Linux编程考前测试题
查看>>
Openstack面试题和知识点总结
查看>>
C++ 实例化一个对象
查看>>
基于Spring boot+Vue的在线考试系统
查看>>
大数据学习路线
查看>>
前端学习路线
查看>>
推荐几个单机游戏下载网、高质量图片下载网
查看>>
数据库查询
查看>>
单臂路由配置
查看>>
静态路由及动态路由 RIP配置
查看>>
现代密码学:密码协议
查看>>
现代密码学:密钥管理
查看>>
数据库增删改
查看>>