需求6:如何写一个后端接口?

这两天一直在对之前做的工作做梳理总结,不过前两天我都是在总结一些bug的问题。尽管有些bug问题我还没写文章,但是,我今天不得不先停下对bug的总结了。因为在国庆之后,我需要自己开发一个IT资产管理的功能,这个功能需要你写大量的接口。所以今天,我就把过去这几个月写的几个接口拿来复习一下,为之后写更难的接口做准备。

了解需求

看这个问题:左图的干系人那块地方不知道为什么出现这些数据。我们希望达到右图这种效果,就是干系人那块地方显示这个设备关联的所有干系人,然后每个干系人都可以显示这个干系人下所有的用户。

大纲思路

把需求捋清楚,知道要干什么了之后,就想想大致的思路怎么写。我们需要写一个接口,这个接口的返回数据是:返回所有干系人以及干系人下的所有用户。返回值是这个样子的:

[{"name": "生产部经理","list": [{"name": "张三","mobile": 123456789877},{"name": "李四","mobile": 123456789877},{"name": "王五","mobile": 123456789877}]},{"name": "工序段段长","list": [{"name": "陈六","mobile": 123456789877},{"name": "黄七","mobile": 123456789877},]}
]

只要后端传回来这些数据,前端就可以用这些数据来做展示,呈现在页面上。

后端代码编写

写返回值

这个时候,一个接口的返回值就已经装饰好了,接下来就是修改内部了。

写controller层

在修改内部之前,我们首先要知道这个接口的逻辑是什么?逻辑是:通过设备ID找到关联这个设备的所有干系人,再从每个干系人找到关联这个干系人的所有用户。

“通过设备ID找到关联这个设备的所有干系人”的代码其他接口已经写了:

接下来写“从每个干系人找到关联这个干系人的所有用户”:

最后的效果:

总结一下这个代码的意思:

//通过设备ID找到关联这个设备的所有干系人
List<RoleInfoDTO> result = deviceStakeholderService.getDeviceStakeholderOption(deviceId);

在小程序故障上报的地方,你选了设备,干系人数据就直接出来了。证明什么?证明通过设备才能找到干系人用户。这就是第一行代码的意思。传入了deviceId,返回RoleInfoDTO(里面是所有干系人的信息,比如说有3个干系人,就返回3个干系人的所有信息)。

List<StackholderUsersInfoVO> list = new ArrayList<>();

自己创建一个list对象,这个list对象是真正的返回给前端的对象,这个对象的类型是StackholderUsersInfoVO。

@Data
@ApiModel("干系人角色的信息")
public class StackholderUsersInfoVO {@ApiModelProperty("干系人角色名")private String name;@ApiModelProperty("干系人角色下的每个用户的信息")private List<UserInfoVo> list;
}

接下来,我们的任务就很明确了:你写的代码是关于如何找到干系人角色名(name),以及干系人角色下的每个用户的信息(list)。往后你的每一段代码,目标都是关于拿到name和拿到list,最后return list就好了。

name和list从哪里拿到呢?肯定是从result对象里拿。你第一行代码已经拿到了所有干系人的信息了,然后放到result对象里。下一步就是操作这个result对象,拿到这个对象的干系人角色名以及每个干系人的所有角色。那就写吧:

//遍历result中的每个干系人
for(RoleInfoDTO roleInfoDTO : result) {//创建一个对象a,对象a是StackholderUsersInfoVO类型的,我们希望把从result对象中查出来的数据放到对象a中,所以要创建一个对象aStackholderUsersInfoVO a = new StackholderUsersInfoVO();//把result对象中的干系人角色名拿出来放到对象a中a.setName(roleInfoDTO.getRoleName());
//通过干系人ID找到干系人下的所有用户,用户的信息放到userList对象中List<UserInfoVo> userList = iUserInfoService.getUserInfo(roleInfoDTO.getId());//把userList对象放到对象a中a.setList(userList);
//把对象a放到对象list中list.add(a);}

已经大功告成了,最后把list对象返回就好了:

 return Result.success(list);

其实你把controller层写好后,你发现service层,mapper层,sql语句都写好了。为什么?因为我是复制粘贴代码过来的,当时写这些代码的人早已经把service层,mapper层,sql语句都写好了,我只要复制一个controller层,相当于变相把其他的这些都复制过来了。

接下来,可以用postman测试一下,看看这个接口是否返回了我们想返回的参数:

用postman测试知道已经返回成功了,证明这个接口后端已经写完了。

进去小程序看看这个接口在不在:

发现还是不在。为什么呢?Postman明明已经试过这个接口已经在,而且返回的参数值确实是我们想要的,但是为什么在小程序就不在呢?

因为我们还没有配置连接到后端的接口的小程序代码,先配置一下:

然后再去看看小程序端的接口那里有没有显示出来我们写的这个接口:

OK,已经看到了,正是我们想要的,因此后端已经完成了。

前端代码编写

总结

今天我们讨论了如何编写接口。其实,在这几个月的实践中,我逐渐领悟到了一些关键点。

当你需要编写一个接口时,最重要的部分并不是代码的具体实现,代码的细节等,而是你需要彻底理解这个接口的每一层逻辑。也就是说,你需要非常熟悉Controller层、Service层和Mapper层每层都要干嘛。

只要你对接口每一层的功能和逻辑了然于心,你就可以将你的思路和想法传达给AI,让AI来帮助你写。坦白讲,其实你自己写的不一定有AI写的漂亮。

就以这个接口为例子:

你把你的这个思路给AI,AI帮你写。当然,AI生成的代码肯定和我们最终的代码还是差一点的,这时候你需要做的就是理解AI的代码逻辑,并进行必要的修改。即使你不擅长写代码,但只要你能看懂并修改代码就可以了。不然的话,如果连修改代码都不会,那还不如转行算了!

所以,我的工作重点在于理清接口每一层的逻辑,然后将这些逻辑告诉AI,让AI来生成代码。在AI生成代码后,我再根据实际需求进行调整。如果遇到实在解决不了的问题,就去找睿哥,让他帮我修改就好了。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/pingmian/55385.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

【Maven】依赖管理,Maven仓库,Maven核心功能

Maven 是一个项目管理工具&#xff0c;基于 POM&#xff08;Project Object Model&#xff0c;项目对象模型&#xff09;的概念&#xff0c;Maven 可以通过一小段描述信息来管理项目的构建&#xff0c;报告和文档的项目管理工具软件 大白话&#xff1a;Maven 是一个项目管理工…

GAMES101(19节,相机)

相机 synthesis合成成像&#xff1a;比如光栅化&#xff0c;光线追踪&#xff0c;相机是capture捕捉成像&#xff0c; 但是在合成渲染时&#xff0c;有时也会模拟捕捉成像方式&#xff08;包括一些技术 动态模糊 / 景深等&#xff09;&#xff0c;这时会有涉及很多专有名词&a…

WooCommerce与wordpress是什么关系

WooCommerce与WordPress之间的关系非常紧密&#xff0c;因为WooCommerce实际上是一个为WordPress设计的插件。WordPress是一个内容管理系统(CMS)&#xff0c;广泛用于创建各种类型的网站&#xff0c;包括博客、企业网站等。而WooCommerce则是一个免费且开源的电子商务插件&…

Linux 安装 yum

第一步&#xff1a;下载安装包 这里以 CentOS 7 为例 wget https://vault.centos.org/7.2.1511/os/x86_64/Packages/yum-3.4.3-132.el7.centos.0.1.noarch.rpm wget https://vault.centos.org/7.2.1511/os/x86_64/Packages/yum-metadata-parser-1.1.4-10.el7.x86_64.rpm wget…

初识算法 · 双指针(4)

目录 前言&#xff1a; 复写零 题目解析 算法原理 算法编写 四数之和 题目解析 算法原理 算法编写 前言&#xff1a; 本文是双指针算法的最后一文&#xff0c;以复写零和四数之和作为结束&#xff0c;介绍方式同样是题目解析&#xff0c;算法原理&#xff0c;算法编写…

电气自动化入门10:传感器应用介绍

视频链接&#xff1a;4.1 电工知识&#xff1a;传感器应用介绍与接近开关的实际应用_哔哩哔哩_bilibilihttps://www.bilibili.com/video/BV1PJ41117PW?p12&vd_sourceb5775c3a4ea16a5306db9c7c1c1486b5 1.电工传感器介绍 2.常用电工传感器的种类和用途 3.接近开关

微信原生小程序

app.json 中配置project.config.json 中配置project.private.config.json 中配置sitemap.json 中配置index.json 中配置常用全局配置常用页面配置WXMLnavigator 组件 基本用法常用属性事件 scroll-view 组件 基本用法 1. 创建可垂直滚动的区域2. 创建可水平滚动的区域事件1. 事…

计算机毕业设计 基于Python的无人超市管理系统的设计与实现 Python+Django+Vue 前后端分离 附源码 讲解 文档

&#x1f34a;作者&#xff1a;计算机编程-吉哥 &#x1f34a;简介&#xff1a;专业从事JavaWeb程序开发&#xff0c;微信小程序开发&#xff0c;定制化项目、 源码、代码讲解、文档撰写、ppt制作。做自己喜欢的事&#xff0c;生活就是快乐的。 &#x1f34a;心愿&#xff1a;点…

TCP BIC 的拟合函数分析

前面说了这么多&#xff0c;还没有对 bic 的数学性质进行分析&#xff0c;本文补上。 tcp reno 完全依赖 ack 时钟以 rtt 为单位线性增窗&#xff0c;增窗速度与 rtt 负相关&#xff0c;如何在 rtt 比较大时增加增窗速度&#xff0c;这就是 bic&#xff0c;以二分替换遍历。 …

云RDS MySQL迁移至本地MySQL

本地准备工作 1.安装:percona-xtrabackup 上传percona-xtrabackup-2.3.9-Linux-x86_64.tar.gz包到/usr/local tar -zxvf percona-xtrabackup-2.3.9-Linux-x86_64.tar.gz mv percona-xtrabackup-2.3.9-Linux-x86_64 percona-xtrabackup 2.创建数据目录 cd /data/ mkdir rds-mys…

银河麒麟服务器:检查仓库源连接状态

银河麒麟服务器&#xff1a;检查仓库源连接状态 1. 清理YUM缓存2. 生成YUM缓存 &#x1f496;The Begin&#x1f496;点点关注&#xff0c;收藏不迷路&#x1f496; 在银河麒麟高级服务器操作系统中&#xff0c;要检查仓库源是否连接成功&#xff0c;可以执行以下两个命令&…

SQL优化 - 排序

文章目录 排序和索引降序索引 FilesortORDER BY 顺序问题ORDER BY LIMIT 排序和索引 如果ORDER BY操作使用了索引&#xff0c;那么就可以避免排序操作&#xff0c;因为索引本身就是按索引 key 排好序的。那什么情况下&#xff0c;ORDER BY会走索引呢&#xff1f; 例如&#…

C#基于SkiaSharp实现印章管理(10)

向PDF文件插入印章图片比之前实现的向图片文件插入印章麻烦得多。   最初的想法是使用PDF浏览控件在线打开PDF文件&#xff0c;然后在控件中实现鼠标移动时动态显示印章&#xff0c;点击鼠标时向当前PDF页面的鼠标点击位置插入图片。由于是.net 8的Winform项目&#xff0c;选…

Elasticsearch学习记录

阅读前须知 本文通过安装elasticsearch-7.17.0为基础&#xff0c;使用 kibana-7.17.0 对 elasticsearch 进行操作&#xff0c;本文中 es 是对 elasticsearch 的简写。 下载地址&#xff1a;elasticsearch_免费高速下载|百度网盘-分享无限制 (baidu.com) 1 初识Elasticsearch …

用 LoRA 微调 Stable Diffusion:拆开炼丹炉,动手实现你的第一次 AI 绘画

总得拆开炼丹炉看看是什么样的。这篇文章将带你从代码层面一步步实现 AI 文本生成图像&#xff08;Text-to-Image&#xff09;中的 LoRA 微调过程&#xff0c;你将&#xff1a; 了解 Trigger Words&#xff08;触发词&#xff09;到底是什么&#xff0c;以及它们如何影响生成结…

【大数据】深入解析分布式数据库:架构、技术与未来

目录 1. 分布式数据库的定义2. 架构类型2.1 主从架构2.2 同步与异步复制2.3 分片架构 3. 技术实现3.1 一致性模型3.2 CAP理论3.3 数据存储引擎 4. 应用场景5. 选择分布式数据库的因素5.1 数据一致性需求5.2 读写负载5.3 成本5.4 技术栈兼容性 6. 未来发展趋势总结 分布式数据库…

spring boot jar 分离自动部署脚本

背景 远程部署时spring boot 包&#xff0c;比较大。可以采用依赖库和业务包分离的方式。提供一个脚本进行自动部署 maven 配置分离jar包 <build><finalName>${project.artifactId}</finalName><plugins><plugin><groupId>org.springfra…

springboot cache

springboot cache 简要介绍 Spring 对缓存提供支持&#xff0c;核心思路是对方法的参数和返回值的缓存&#xff0c;当开发者调用一个方法时&#xff0c;将方法的参数和返回值作为key/value缓存起来&#xff0c;当再次调用该方法时&#xff0c;如果缓存中有数据&#xff0c;就直…

redis面试-2024

1、Redis的基本数据结构类型 string、list、set、hash、zet。还有三种特殊类型&#xff1a;Geospatial、Hyperloglog、bitMap。 2、各数据类型对应的场景 3、redis快的原因 *基于内存 内存读写效率远高于磁盘读写&#xff0c;省去磁盘IO操作 *存储形式 Redis作为K-V键值对…

SpringCloud学习记录|day2

学习材料 2024最新SpringCloud微服务开发与实战&#xff0c;java黑马商城项目微服务实战开发&#xff08;涵盖MybatisPlus、Docker、MQ、ES、Redis高级等&#xff09; Docker 部署工具。原来为了学习RabbitMQ安装过了。 但是忘记差不多了。 发现要回到root用户才能启动docke…