后端系统开发之——创建注册接口

2024-03-19 16:20

本文主要是介绍后端系统开发之——创建注册接口,希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!

原文地址:后端系统开发之——创建注册接口 - Pleasure的博客

下面是正文内容:

前言

这是一篇SpringBoot项目的实践篇。

主要用于介绍如何从零开始搭建某一种类型的系统。

个人认为,只要后端逻辑完善了,纵使前端页面千变万化都可以慢慢来,符合自己的审美就行。

当然我也才刚起步,不可能全部都是自己手搓(肯定会有所借鉴)。

正文

大致思路

接口的实现,一般要包括下面的几种功能:

注册,登录,获取用户详细信息,更新用户基本信息,更新用户头像,更新用户密码。

需要了解数据表中用户表的表结构(在此基础上进行搭建)

大致具体的流程:明确功能需求,阅读接口文档(明确输入输出),思路分析,开发写代码,调试正确性

接口文档,通常包括:基本信息(请求路径,请求方式,接口描述),请求参数(请求参数格式,请求参数说明),响应数据(响应数据类型,响应数据说明)

前置知识

先介绍一下前置知识——MVC(Model-View-Controller)架构。

必须掌握,不然你都不知道各个文件的作用以及对于整个项目的影响。

MVC通常用于构建用户界面和应用程序的组织结构,将应用程序分成三个核心组建:模型层(Model)、视图层(View)和控制层(Controller),每个部分都有不同的职责和功能。

以Web应用程序为例来进行解释。

控制层通常用于处理业务逻辑传递给视图层用于渲染页面,通常属于后端。

前端页面就属于视图层,负责展示模型层中的数据给用户,接收用户的操作。

模型层通常分为下面的几个类:

  • 实体类(Entity),应用程序中的基本数据对象,通常与数据库中的表与文档相对应,包含了数据的结构和属性,决定了数据结构和关系,提供了数据的访问方式。
  • 数据访问对象(DAO),用于与数据库进行交互的接口或类,负责执行数据库的CRUD(创建、读取、更新、删除)操作,并将数据库中的数据映射到实体类中。
  • 业务逻辑(Business Logic),是应用程序中处理业务规则和流程的部分,用于执行特定的业务操作,并确保数据的完整性和一致性。(核心部分)
  • 数据传输对象(DTO),用于在不同层之间传递数据的对象,它通常包含了一组数据属性和相应的访问方法。通常用于将实体类中的数据传递给视图层或控制层。

控制层通过将用户的请求转换成对模型层方法(接口)的调用来执行特定的业务操作,然后根据模型层返回的结果来决定如何响应用户的请求,并将模型处理的结果返回给视图层或者直接给用户。

控制器层和模型层的分离使得业务逻辑与用户界面的交互得以解耦,使得应用程序的不同部分可以独立开发、测试和维护。控制器层负责协调用户请求和业务逻辑的处理,而模型层负责处理具体的业务逻辑,从而实现了逻辑层和表示层的分离。

私有字段、公共getter和setter

私有字段是指类中的成员变量(属性),其访问权限仅限于类内部。。公共Getter和Setter是用于读取和修改对象的私有字段的公共方法。Getter用于获取私有字段的值,而Setter用于设置私有字段的值。主要用于封装对象的状态并提供对其访问和修改的方法。

顺便插一句:添加lombok依赖的作用,自动为实体类生成不同类型的构造函数,从而简化了Java代码编写时构造函数的麻烦。

主要组成部分

下面结合上面介绍的MVC典型架构,来解释一下SpringBoot项目中不同文件夹各自的作用。

  • controller文件夹——控制层,在使用中通常用于接收用户的HTTP请求并返回HTTP响应,需要调用相应的业务逻辑。
  • mapper文件夹——通常负责与数据库进行交互
  • pojo文件夹——通常包含表示简单Java对象的Java类,具有私有字段、公共getter和setter,以及可能的构造函数。这些类通常用于在应用程序中建模数据,并且通常用作实体类或数据传输对象。
  • service文件夹——模型层,包含具体服务的接口。
  • service文件夹下的impl——用于上层文件夹接口的具体实现。
  • utils文件夹——通常存放着一些工具类,是一些通用的、不属于业务逻辑的功能模块。用来执行一些常见的操作,比如字符串处理、日期操作、文件操作等。

user数据表——对应的字段以及属性

用户密码一般需要经过加密,数据库中记录MD5值

用户头像一般储存在第三方服务器上,数据库中记录索引值

部分代码

如果不是想具体上手实践的这一部分可以直接跳过了。结合上面提供的项目文件结构直接进行复制粘贴使用即可。

需要在pom.xml中添加lombok的依赖。

    <dependency><groupId>org.projectlombok</groupId><artifactId>lombok</artifactId></dependency>

controller文件夹下的UserController.java的内容

package org.example.controller;import org.example.pojo.Result;
import org.example.pojo.User;
import org.example.service.UserService;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.web.bind.annotation.PostMapping;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RestController;@RestController
@RequestMapping("/user")
public class UserController {@Autowiredprivate UserService userService;@PostMapping("register")public Result register(String username,String password){//查询用户User u = userService.findByUserName(username);if (u==null){//没有占用//注册userService.register(username,password);return Result.success();}else{//占用return Result.error("用户名已被占用");}//注册}
}

mapper文件夹下的UserMapper.java的内容

package org.example.mapper;import org.example.pojo.User;
import org.apache.ibatis.annotations.Insert;
import org.apache.ibatis.annotations.Mapper;
import org.apache.ibatis.annotations.Select;
@Mapper
public interface UserMapper {//根据用户名查询用户@Select("select * from user where username=#{username}")User findByUserName(String username);//添加@Insert("insert into user(username,password,create_time,update_time)" +" values(#{username},#{password},now(),now())")void add(String username, String password);
}

pojo文件夹下的User.java的内容

package org.example.pojo;import lombok.Data;import java.time.LocalDateTime;
//lombok 在编译阶段,为实体类自动生成setter getter toString
//pom 文件中引入依赖 在实体类上添加注释@Data
public class User {private Integer id;//主键IDprivate String username;//用户名private String password;//密码private String nickname;//昵称private String email;//邮箱private String userPic;//用户头像地址private LocalDateTime createTime;//创建时间private LocalDateTime updateTime;//更新时间
}

Article.java的内容

package org.example.pojo;import lombok.Data;import java.time.LocalDateTime;@Data
public class Article {private Integer id;//主键IDprivate String title;//文章标题private String content;//文章内容private String coverImg;//封面图像private String state;//发布状态 已发布|草稿private Integer categoryId;//文章分类idprivate Integer createUser;//创建人IDprivate LocalDateTime createTime;//创建时间private LocalDateTime updateTime;//更新时间
}

Category.java的内容

package org.example.pojo;import lombok.Data;import java.time.LocalDateTime;@Data
public class Category {private Integer id;//主键IDprivate String categoryName;//分类名称private String categoryAlias;//分类别名private Integer createUser;//创建人IDprivate LocalDateTime createTime;//创建时间private LocalDateTime updateTime;//更新时间
}

Result.java的内容

package org.example.pojo;import lombok.AllArgsConstructor;
import lombok.Data;
import lombok.NoArgsConstructor;//统一响应结果
@NoArgsConstructor
@AllArgsConstructor
@Data
public class Result<T> {private Integer code;//业务状态码  0-成功  1-失败private String message;//提示信息private T data;//响应数据//快速返回操作成功响应结果(带响应数据)public static <E> Result<E> success(E data) {return new Result<>(0, "操作成功", data);}//快速返回操作成功响应结果public static Result success() {return new Result(0, "操作成功", null);}public static Result error(String message) {return new Result(1, message, null);}
}

Service文件夹下Userservice.java的内容

package org.example.service;import org.example.pojo.User;
public interface UserService {//根据用户名查询用户User findByUserName(String username);//注册void register(String username,String password);
}

UserServiceImpl的内容

package org.example.service;import org.example.pojo.User;
public interface UserService {//根据用户名查询用户User findByUserName(String username);//注册void register(String username,String password);
}

utils文件夹下Md5Util.java的内容

package org.example.service;import org.example.pojo.User;
public interface UserService {//根据用户名查询用户User findByUserName(String username);//注册void register(String username,String password);
}

SystemApplication.java的内容

package org.example;import org.springframework.boot.SpringApplication;
import org.springframework.boot.autoconfigure.SpringBootApplication;@SpringBootApplication
public class SystemApplication {public static void main( String[] args ) {SpringApplication.run(SystemApplication.class,args);}
}

application.yml的内容

spring:datasource:driver-class-name: com.mysql.cj.jdbc.Driverurl: jdbc:mysql://localhost:3306/数据表名username: rootpassword: root

接口成功验证

因为缺少前端页面,所以需要用到接口检验工具。

这里推荐的软件是Apifox,功能强大且目前使用范围较广。

首先重启一下项目程序

按照下图的方式传递参数,可以看到返回的json格式符合一般接口文档的要求。

可以看到Windows本地MySQL数据库成功接收到新插入的username,password数据。

接口开发成功。

尾声

后面会针对系统需要的功能针对性的一个接口一个接口进行开发,大家点个关注跟进一下。

这篇关于后端系统开发之——创建注册接口的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!


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

相关文章

Spring Boot + MyBatis Plus 高效开发实战从入门到进阶优化(推荐)

《SpringBoot+MyBatisPlus高效开发实战从入门到进阶优化(推荐)》本文将详细介绍SpringBoot+MyBatisPlus的完整开发流程,并深入剖析分页查询、批量操作、动... 目录Spring Boot + MyBATis Plus 高效开发实战:从入门到进阶优化1. MyBatis

Python基于wxPython和FFmpeg开发一个视频标签工具

《Python基于wxPython和FFmpeg开发一个视频标签工具》在当今数字媒体时代,视频内容的管理和标记变得越来越重要,无论是研究人员需要对实验视频进行时间点标记,还是个人用户希望对家庭视频进行... 目录引言1. 应用概述2. 技术栈分析2.1 核心库和模块2.2 wxpython作为GUI选择的优

go中空接口的具体使用

《go中空接口的具体使用》空接口是一种特殊的接口类型,它不包含任何方法,本文主要介绍了go中空接口的具体使用,具有一定的参考价值,感兴趣的可以了解一下... 目录接口-空接口1. 什么是空接口?2. 如何使用空接口?第一,第二,第三,3. 空接口几个要注意的坑坑1:坑2:坑3:接口-空接口1. 什么是空接

idea中创建新类时自动添加注释的实现

《idea中创建新类时自动添加注释的实现》在每次使用idea创建一个新类时,过了一段时间发现看不懂这个类是用来干嘛的,为了解决这个问题,我们可以设置在创建一个新类时自动添加注释,帮助我们理解这个类的用... 目录前言:详细操作:步骤一:点击上方的 文件(File),点击&nbmyHIgsp;设置(Setti

利用Python开发Markdown表格结构转换为Excel工具

《利用Python开发Markdown表格结构转换为Excel工具》在数据管理和文档编写过程中,我们经常使用Markdown来记录表格数据,但它没有Excel使用方便,所以本文将使用Python编写一... 目录1.完整代码2. 项目概述3. 代码解析3.1 依赖库3.2 GUI 设计3.3 解析 Mark

利用Go语言开发文件操作工具轻松处理所有文件

《利用Go语言开发文件操作工具轻松处理所有文件》在后端开发中,文件操作是一个非常常见但又容易出错的场景,本文小编要向大家介绍一个强大的Go语言文件操作工具库,它能帮你轻松处理各种文件操作场景... 目录为什么需要这个工具?核心功能详解1. 文件/目录存javascript在性检查2. 批量创建目录3. 文件

Spring 中使用反射创建 Bean 实例的几种方式

《Spring中使用反射创建Bean实例的几种方式》文章介绍了在Spring框架中如何使用反射来创建Bean实例,包括使用Class.newInstance()、Constructor.newI... 目录1. 使用 Class.newInstance() (仅限无参构造函数):2. 使用 Construc

基于Python开发批量提取Excel图片的小工具

《基于Python开发批量提取Excel图片的小工具》这篇文章主要为大家详细介绍了如何使用Python中的openpyxl库开发一个小工具,可以实现批量提取Excel图片,有需要的小伙伴可以参考一下... 目前有一个需求,就是批量读取当前目录下所有文件夹里的Excel文件,去获取出Excel文件中的图片,并

C#原型模式之如何通过克隆对象来优化创建过程

《C#原型模式之如何通过克隆对象来优化创建过程》原型模式是一种创建型设计模式,通过克隆现有对象来创建新对象,避免重复的创建成本和复杂的初始化过程,它适用于对象创建过程复杂、需要大量相似对象或避免重复初... 目录什么是原型模式?原型模式的工作原理C#中如何实现原型模式?1. 定义原型接口2. 实现原型接口3

Spring Cloud之注册中心Nacos的使用详解

《SpringCloud之注册中心Nacos的使用详解》本文介绍SpringCloudAlibaba中的Nacos组件,对比了Nacos与Eureka的区别,展示了如何在项目中引入SpringClo... 目录Naacos服务注册/服务发现引⼊Spring Cloud Alibaba依赖引入Naco编程s依