美文网首页Spring boot 入门教程
05《Spring Boot 入门教程》 开发 RESTful

05《Spring Boot 入门教程》 开发 RESTful

作者: 木子教程 | 来源:发表于2022-05-22 20:56 被阅读0次

1. 前言

很多研发团队,可能都会有一个体会,当多人研发一个项目时,并不能达到 1+1>2 的效果。有时候还会出现 1+1<1 ,即 2 个人还不如 1 个人干得快,甚是悲哀。

就比如我们要开发一个 Web 项目,由前端工程师和后端工程师共同完成。

前端工程师懂 HTML / CSS / JavaScript 和 Bootstrap 等前端技术与框架,但是几乎不懂后端 Java 语言。

后端工程师懂 Spring Boot 开发,略懂 HTML / CSS / JavaScript ,但是没用过前端框架。

这种情况,如果使用 FreeMarker / Thymeleaf / JSP 等模板引擎,将面临不小的困难。前端工程师得先去学习模板引擎的规则,后端人员需要跟前端沟通控制器交给模板引擎处理的数据。

怎么办呢,不要担心,大佬们早就解决这个问题了。

5ea6e5ee0861603e07020439.jpg

互联网江湖圈,遇到问题先莫慌,早有大佬为我们开好路!(图片来源于网络,版权归原作者所有)

2. 前后端分离

前后端分离这种概念和技术,早就流行多年了。

具体点说,前端编写 HTML 页面,然后通过 Ajax 请求后端接口;后端把接口封装成 API ,返回 JSON 格式的数据;前端接收到 JSON 返回数据后渲染到页面。

前端工程师根本不需要懂后端,调用后端接口就行。后端使用 Spring Boot 控制器返回 JSON 十分简单,给方法添加个注解,就能将返回值序列化为 JSON 。

前端干前端的活,后端干后端的活,职责分明,界限明确。这就是前后端分离的好处啊!

3. RESTful 风格后端接口

前后端分离时,后端接口可不能太随意,目前后端接口编写大多遵循 RESTful 风格。

做后端接口的公司这么多,如果大家都定义自己的规范,是不利于公司之间的合作的。如果大家都能遵循一个规范来开发接口,很明显相关人员都能省心不少。

RESTful 就是一种非常流行的 HTTP 接口规范,简单明了,使用的人也多,用它准没错。

5ea6e5f808f873a007020395.jpg

规范的意义,就是提供标准,提高效率。汽车行业标准化程度已经很高了,软件行业还需努力!(图片来源于网络,版权归原作者所有)

4. 整体流程说明

本节实现一个基于 RESTful 风格的 Spring Boot 商品浏览 API 实例。

做事之前,先定整体流程。凡事预则立,不预则废,老祖宗的智慧太厉害了,我们争取发扬光大。确定流程如下:

5ea8f65d097dbdda07020322.jpg

整体流程

5. 开发阶段

5.1 根据需求制定 RESTful 风格的接口文档

既然是要做商品浏览页面,将商品增删改查都实现了就是了。 RESTful 风格接口并不麻烦,一般情况下需要项目团队一起商量制定。此处我们指定如下:

动词 接口含义 接口地址
GET 查询商品 (id=1) 信息 http://127.0.0.1:8080/goods/1
GET 查询商品列表信息 http://127.0.0.1:8080/goods
POST 新增商品 http://127.0.0.1:8080/goods
PUT 修改商品 (id=1) 信息 http://127.0.0.1:8080/goods/1
DELETE 删除商品 (id=1) http://127.0.0.1:8080/goods/1

Tips: RESTful 风格通过 HTTP 动词( GET / POST / PUT / DELETE )区分操作类型, URL 格式比较固定,仅此而已,非常简单。

5.2 按文档开发后端 API 接口

相比于使用模板引擎,用 Spring Boot 开发后端接口简直太轻松了。通过给控制器添加注解,就能将控制器方法返回值序列化为 JSON 。程序员最爱,就是轻松又愉快。

5.2.1 使用 Spring Initializr 创建项目

Spring Boot 版本选择 2.2.5 , Group 为 com.imooc , Artifact 为 spring-boot-restful ,生成项目后导入 Eclipse 开发环境。

像这种老套的重复操作,我还是拿出来讲讲,为何,因为要继续呵护我们的初学者们。万一有朋友因为一个小地方看不明白,丧失了学习编程的动力,那就是罪过了。

5.2.2 引入项目依赖

RESTful 项目其实就是标准的 Web 项目,引入 Web 项目依赖即可。

实例:

      <!-- 引入web项目相关依赖 -->
        <dependency>
            <groupId>org.springframework.boot</groupId>
            <artifactId>spring-boot-starter-web</artifactId>
        </dependency>

5.2.3 创建商品类与商品服务类

创建商品类与商品服务类,以完成对商品的增删改查操作。由于本章我们的重点是演示 RESTful 后端接口,所以此处没有操作真实的数据库。

实例:

/**
 * 商品类
 */
public class GoodsDo {
    /**
     * 商品id
     */
    private Long id;
    /**
     * 商品名称
     */
    private String name;
    /**
     * 商品价格
     */
    private String price;
    /**
     * 商品图片
     */
    private String pic;
  //省略get set方法
}

实例:

/**
 * 商品服务
 */
@Service // 注册为服务类
public class GoodsService {
    /**
     * 获取商品列表
     */
    public List<GoodsDo> getGoodsList() {
        List<GoodsDo> goodsList = new ArrayList<GoodsDo>();
        GoodsDo goods = new GoodsDo();
        goods.setId(1L);
        goods.setName("苹果");
        goods.setPic("apple.jpg");
        goods.setPrice("3.5");
        goodsList.add(goods);
        return goodsList;
    }
    /**
     * 按id获取商品信息,模拟返回对应商品信息
     */
    public GoodsDo getGoodsById(Long id) {
        GoodsDo goods = new GoodsDo();
        goods.setId(1L);
        goods.setName("苹果");
        goods.setPic("apple.jpg");
        goods.setPrice("3.5");
        return goods;
    }
    /**
     * 新增商品,模拟返回数据库影响行数
     */
    public int addGoods(GoodsDo goods) {
        return 1;
    }
    /**
     * 根据商品id更新商品信息,模拟返回数据库影响行数
     */
    public int editGoods(GoodsDo goods) {
        return 1;
    }
    /**
     * 根据商品id删除对应商品,模拟返回数据库影响行数
     */
    public int removeGoods(Long id) {
        return 1;
    }
}

Tips: 服务层方法,建议不要使用 select /insert/update /delete 命名,因为服务层处理的逻辑往往不止于关系数据库表的增删改查。此处采用的是 get /add/edit /remove 。

5.2.4 根据 API 文档实现控制器方法

此处需要解释的地方我都写在注释中了。

实例:

@RestController // 通过该注解,第一是将GoodsController注册为控制器,可以响应Http请求;第二是可以将控制器中的方法返回值序列化为json格式。
public class GoodsController {
    @Autowired // 自动装配goodsService
    private GoodsService goodsService;
    /**
     * 查询商品信息 
     * 1、@GetMapping表示可以使用get方法请求该api
     * 2、"/goods/{id}"表示请求路径为/goods/{id}的形式,其中{id}为占位符
     * 3、@PathVariable("id")表示将占位符{id}的值传递给id 
     * 4、也就是说/goods/123请求的话,会将123传递给参数id
     */
    @GetMapping("/goods/{id}")
    public GoodsDo getOne(@PathVariable("id") long id) {
        return goodsService.getGoodsById(id);
    }
    /**
     * 查询商品列表,使用get方法
     */
    @GetMapping("/goods")
    public List<GoodsDo> getList() {
        return goodsService.getGoodsList();
    }
    /**
     * 新增商品 
     * 1、@PostMapping表示使用post方法
     * 2、@RequestBody表示将请求中的json信息转换为GoodsDo类型的对象信息,该转换也是由SpringMVC自动完成的
     */
    @PostMapping("/goods")
    public void add(@RequestBody GoodsDo goods) {
        goodsService.addGoods(goods);
    }
    /**
     * 修改商品
     */
    @PutMapping("/goods/{id}")
    public void update(@PathVariable("id") long id, @RequestBody GoodsDo goods) {
        // 修改指定id的商品信息
        goods.setId(id);
        goodsService.editGoods(goods);
    }
    /**
     * 删除商品
     */
    @DeleteMapping("/goods/{id}")
    public void delete(@PathVariable("id") long id) {
        goodsService.removeGoods(id);
    }
}

5.3 使用 Postman 测试 API 接口可用

后端开发完 API 接口后,需要先进行下简单测试以保证接口是正确可用的。

我们可以使用 Postman 进行简单测试。启动 Spring Boot 项目后,使用 Postman 进行可视化测试,此处结果如下:

5ea6e60608528ab110070482.jpg

测试查询商品信息

5ea6e614081fc9cc10110513.jpg

测试查询商品列表

5ea6e61f087adf1b10090500.jpg

测试新增商品

5ea6e629085f464210110496.jpg

测试修改商品

5ea6e63308e3cb7c10140403.jpg

测试删除商品

6. 小结

使用 Spring Boot 开发 RESTful 风格的 Web 项目,是当前主流的 Web 项目开发模式。

这种开发模式的特点就是简单、明确。简单主要是依赖 Spring Boot 实现,明确就是靠 RESTful 风格来规范。

简单的目的就是提高开发效率;明确的目的是统一规范,从而降低沟通成本,最终也是为了提高开发效率。

Spring Boot 和 RESTful ,绝配!

相关文章

网友评论

    本文标题:05《Spring Boot 入门教程》 开发 RESTful

    本文链接:https://www.haomeiwen.com/subject/ehhlprtx.html