目录
前言
百科定义】RESTFUL是一种网络应用程序的设计风格和开发方式,基于HTTP,可以使用XML格式定义或JSON格式定义。RESTFUL适用于移动互联网厂商作为业务接口的场景,实现第三方OTT调用移动网络资源的功能,动作类型为新增、变更、删除所调用资源。
RESTful是一种风格,并不是规范或标准,所以,并不一定需要完全照做!
RESTful的典型表现包括
是前后端分离的,即服务器端将响应正文
根据请求尝试执行的数据操作不同,区分使用请求方式
POST:新增数据 PUT:修改数据 DELETE:删除数据 GET:查询数据
通常不照做,在大多场景中,推荐以查询为主要目的的使用GET,否则,全部使用POST 将某些具有唯一性的、不敏感的参数值,作为URL的一部分,例如:
Spring MVC框架很好的支持了RESTful,当设计URL时,如果URL中包含参数值,可以使用{自定义名称}进行占位,例如:
@PostMapping("/{id}/delete")
然后,在处理请求的方法上,在对应的参数上添加@PathVariable注解,表示此参数的值应该由URL中同名占位符的值注入进来,例如:
public JsonResult delete(@PathVariable Long id) { // .... }
如果占位符中的名称,与方法的参数名称并不相符,可以在@PathVariable注解参数中指定占位符名称,例如:
@PostMapping("/{id}/delete") public JsonResult delete(@PathVariable("id") Long albumId) { // .... }
在配置占位符名称时,可以在占位符名称右侧添加1个冒号,并且,在冒号右侧添加正则表达式,以限制URL中传入的值的格式,例如:
@PostMapping("/{id:[0-9]+}/delete")
没有配置正则表达式时,如果提交的请求中的占位符位置的值不是纯数字时,会导致400错误,这是服务器端接收了请求、获取了占位符位置的值并尝试转换类型时出现的错误,其实,根本没有必要接收并尝试处理此请求!所以,添加正则表达式是更有利于服务器端的做法!
当使用了正则表达式之后,其实,允许多个使用了占位符、不同匹配规则的URL同时存在,例如:
@PostMapping("/{id:[0-9]+}/delete")
public JsonResult delete(@PathVariable Long id) {
// ...
}
@PostMapping("/{name:[a-z]+}/delete")
public JsonResult delete(@PathVariable String name) {
// ...
}
以上2个处理请求的方法是允许同存的,当客户端提交的请求中,占位符位置是纯数字时,会执行上方的方法,占位符位置是纯小写字母时,会执行下方的方法!
需要注意,使用这种做法,必须保证某个URL只能匹配到其中某1种正则表达式,如果在以上设计的基础上,再添加:
@PostMapping("/{no:[0-9a-z]+}/delete")
public JsonResult deleteTest(@PathVariable String no) {
// ...
}
当添加以上方法时,如果提交了 /album/a123/delete 请求,将由以上新添加的方法进行处理,如果提交了 /album/123/delete 请求,由于可以匹配多个正则表达式,框架无法判断,会出错!
另外,如果还存在以下请求:
@PostMapping("/test/delete")
public JsonResult delete() {
// ...
}
将由以上新添加的方法进行处理,如果提交了 /album/test/delete 请求,则会执行以上新添加的方法,不会报错!
基于RESTful的URL设计,可参考:
查询数据列表,格式为:/数据类型的复数
例如:/albums 查询某1项数据,格式为:/数据类型的复数/{ID}
例如:/albums/{id:[0-9]+}
其实,在RESTful的建议中,查询、修改、删除都用以上这种URL,根据请求方式来区分需要执行的数据管理操作 对某1项数据执行数据管理,格式为:/数据类型的复数/{ID}/命令
例如:/albums/{id:[0-9]+}/delete
指定服务端口 在Spring Boot项目中,在配置文件中通过server.port属性可以指定服务端口!
则在application-dev.yml中添加配置:
server:
port: 9080
在VUE Cli项目中,在项目的根目录下有package.json文件,配置此文件中scripts属性中的serve属性,可以修改服务端口
希望文章对你有所帮助!