看看这后端API接口写得,那真叫一个巴适~

springboot/web项目优秀的后端接口体系,看一篇就够了 springboot/web项目优秀的后端接口体系,看一篇就够了 项目构建-统一参数校验,统一结果响应,统一异常处理,统一错误处理,统一日志记录,统一生成api文档 1. 前言 一个后端接口大致分为四个部分组成:接口地址(url)、接口请求方式(get、post等)、请求数据(request)、响应数据(response)。 本文主要演示如何构建起一个优秀的后端接口体系,体系构建好了自然就有了规范... 阅读详情

在移动互联网,分布式、微服务盛行的今天,现在项目绝大部分都采用的微服务框架,前后端分离方式,(题外话:前后端的工作职责越来越明确,现在的前端都称之为大前端,技术栈以及生态圈都已经非常成熟;以前后端人员瞧不起前端人员,那现在后端人员要重新认识一下前端,前端已经很成体系了)。

一般系统大致架构如下:

需要说明的是,有些小伙伴会回复说,这个架构太简单了吧,太low了,什么网关啊,缓存啊,消息中间件啊,都没有。因为这篇主要聊API接口,所以我们聚焦这一点。

接口交互

前端和后端进行交互,前端按照约定请求URL路径,并传入相关参数,后端服务器接收请求,进行业务处理,返回数据给前端。

针对URL路径的restful风格,以及传入参数的公共请求头的要求(如:app_version,api_version,device等),这里就不介绍了,小伙伴们可以自行去了解,也比较简单。

后端服务器如何实现把数据返回给前端?

返回格式

后端返回给前端我们一般用JSON体方式,定义如下:

{
  #返回状态码
  code:integer,
  #返回信息描述
  message:string,
  #返回值
  data:object
}

CODE状态码

code返回状态码,一般小伙伴们是在开发的时候需要什么,就添加什么。

如接口要返回用户权限异常,我们加一个状态码为101吧,下一次又要加一个数据参数异常,就加一个102的状态码。这样虽然能够照常满足业务,但状态码太凌乱了

我们应该可以参考HTTP请求返回的状态码

:下面是常见的HTTP状态码:
200 - 请求成功
301 - 资源(网页等)被永久转移到其它URL
404 - 请求的资源(网页等)不存在
500 - 内部服务器错误

我们可以参考这样的设计,这样的好处就把错误类型归类到某个区间内,如果区间不够,可以设计成4位数。

#1000~1999 区间表示参数错误
#2000~2999 区间表示用户错误
#3000~3999 区间表示接口异常

这样前端开发人员在得到返回值后,根据状态码就可以知道,大概什么错误,再根据message相关的信息描述,可以快速定位。

Message

这个字段相对理解比较简单,就是发生错误时,如何友好的进行提示。一般的设计是和code状态码一起设计,如

再在枚举中定义,状态码

状态码和信息就会一一对应,比较好维护。

Data

返回数据体,JSON格式,根据不同的业务又不同的JSON体。

我们要设计一个返回体类Result

控制层Controller

我们会在controller层处理业务请求,并返回给前端,以order订单为例

我们看到在获得order对象之后,我们是用的Result构造方法进行包装赋值,然后进行返回。小伙伴们有没有发现,构造方法这样的包装是不是很麻烦,我们可以优化一下。

美观美化

我们可以在Result类中,加入静态方法,一看就懂

那我们来改造一下Controller

代码是不是比较简洁了,也美观了。

优雅优化

上面我们看到在Result类中增加了静态方法,使得业务处理代码简洁了。但小伙伴们有没有发现这样有几个问题:

1、每个方法的返回都是Result封装对象,没有业务含义

2、在业务代码中,成功的时候我们调用Result.success,异常错误调用Result.failure。是不是很多余

3、上面的代码,判断id是否为null,其实我们可以使用validate做校验,没有必要在方法体中做判断。

我们最好的方式直接返回真实业务对象,最好不要改变之前的业务方式,如下图

这个和我们平时的代码是一样的,非常直观,直接返回order对象,这样是不是很完美。那实现方案是什么呢?

实现方案

小伙伴们怎么去实现是不是有点思路,在这个过程中,我们需要做几个事情

1、自定义一个注解@ResponseResult,表示这个接口返回的值需要包装一下

2、拦截请求,判断此请求是否需要被@ResponseResult注解

3、核心步骤就是实现接口ResponseBodyAdvice和@ControllerAdvice,判断是否需要包装返回值,如果需要,就把Controller接口的返回值进行重写。

注解类

用来标记方法的返回值,是否需要包装

拦截器

拦截请求,是否此请求返回的值需要包装,其实就是运行的时候,解析@ResponseResult注解

此代码核心思想,就是获取此请求,是否需要返回值包装,设置一个属性标记。

重写返回体

上面代码就是判断是否需要返回值包装,如果需要就直接包装。这里我们只处理了正常成功的包装,如果方法体报异常怎么办?处理异常也比较简单,只要判断body是否为异常类。

重写Controller

在控制器类上或者方法体上加上自定义注解@ResponseResult,这样就ok了,简单吧。到此返回的设计思路完成,是不是又简洁,又优雅。

这个方案还有没有别的优化空间,当然是有的。如:每次请求都要反射一下,获取请求的方法是否需要包装,其实可以做个缓存,不需要每次都需要解析。当然整体思路了解,小伙伴们就可以在此基础上面再自行扩展。

 

入门小白必看-前后端接口的调用和区别(后端篇) ​ 首先介绍一下后端接口是干什么用的(对于小白来说比较白痴(我),大神勿喷),通常指的是服务器与客户端之间进行数据交互的API接口,前端就是典型的客户端,可以搭配上篇食用噢前端篇。 阅读详情

相关推荐

如何设计一个API接口?

本篇文章从安全性、幂等性、数据规范等方面讨论了API设计规范。除此之外,一个好的API还少不了一个优秀的接口文档。接口文档的可读性非常重要,虽然很多程序员都不喜欢写文档,而且不喜欢别人不写文档。为了不增加程序员的压力,推荐使用swagger或其他接口管理工具,通过简单配置,就可以在开发中测试接口的连通性,上线后也可以生成离线文档用于管理API。

weixin_44353800的博客 2496

后端开发——接口篇

restful rpc 后端开发 接口

追求幸福,探索未知的博客 2万+

前后端API交互:实战演练与深入理解

本文还有配套的精品资源,点击获取 简介:API作为IT领域中连接软件系统的桥梁,使得数据和服务能够无缝传递。本项目将指导学习如何在前端和后端环境中有效地使用API,涵盖了从设计API接口到前后端交互、错误处理、认证授权、数据转换、前端开发、测试到部署的全流程。通过构建一个示例应用程序,开发者可以深入理解前后端消费API的机制,并提升开发和协作技能。 1. API在...

weixin_42561464的博客 4650

Spring Boot 后端接口规范大全,告别混乱代码

一个后端接口大致分为四个部分组成:接口地址(url)、接口请求方式(get、post等)、请求数据(request)、响应数据(response)。虽然说后端接口的编写并没有统一规范要求,而且如何构建这几个部分每个公司要求都不同,没有什么“一定是最好的”标准,但其中最重要的关键点就是看是否规范。一个接口一般对参数(请求数据)都会进行安全校验,参数校验的重要性自然不必多说,那么如何对参数进行校验就有讲究了。一般来说有三种常见的校验方式,我们使用了最简洁的第三种方法业务层校验。

m0_71777195的博客 2163

SNAP实战:Sentinel-1 GRD数据从预处理到后向散射系数生成全流程解析

本文详细解析了Sentinel-1 GRD数据从预处理到后向散射系数生成的全流程,包括辐射定标、噪声处理、地形校正等关键步骤。通过SNAP软件实战操作,帮助用户掌握SAR影像处理技巧,提升数据质量与分析效率,适用于地表变化监测、灾害评估等应用场景。

weixin_29239661的博客 536

STM32F103+LAN9252实战:从站代码迁移中的5个硬件坑与解决方案

本文分享了将EtherCAT从站代码从STM32F767迁移至STM32F103平台时,搭配LAN9252遇到的五个典型硬件问题及解决方案。核心挑战包括时钟源不匹配、FSMC时序配置、中断映射错误、片选资源不足以及Flash烧录异常。文章通过实战经验,强调了硬件差异对代码迁移的关键影响,并提供了具体的调试思路与配置方法。

p5l2m9n4o6q的博客 698

如何做一个api接口?

如何做一个api接口?:我们知道API其实就是应用程序编程接口,可以把它理解为是一种通道,用来和不同软件系统间进行通信,本质上它是预先定义的函数:-api,接口1我们知道API其实就是应用程序编程接口,可以把它理解为是一种通道,用来和不同软件系统间进行通信,本质上它是预先定义的函数。API有很多种形式,最为常见的就是以HTTP协议来提供服务(如:RESTful),只要符合规范就可正常使用。现在各类企业在信息化这块都会用到第三方提供的API,也会提供API给第三方调用,因此设计API也是需要慎重的。

Noah_ZX的博客 1万+

基于springboot生鲜食品订购系统的设计与实现

近年来互联网络的迅猛发展和电子终端设备的普及,赋予了各行业充足的发展空间。微信小程序的O2O生鲜食品订购相比于传统信息技术,时效性是它最大的特色,已经在电子娱乐、经济等中发挥着举足轻重的作用。短时间内迅速扩大了线上管理系统的规模。尽管O2O生鲜食品订购已经有了很大程度的发展,但在微信小程序的O2O生鲜食品订购领域上却少有建设。

1024

后端API接口

在一个新型的web应用中,由于中台只负责数据的输送,不涉及具体业务,所以就需要搭建一个业务服务来组装业务数据,把 浏览器/客户端 和中台连接起来。业务服务将组装完的数据以统一的数据格式返回给客户端,这里就需要对业务服务后台接口进行统一设计。下面就来具体介绍一下如何设计和编写后端接口。

Pursuit_li的博客 1288

医学成像学习笔记(一):核磁共振成像(MRI)k空间为何是图像频谱详解

前言   k空间是核磁共振成像图像重建的核心,可能很多人像笔者一样第一次学时会非常疑惑,为何k空间是图像的频域空间,观其填充过程,明明是空域信号的采样填充呀。网上很少有文章讨论这个问题,所以笔者在此写下自己的理解,供大家参考。 MRI位置编码   现在的MRI一次扫描的是一个断层或者多个断层,所谓断层就是一个有厚度的面,通过z方向梯度场来选择。我们扫描一个断层的目的是为了获得该断层各位置的质子情况,它们携带着组织的性质信息,反应出来的就是信号强度。如果整个断层都采用相同的磁场强度,而我们只能得到一个断

意疏的学习笔记 1万+

手把手教你用FPGA实现SerDes高速接口设计(附避坑指南)

本文是一份详尽的FPGA SerDes高速接口设计实战指南。文章深入剖析了SerDes硬核(如GTX/GTH)的时钟管理、发送端均衡、接收端CDR与均衡等核心模块,并提供了Verilog代码示例。重点分享了信号完整性分析、眼图调试与误码率测试等实战经验,附有自定义高速视频流接口的完整实现案例与避坑指南,帮助工程师从“会用”到“懂”且能独立驾驭高速接口设计。

ik678901234的博客 1146

Spring Boot如何设计优雅的后端接口

使用Spring Boot设计后端接口

qq_45917176的博客 1638

Android 9.0 系统framework关于忘记开机锁屏密码进不去系统桌面清除锁屏密码问题的解决

在9.0的系统rom定制化开发中,在一些产品中带锁屏密码的功能中,系统默认是滑动解锁,但是客户会设置锁屏密码,在某些时候会 忘掉锁屏密码,导致需要进入恢复出厂设置然后才能进入系统桌面,这样就导致系统的保存的资料都丢失了,所以需要要求提供接口 在下拉状态栏中或者系统服务中在忘记锁屏密码后不恢复出厂设置的情况下,可以清除锁屏密码,接下来就来实现功能

安卓兼职framework和app工程师的博客 615

如何开发API,这样一份完整的API开发指南足够了

接口名称:item_recommendcurl调用代码PHP调用代码还支持PHPsdk、Java、C#、Python语言调用。返回数据为json格式。

Jernnifer_mao的博客 2986

海思3403烧结、复用及mic输入

3403调试的第一步是版本烧结,版本烧结经常遇到问题,本文记录总结遇到的各种问题。

平面到立体 1355

Open3D 计算点云法向量的夹角【2026最新版】

计算法向量的夹角,博客长期更新,本文最新更新时间为:2026年3月7日。

点云侠的博客 3131

编写开发API接口

第三步:从/router_handler/user.js数据库获取信息【/router_handler/user.js】第二步:index.js创建数据库的连接对象【index.js】编写好代码的接口后,可以写对应的API接口文档。第一步:根目录下初始化包管理配置文件。5.抽离用户路由模块中的处理函数。对象,分别向外共享如下两个。3.配置解析表单数据的中间件。2.安装并配置mysql模块。第二步:安装特定版本的。文件用户的路由模块始化【2. 配置cors跨域。4.初始化用户路由模块。1.在数据库中新建表。

刘鑫磊 2823

Probability and Statistics - 4th edition

Probability and Statistics - 4th edition

封装js函数:判断今天是否为节假日、用户信息脱敏、模糊搜索...持续更新

​项目地址:传送门 1. 返回指定时间段数组(年) ``` export function getDateArray (startYear,endYear){ let DateArray = [] let num = endYear-startYear for(let i=0;i<num;i++){ startYear++ DateArray.push(startYear) } return DateArray ...

LoveMe_LoveMyDog的博客 2426

汉书HE8,好用的汇编代码编写工具

汉书HE8,好用的汇编代码编写工具早期编写汇编代码所用功能强大

大中型超市收银系统(可直接运行)

光步前台收银系统系统功能:商品销售、商品退货、挂单、收银员权限、会员销售、单品取消、整单取消、商品查询、脱机销售、脱机数据上传,基本资料下载,开钱箱、小票打印、收款结算,支持多币种付款方式(现金、储值卡、礼券、微信等),支持多种促销。运行环境:.net 4.0登陆信息用户名:1001 密码:123456内置商品信息,商品编码可输入00001000 - 00010000,测试效果相关功能键F5 结算 F9挂单 F11商品查询 F8退货 Insert单品取消 Del整单取消 F12开钱箱F2 会员 Ctrl+Z退出系统 Home 锁屏 相关源码待公开

编写后端接口步骤

后端接口书写步骤

路小飞 8205

如何实现1分钟写一个API接口

Rocket API 第一步,创建接口 第二步,定义接口 第三步,接口逻辑 第四步,接口访问测试 官方文档地址:[https://gitee.com/mihuajun/rocket-api-doc/wikis/pages]

maple_son的专栏 4万+

搞懂 API ,后端 API 接口设计方法

后端 API 接口设计是开发 Web 应用和移动应用的关键组成部分,好的接口设计可以提高应用的稳定性、可维护性和安全性。以下是一些常用的后端 API 接口设计方法:

qq_42107247的博客 1688

后端Springboot框架搭建APi接口开发(第一章)

快速直观的利用Stringboot搭建简易的API接口。实现后端对数据库增删改查

周彰健的博客 1万+

通宵整理:后端接口优化的14个技巧!

你好,我是田哥。最近,有很多盆友找我咨询后端接口优化问题,主要也应该是现在前后端分离比较多,导致很多人就只知道干后端的活,所以就想着把后端的接口油画起来。在实际项目中,当越来越多对性能的吐槽反馈到我们这里的时候,我们意识到,接口性能的问题的优先级必须提高了。然后我们就跟踪了1周的接口性能监控,这个时候我们的心情是这样的:有20多个慢接口,5个接口响应时间超过5s,1个超过...

田维常 1547

如何设计一个“正确”的后端接口

一个后端接口正常情况下会包含①接口地址url②接口的请求方式(get/post)③请求数据④相应数据 在此记录一下如何构建一个完整的后端接口的过程 无论一个简单还是复杂的接口,无论是对外开放的接口还是http接口,参数校验是比不可少的,因为调用者每次调用传入的参数是未知的,那如果他传进来的参数是不符合规则的,我们就没必要去执行后面的业务逻辑,只有在客户(调用者)传入的参数是合法且有效的,才必要去执...

m0_43584016的博客 3917

这里有一份SpringBoot 后端接口规范

接口地址(url)、接口请求方式(get、post等)、请求数据(request)、响应数据(response)。虽然说后端接口的编写并没有统一规范要求,而且如何构建这几个部分每个公司要求都不同,没有什么“一定是最好的”标准,但其中最重要的关键点就是看是否规范。一个接口一般对参数(请求数据)都会进行安全校验,参数校验的重要性自然不必多说,那么如何对参数进行校验就有讲究了。一般来说有三种常见的校验方式,我们使用了最简洁的第三种方法业务层校验Validator + BindResult校验。

lingqu+wx bjmsb06 1209
上一篇: 一个可以离线查询 IP 来源和 ISP 信息的终端利器
下一篇: 面试阿里P6,过关斩将直通2面,结果3面找了个架构师来吊打我?
爱码士人员
博客等级 码龄6年 129粉丝 91原创
评论 3
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00元
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付元
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值