[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-dBI1cbL3-1601021475017)(https://imgkr.cn-bj.ufileos.com/50416f44-5b7e-43bb-a0c4-ee71be577c04.jpg)]
Restful 风格的 API 是一种软件架构风格,设计风格而不是标准,只是提供了一组设计原则和[约束条件](https://urlify.cn/bmEvIj "约束条件")。它主要用于客户端和服务器交互类的软件。基于这个风格设计的软件可以更简洁,更有层次,更易于实现缓存等机制。
在 Restful 风格中,用户请求的 url 使用同一个 url 而用请求方式:get,post,delete,put...等方式对请求的处理方法进行区分,这样可以在前后台分离式的开发中使得前端开发人员不会对请求的资源地址产生混淆和大量的检查方法名的麻烦,形成一个统一的接口。
## SpringMVC Restful 风格 url 配置实现的方式
SpringMVC 的 resturl 是通过 @RequestMapping 及 @PathVariable annotation 提供的,通过如 @RequestMapping(value="/blog /{id}",method=RequestMethod.DELETE) 即可处理 /blog/1 的 delete 请求。
* GET(SELECT):从服务器查询,可以在服务器通过请求的参数区分查询的 方式。
* POST(CREATE):在服务器端新建一个资源,调用 insert 操作。
* PUT(UPDATE):在服务器端更新资源,调用 update 操作。
* PATCH(UPDATE):在服务器端更新资源(客户端提供改变的属性)。(目前 jdk7 未实现,tomcat7 不支持)。
* DELETE(DELETE):从服务器端删除资源,调用 delete 语句。
## 案例实操
### Get 请求配置
~~~ java
/**
*restful-->get 请求 执行查询操作
* @param id
* @return
*/
@RequestMapping(value="queryAccountById02/{id}",method=RequestMethod.GET,produces=MediaType.APPLICATION_JSON_UTF8_VALUE)
@ResponseBody
public MessageModel queryAccountById(@PathVariable Integer id){
MessageModel messageModel=new MessageModel();
if(null==id){
messageModel.setCode(300);
messageModel.setMsg("参数非法!");
return messageModel;
}
messageModel.setResult(accountService.queryById(id));
return messageModel;
}
~~~
### Post 请求配置
~~~ java
/**
* restful-->post 请求执行添加操作
* @param id
* @param aname
* @return
*/
@RequestMapping(value="saveAccount",method=RequestMethod.POST,produces=MediaType.APPLICATION_JSON_UTF8_VALUE)
@ResponseBody
public MessageModel queryAccountById04(@RequestBody Account account){
MessageModel messageModel=new MessageModel();
try {
accountService.saveOrUpdateAccount(account);
} catch (ParamsException e) { e.printStackTrace();
messageModel.setCode(e.getErrorCode());
messageModel.setMsg(e.getErrorMsg());
}catch (Exception e) { e.printStackTrace();
messageModel.setCode(300);
messageModel.setMsg("操作失败!");
}
return messageModel;
}
~~~
### Put 请求配置
~~~ java
/**
* restful-->put 请求执行更新操作
* @param id
* @param account
* @return
*/
@RequestMapping(value="update/{id}",method=RequestMethod.PUT,produces=MediaType.APPLICATION_JSON_UTF8_VALUE)
@ResponseBody
public MessageModel queryAccountById04(@PathVariable Integer id,@RequestBody Account account){
MessageModel messageModel=new MessageModel();
try {
accountService.saveOrUpdateAccount(account);
} catch (ParamsException e) { e.printStackTrace();
messageModel.setCode(e.getErrorCode());
messageModel.setMsg(e.getErrorMsg());
}catch (Exception e) { e.printStackTrace();
messageModel.setCode(300);
messageModel.setMsg("操作失败!");
}
return messageModel;
}
~~~
### Delete 请求配置
~~~ java
/**
* restful-->delete 请求 执行删除操作
* @param id
* @return
*/
@RequestMapping(value="deleteAccountById/{id}",method=RequestMethod.DELETE,produces=MediaType.APPLICATION_JSON_UTF8_VALUE)
@ResponseBody
public MessageModel queryAccountById05(@PathVariable Integer id){
MessageModel messageModel=new MessageModel();
try {
accountService.deleteAccountById(id);
} catch (ParamsException e) { e.printStackTrace();
messageModel.setCode(e.getErrorCode());
messageModel.setMsg(e.getErrorMsg());
}catch (Exception e) { e.printStackTrace();
messageModel.setCode(300);
messageModel.setMsg("操作失败!");
}
return messageModel;
}
~~~
## 扩展~REST
[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-taQN5ehK-1601021475022)(https://imgkr.cn-bj.ufileos.com/21731772-bfbc-48fd-a24b-22a09804602d.png)]
REST(英文:**Representational State Transfer**,简称REST)描述了一个架构样式的网络系统,比如 web 应用程序。它首次出现在 2000 年 Roy Fielding 的博士论文中,Roy Fielding是 HTTP 规范的主要编写者之一。在目前主流的三种Web服务交互方案中,REST相比于[SOAP](https://urlify.cn/MBJRBr "SOAP")(Simple Object Access protocol,简单对象访问协议)以及[XML-RPC](https://baike.baidu.com/item/XML-RPC "XML-RPC")更加简单明了,无论是对URL的处理还是对[Payload](https://baike.baidu.com/item/payload "Payload")的编码,REST都倾向于用更加简单轻量的方法设计和实现。值得注意的是REST并没有一个明确的标准,而更像是一种设计的风格。
对URL的处理还是对[Payload](https://baike.baidu.com/item/payload "Payload")的编码,REST都倾向于用更加简单轻量的方法设计和实现。值得注意的是REST并没有一个明确的标准,而更像是一种设计的风格。
REST 指的是一组架构约束条件和原则。满足这些约束条件和原则的应用程序或设计就是 RESTful。
需要视频配套文档或更多资料+我们程序员小姐姐v:lezijie007(加好友时备注:b站-LT,不备注拒绝添加哟)