导语
现在越来越多的企业推荐使用的是RESTful风格来构建企业应用接口,那么什么是RESTful呢?
RESTful是目前最为流行的一种互联网架构,REST(Respresentational State Transfer,表述性状态转移),这个是来源自于一篇博士论文,定义了作者对于互联网软件的架构原则的认识,如果一个架构符合REST原则,则称它为RESTFul架构。
RESTful架构一个比较核心的概念就是”资源(Resource)“,从RESTful的角度上来看,网络中的任何的东西都可以是被看作是一个资源,对于一个资源来说可以一个文件、一张图片等等,对于每一个在网络中的资源来说都有一个特定的位置标识URI(统一资源定位符)。通过这URI就可以访问到这资源。
对于一个资源来说可以有多种形式,也就是对于资源的描述,对于资源的描述来说就取决于它的后缀名称。也就是说URI只是代表了一个实体,而不是它的表现形式。
互联网中,客户端与服务器端之间互动传递消息,这些消息其实就是在传递互联网中资源的描述,客户端告诉服务端想要什么地方的资源,服务端向客户端返回对应的资源。在互联网中相互之间的调用只能通过一种无状态协议就是HTTP。也就是说服务端必须保存所有的状态,客户端可以使用HTTP的基本操作让服务端的资源状态发生变化,也就是所谓的”表述性状态转移“。
在SpringBoot出现之前,SpringMVC就对于一些简单的RESTFul进行了支持,通过不同的注解来支持前端的请求,当然SpringBoot提供的注解要比SpringMVC更加的全面。SpringBoot提供一些组合注解。通过这些组合注解来简化常用的HTTP方法请求映射。并且更好的体现了见名知意。
当然了以上这些注解都是简写版本,在SpringBoot中进行了封装
@GetMapping
@RequestMapping(method = RequestMethod.GET)
public @interface GetMapping {
@PostMapping
@RequestMapping(method = RequestMethod.POST)
public @interface PostMapping {
@PutMapping
@RequestMapping(method = RequestMethod.PUT)
public @interface PutMapping {
\
@DeleteMapping
@RequestMapping(method = RequestMethod.DELETE)
public @interface DeleteMapping {
@PatchMapping
@RequestMapping(method = RequestMethod.PATCH)
public @interface PatchMapping {
这里使用整合MyBaits的方式来实现这功能。
public class User {
private Integer id;
private String name;
private String password;
public Integer getId() {
return id;
}
public void setId(Integer id) {
this.id = id;
}
public String getName() {
return name;
}
public void setName(String name) {
this.name = name;
}
public String getPassword() {
return password;
}
public void setPassword(String password) {
this.password = password;
}
}
spring.datasource.driver-class-name=com.mysql.jdbc.Driver
spring.datasource.url=jdbc:mysql://127.0.0.1:3306/test?useUnicode=true&characterEncoding=utf-8&zeroDateTimeBehavior=convertToNull
spring.datasource.username=root
spring.datasource.password=123456
mybatis.mapper-locations=classpath:/mapper/**/*.xml
mybatis.configuration.map-underscore-to-camel-case=true
@Mapper
public interface UserMapper {
public int addUser(User user);
public List<User> getAllUser();
public User getUser(Integer id);
public int updateUser(User user);
public int deleteUser(Integer id);
}
public interface UserService {
public int addUser(User user);
public List<User> getAllUser();
public User getUserById(Integer id);
public int updateUser(User user);
public int deleteUserById(Integer id);
}
Service实现类
@Service
public class UserServiceImpl implements UserService {
@Autowired
private UserMapper userMapper;
@Override
public int addUser(User user) {
return userMapper.addUser(user);
}
@Override
public List<User> getAllUser() {
return userMapper.getAllUser();
}
@Override
public User getUserById(Integer id) {
return userMapper.getUser(id);
}
@Override
public int updateUser(User user) {
return userMapper.updateUser(user);
}
@Override
public int deleteUserById(Integer id) {
return userMapper.deleteUser(id);
}
}
@RestController
public class UserController {
@Autowired
private UserService userService;
@GetMapping("/allUser")
public List<User> getAllUser(){
return userService.getAllUser();
}
@GetMapping("/getOneUser")
public User getUserById(@RequestParam Integer id){
return userService.getUserById(id);
}
@PostMapping("/addUser")
public int addUser(@RequestBody User user){
return userService.addUser(user);
}
@DeleteMapping("/deleteUser")
public int deleteUser(Integer id){
return userService.deleteUserById(id);
}
@PatchMapping("/updateUser")
public int updateUser(@RequestBody User user){
return userService.updateUser(user);
}
}
<mapper namespace="com.nh.restful.dao.UserMapper">
<select id="getAllUser" resultType="com.nh.restful.bean.User">
select * from user;
select>
<select id="getUser" parameterType="Integer" resultType="com.nh.restful.bean.User">
select * from user where id = #{id}
select>
<insert id="addUser" parameterType="com.nh.restful.bean.User">
insert into user ( `id`, `name`, `password`) values ( #{id}, #{name}, #{password});
insert>
<delete id="deleteUser" parameterType="Integer">
delete from user where id = #{id}
delete>
<update id="updateUser" parameterType="com.nh.restful.bean.User">
update user set `id`= #{id}, `name`= #{name}, `password`= #{password} where `id` = #{id};
update>
mapper>
PostMan测试Post、DELETE、Patch请求方式
效果如下
从上面的例子可以看出,RESTful其实是一个非常好的设计方式,相同的URL请求通过后端不同的处理方式利用RESTful风格很容易就实现一种简单的接口调用方式。同时SpringBoot在对于RESTful的支持上做了大量的优化,从注解的表现形式,到内部使用的RESTful支持。后面的分享中还会有更多的东西等着大家,希望大家可以喜欢!