SpringBoot 精通系列-构建一个RESTful Web 服务

导语
  现在越来越多的企业推荐使用的是RESTful风格来构建企业应用接口,那么什么是RESTful呢?

文章目录

    • 什么是RESTful
    • SpringBoot对于RESTful有哪些支持
    • 快速实例
        • 定义User对象
        • 添加配置文件
        • 编写Dao层的Mapper
        • 编写Service层
        • Controller类
        • Mapper XML 配置
      • 测试效果
    • 总结

什么是RESTful

  RESTful是目前最为流行的一种互联网架构,REST(Respresentational State Transfer,表述性状态转移),这个是来源自于一篇博士论文,定义了作者对于互联网软件的架构原则的认识,如果一个架构符合REST原则,则称它为RESTFul架构。
  RESTful架构一个比较核心的概念就是”资源(Resource)“,从RESTful的角度上来看,网络中的任何的东西都可以是被看作是一个资源,对于一个资源来说可以一个文件、一张图片等等,对于每一个在网络中的资源来说都有一个特定的位置标识URI(统一资源定位符)。通过这URI就可以访问到这资源。
  对于一个资源来说可以有多种形式,也就是对于资源的描述,对于资源的描述来说就取决于它的后缀名称。也就是说URI只是代表了一个实体,而不是它的表现形式。
  互联网中,客户端与服务器端之间互动传递消息,这些消息其实就是在传递互联网中资源的描述,客户端告诉服务端想要什么地方的资源,服务端向客户端返回对应的资源。在互联网中相互之间的调用只能通过一种无状态协议就是HTTP。也就是说服务端必须保存所有的状态,客户端可以使用HTTP的基本操作让服务端的资源状态发生变化,也就是所谓的”表述性状态转移“。

SpringBoot对于RESTful有哪些支持

  在SpringBoot出现之前,SpringMVC就对于一些简单的RESTFul进行了支持,通过不同的注解来支持前端的请求,当然SpringBoot提供的注解要比SpringMVC更加的全面。SpringBoot提供一些组合注解。通过这些组合注解来简化常用的HTTP方法请求映射。并且更好的体现了见名知意。

  • @GetMapping;处理GET请求
  • @PostMapping; 处理POST请求
  • @PutMapping; 处理PUT请求
  • @DeleteMapping;处理DELETE请求
  • @PatchMapping; 处理更新资源请求

当然了以上这些注解都是简写版本,在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的方式来实现这功能。

定义User对象

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

编写Dao层的Mapper

@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);

}

编写Service层

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);
    }
}

Controller类

@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 XML 配置



<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>

测试效果

从浏览器发送get请求测试get请求的方式
SpringBoot 精通系列-构建一个RESTful Web 服务_第1张图片

SpringBoot 精通系列-构建一个RESTful Web 服务_第2张图片

PostMan测试Post、DELETE、Patch请求方式
效果如下

Post
SpringBoot 精通系列-构建一个RESTful Web 服务_第3张图片
Delete
SpringBoot 精通系列-构建一个RESTful Web 服务_第4张图片

Patch
SpringBoot 精通系列-构建一个RESTful Web 服务_第5张图片

总结

  从上面的例子可以看出,RESTful其实是一个非常好的设计方式,相同的URL请求通过后端不同的处理方式利用RESTful风格很容易就实现一种简单的接口调用方式。同时SpringBoot在对于RESTful的支持上做了大量的优化,从注解的表现形式,到内部使用的RESTful支持。后面的分享中还会有更多的东西等着大家,希望大家可以喜欢!

你可能感兴趣的:(SpringBoot核心应用,SpringBoot,RESTful)