iis服务器助手广告广告
返回顶部
首页 > 资讯 > 精选 >如何设计API接口实现统一格式返回
  • 672
分享到

如何设计API接口实现统一格式返回

2023-06-05 04:06:54 672人浏览 泡泡鱼
摘要

这篇文章给大家介绍如何设计api接口实现统一格式返回,内容非常详细,感兴趣的小伙伴们可以参考借鉴,希望对大家能有所帮助。前言在移动互联网,分布式、微服务盛行的今天,现在项目绝大部分都采用的微服务框架,前后端分离方式,(题外话:前后端的工作职

这篇文章给大家介绍如何设计api接口实现统一格式返回,内容非常详细,感兴趣的小伙伴们可以参考借鉴,希望对大家能有所帮助。

前言

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

一般系统的大致整体架构图如下:

如何设计API接口实现统一格式返回

需要说明的是,有些小伙伴会回复说,这个架构太简单了吧,太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 - 内部服务器错误

如何设计API接口实现统一格式返回

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

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

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

Message

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

如何设计API接口实现统一格式返回

再在枚举中定义,状态码

如何设计API接口实现统一格式返回

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

Data

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

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

如何设计API接口实现统一格式返回

控制层Controller

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

如何设计API接口实现统一格式返回

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

美观优化

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

如何设计API接口实现统一格式返回

那我们来改造一下Controller

如何设计API接口实现统一格式返回

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

优雅优化

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

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

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

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

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

如何设计API接口实现统一格式返回

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

实现方案

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

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

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

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

注解类

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

如何设计API接口实现统一格式返回

拦截器

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

如何设计API接口实现统一格式返回

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

重写返回体

如何设计API接口实现统一格式返回

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

如何设计API接口实现统一格式返回

怎么做全局的异常处理,篇幅原因,老顾这里就不做介绍了,只要思路理清楚了,自行改造就行。

重新Controller

如何设计API接口实现统一格式返回

在控制器类上或者方法体上加上@ResponseResult注解,这样就ok了,简单吧。

关于如何设计API接口实现统一格式返回就分享到这里了,希望以上内容可以对大家有一定的帮助,可以学到更多知识。如果觉得文章不错,可以把它分享出去让更多的人看到。

--结束END--

本文标题: 如何设计API接口实现统一格式返回

本文链接: https://www.lsjlt.com/news/241281.html(转载时请注明来源链接)

有问题或投稿请发送至: 邮箱/279061341@qq.com    QQ/279061341

本篇文章演示代码以及资料文档资料下载

下载Word文档到电脑,方便收藏和打印~

下载Word文档
猜你喜欢
  • 如何设计API接口实现统一格式返回
    这篇文章给大家介绍如何设计API接口实现统一格式返回,内容非常详细,感兴趣的小伙伴们可以参考借鉴,希望对大家能有所帮助。前言在移动互联网,分布式、微服务盛行的今天,现在项目绝大部分都采用的微服务框架,前后端分离方式,(题外话:前后端的工作职...
    99+
    2023-06-05
  • API接口统一格式返回的方法
    本篇内容介绍了“API接口统一格式返回的方法”的有关知识,在实际案例的操作过程中,不少人都会遇到这样的困境,接下来就让小编带领大家学习一下如何处理这些情况吧!希望大家仔细阅读,能够学有所成!接口交互前端和后端进行交互,前端按照约定请求URL...
    99+
    2023-06-27
  • .NetCore Web Api怎么用ActionFilterAttribute统一接口返回值格式
    本文小编为大家详细介绍“.NetCore Web Api怎么用ActionFilterAttribute统一接口返回值格式”,内容详细,步骤清晰,细节处理妥当,希望这篇“.NetCore Web Ap...
    99+
    2023-06-29
  • .NetCore Web Api 利用ActionFilterAttribute统一接口返回值格式及问题解析
    .Net Core 同 Asp.Net MVC一样有几种过滤器,这里不再赘述每个过滤器的执行顺序与作用。 在实际项目开发过程中,统一API返回值格式对前端或第三方调用将是非常必要的,...
    99+
    2024-04-02
  • 详解SpringBoot如何实现统一后端返回格式
    目录1.为什么要对SpringBoot返回统一的标准格式1.1 返回String1.2 返回自定义对象1.3 接口异常2.定义返回对象3.定义状态码4.统一返回格式5.高级实现方式5...
    99+
    2024-04-02
  • 关于springboot的接口返回值统一标准格式
    目录一、目标二、为什么要对springboot的接口返回值统一标准格式第一种格式:response为String第二种格式:response为Objct第三种格式:response为...
    99+
    2024-04-02
  • SpringBoot如何统一后端返回格式
    这篇文章主要讲解了“SpringBoot如何统一后端返回格式”,文中的讲解内容简单清晰,易于学习与理解,下面请大家跟着小编的思路慢慢深入,一起来研究和学习“SpringBoot如何统一后端返回格式”吧!目录为什么要对SpringBoot返回...
    99+
    2023-06-20
  • SpringBoot怎么实现统一后端返回格式
    这篇文章主要介绍“SpringBoot怎么实现统一后端返回格式”,在日常操作中,相信很多人在SpringBoot怎么实现统一后端返回格式问题上存在疑惑,小编查阅了各式资料,整理出简单好用的操作方法,希望对大家解答”SpringBoot怎么实...
    99+
    2023-06-30
  • SpringBoot统一返回JSON格式实现方法详解
    目录定义JSON格式定义JavaBean字段定义返回体类Result实体返回测试统一返回JSON格式进阶全局处理(@RestControllerAdvice)@ResponseBod...
    99+
    2023-02-03
    SpringBoot返回JSON格式 SpringBoot无侵入式返回JSON格式
  • 详解SpringBoot如何统一后端返回格式
    目录为什么要对SpringBoot返回统一的标准格式第一种:返回 String第二种:返回自定义对象第三种:接口异常定义返回标准格式高级实现方式接口异常问题SpringBoot为什么...
    99+
    2024-04-02
  • SpringBoot返回统一的JSON标准格式实现步骤
    期望返回的JSON格式如下 { "code": 200, "msg": "操作成功", "data": "hello jenkins" } 实现步骤如下 1.自定义...
    99+
    2024-04-02
  • 如何设计一个安全的API接口详解
    目录前言一 安全性问题 1.1 调用接口的先决条件-token 1.2 使用POST作为接口请求方式 1.3 客户端IP白名单 1.4 单个接口针对ip限流 1.5 记录接口请求日志...
    99+
    2024-04-02
  • SpringBoot统一接口返回及全局异常如何处理
    这篇文章主要介绍“SpringBoot统一接口返回及全局异常如何处理”的相关知识,小编通过实际案例向大家展示操作过程,操作方法简单快捷,实用性强,希望这篇“SpringBoot统一接口返回及全局异常如何处理”文章能帮助大家解决问题。一、Sp...
    99+
    2023-07-02
  • api接口对接如何实现,php如何对接api
    这篇文章来分享下api接口对接如何实现,还有源码,希望对新手有所帮助。 什么是API 我的回答:API( 应用程序编程接口):一般来说,这是一套明确定义的各种软件组件之间的通信方法。 什么是API?我们不妨用一个小故事展示出来: 研发人员A...
    99+
    2023-09-01
    php 开发语言
  • 后端接口返回文件流格式、前端如何实现文件下载导出呢?
    在项目开发过程中,难免会需要实现文件下载功能,记录下自己实际开发过程过程中遇到两种实现的方式。一种:后端直接返回加密url ,前端解密后直接使用 a标签下载就可以,这种方法相等比较简单,另一种:后端接...
    99+
    2023-09-02
    前端 java javascript
  • Laravel统一封装接口返回状态实例讲解
    前后端分离,接口返回封装方便你我他(方便前后端合作开发) 在Laravel中可以在公共继承的Controller.php写方法进行调用返回 app/Http/Control...
    99+
    2024-04-02
  • jmeter如何提取上一个接口返回值
    JMeter可以使用正则表达式提取上一个接口返回值。以下是提取上一个接口返回值的步骤:1. 在JMeter中,添加一个正则表达式提取...
    99+
    2023-08-30
    jmeter
  • 在Spring Boot中统一Restful API返回值格式与统一处理异常怎么解决
    这篇文章主要为大家分析了在Spring Boot中统一Restful API返回值格式与统一处理异常怎么解决的相关知识点,内容详细易懂,操作细节合理,具有一定参考价值。如果感兴趣的话,不妨跟着跟随小编一起来看看,下面跟着小编一起深入学习“在...
    99+
    2023-06-16
  • 设计和实现CI/CD管道的PHP API接口
    随着 Web 技术的不断发展,越来越多的开发人员开始采用 CI/CD 工具链来加快和简化代码交付和部署的流程。而 PHP 作为最常用的 Web 开发语言之一,也需要采用 CI/CD 工具链来提高开发效率和提升代码质量。本文将介绍...
    99+
    2024-01-22
    PHP编程 API接口 CI/CD管道
  • Java接口返回省市区树形结构如何实现
    这篇文章主要介绍“Java接口返回省市区树形结构如何实现”的相关知识,小编通过实际案例向大家展示操作过程,操作方法简单快捷,实用性强,希望这篇“Java接口返回省市区树形结构如何实现”文章能帮助大家解决问题。前言最近和前端联调接口,需要进行...
    99+
    2023-07-04
软考高级职称资格查询
编程网,编程工程师的家园,是目前国内优秀的开源技术社区之一,形成了由开源软件库、代码分享、资讯、协作翻译、讨论区和博客等几大频道内容,为IT开发者提供了一个发现、使用、并交流开源技术的平台。
  • 官方手机版

  • 微信公众号

  • 商务合作