后端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 - 内部服务器错误

 

 

我们可以参考这样的设计,这样的好处就把错误类型归类到某个区间内,如果区间不够,可以设计成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,其实我们可以使用hibernate validate做校验,没有必要在方法体中做判断。

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

 

 

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

实现方案

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

1、定义一个注解@ResponseResult,表示这个接口返回的值需要包装一下
2、拦截请求,判断此请求是否需要被@ResponseResult注解
3、核心步骤就是实现接口ResponseBodyAdvice和@ControllerAdvice,判断是否需要包装返回值,如果需要,就把Controller接口的返回值进行重写。

注解类

 

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

 

 

拦截器

 

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

 

 

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

 

重写返回体

 

 

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

 

 

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

 

重写Controller

 

 

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

总结

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

漠冰的痛
关注 关注
  • 7
    点赞
  • 39
    收藏
    觉得还不错? 一键收藏
  • 2
    评论
前端如何使用后端提供的接口拿数据,文件配置及详细使用
m0_61663332的博客
01-06 6957
前端如何使用后端提供的接口,怎么通过后端返回的数据渲染页面,通过vuex和localstorage对用户登录后的token进行持久化处理,通过携带登陆成功的token获取后端的值
如何做一个api接口
Noah_ZX的博客
03-06 6866
如何做一个api接口?:我们知道API其实就是应用程序编程接口,可以把它理解为是一种通道,用来和不同软件系统间进行通信,本质上它是预先定义的函数:-api接口1我们知道API其实就是应用程序编程接口,可以把它理解为是一种通道,用来和不同软件系统间进行通信,本质上它是预先定义的函数。API有很多种形式,最为常见的就是以HTTP协议来提供服务(如:RESTful),只要符合规范就可正常使用。现在各类企业在信息化这块都会用到第三方提供的API,也会提供API给第三方调用,因此设计API也是需要慎重的。
赞叹不已!后端API接口设计尽显优雅风范
最新发布
Yaml4的博客
04-12 994
这个方案还有没有别的优化空间,当然是有的。如:每次请求都要反射一下,获取请求的方法是否需要包装,其实可以做个缓存,不需要每次都需要解析。当然整体思路了解,小伙伴们就可以在此基础上面自行扩展。
如何开发API,这样一份完整的API开发指南足够了
Jernnifer_mao的博客
02-21 2274
接口名称:item_recommendcurl调用代码PHP调用代码还支持PHPsdk、Java、C#、Python语言调用。返回数据为json格式。
编写后端接口步骤
路小飞
04-21 6344
后端接口书写步骤
后端分离开发,API接口这样写才简洁
2301_78671173的博客
09-06 522
代码示例/*** 创建枚举类*/枚举类中可以有多个(属性)枚举项,每一个枚举项都是枚举类的实例代码示例/*** 创建枚举类*/// 定义枚举项A(),C;// 如果根据无参构造器定义枚举项,那么小括号可以省略// 属性// 构造器// 构造器不允许是公共的,默认是私有// 定义方法System.out.println("这是一个方法");反编译static {};
js如何调用api接口数据,javascript调用api接口
chatgpt001的博客
11-30 5447
随着云计算分布式微服务技术的发展,现有网络项目大都基于前后端分离的技术手段实施,一方面是便于缓解后台服务器的压力,充分利用各台服务节点的计算和存储资源,尽可能地提高服务器性能;另一方面可提高服务的可靠性、容灾能力,以便在某服务节点上服务器甚至节点崩溃的情况下得以对该服务快速有效地进行替换或恢复,表现为极强的修复能力(注:先进制造技术的发展和充足的材料供应能力使得时间、价格方面的维修成本不断高于替换成本,让废旧品及时得到回收利用再生产,从而减少繁琐的维修过程,以便缩短维修时间,即能换不修原则)。在Web。
公司搭建自己的后端API接口文档管理工具网站,用户权限admin,admin123
01-11
API管理平台 生成API文档的网站 API接口文档管理工具 公司搭建自己的后端API接口文档管理系统网站,用户权限admin,admin123
flask后端开发接口示例,利用Flask开发后端API接口。.zip
09-28
flask后端开发接口示例,利用Flask开发后端API接口。包含基本的项目配置、统一响应、MySQL和Redis数据库操作、定时任务、图片生成、项目部署、用户权限认证、报表输出、无限层级生成目录树、阿里云手机验证码验证、...
spring-boot-api:spring-boot 通用APP后端api接口 restful api接口 前后分离后端接口
05-01
适用于APP后端接口服务 前后端分离项目提供接口服务 集成jpa(Java持久层API)ORM jpa的curd 原生curd MySQL分页 阿里数据库连接池druid 封装腾讯云CMQ相关接口 redis相关接口API jwt 权限认证 http等请求相关接口 ...
小羽直播-后端api接口.zip
03-03
小羽直播-后端api接口.zip
saas:学生即服务后端API
05-24
Stuaas后端API Stuaas是一个工作委员会网站,公司可以在该网站上发布要由学生申请的职位,公司也可以根据其个人资料聘用学生。 该存储库是用php编写的项目的后端API。 该API当前托管在。 存储库的主分支应用于评分。 笔记: 我们对此解决方案非常热心,我们希望继续积极地致力于这一解决方案,我们将继续推动更新。 提交后所做的任何更改将被推送到分支 。 因此,请随时在上查看我们在该应用程序上的最新进展 要求 Apache Web服务器或类似服务器。 MySql RDBMS或类似。 PHP 7.2或更高版本。 Web服务器中已启用Apache的mod_rewrite模块或类似模块。 作曲家。 安装 下载applicaton的文件并将其放置在Web服务器的根目录中。 使用mod_rewrite或类似的命令将所有请求重定向到public/index.php文件。 已为a
简单PHP做API接口写注册登录-易语言
06-12
简单PHP做API接口写注册登录
back-mock:用于模拟后端API接口
07-04
这个一个模拟后端api数据交互的模块。 ##安装 npm install back-mock ##使用 新建一个文件(假如命名为mock.js)。在里面写入如下代码。 var mockServer = require("back-mock"); var path = require("path"); mock...
java使用枚举进行前后端交互,以列表方式返回前端
Lu程序员之路的博客
06-16 3271
java使用枚举进行前后端交互,以列表方式返回前端
如何设计一个API接口
qq_35821588的博客
10-07 4747
在日常开发中,总会接触到各种接口。前后端数据传输接口,第三方业务平台接口。一个平台的前后端数据传输接口一般都会在内网环境下通信,而且会使用安全框架,所以安全性可以得到很好的保护。这篇文章重点讨论一下提供给第三方平台的业务接口应当如何设计?我们应该考虑哪些问题? 主要从以上三个方面来设计一个安全的API接口。 一 安全性问题 安全性问题是一个接口必须要保证的规范。如果接口保证不了安全性,那么你的接口相当于直接暴露在公网环境中任人蹂躏。 1.1 调用接口的先决条件-token 获取token一般会涉及到几个参
宇宙最强API接口调试工具Apipost
程序大视界
05-05 6165
Apipost = Postman + Swagger + Mock
后台接口提供的调用方法类型
热门推荐
认知 行动 坚持
10-14 1万+
作为一个后台服务,目的就是对外提供接口, 下面来说说后台接口提供的调用方法类型:        1.  直接提供接口, 调用方要进行socket编程来调用。 对主调放来说, 麻烦。        2.  直接提供接口, 并且提供调用的api, 把api给主调方, 主调方直接进行本地调用, 在这个本地调用中封装了socket操作。 对主调方来说, 比较爽, 如:             int
服务器向用户返回的状态码和提示信息
一个抽风的女Ren的博客
08-24 414
常见的有以下一些(方括号中是该状态码对应的HTTP动词)。 200 OK - [GET]:服务器成功返回用户请求的数据,该操作是幂等的(Idempotent)。 201 CREATED - [POST/PUT/PATCH]:用户新建或修改数据成功。 202 Accepted - [*]:表示一个请求已经进入后台排队(异步任务) 204 NO CONTENT - [DELETE]:用户删除数据成功。 302 重定向是暂时的重定向,搜索引擎会抓取新的内容而保留旧.
Ajax 请求后端接口是什么
05-13
Ajax (Asynchronous JavaScript and XML) 是一种用于创建异步 Web 应用程序的技术。它通过 JavaScript 发送 HTTP 请求到后端接口并接收响应,无需刷新整个页面即可更新部分页面内容。 在使用 Ajax 请求后端接口时,需要指定请求的 URL、请求方法、请求参数等信息,并且需要设置回调函数来处理接口的响应数据。后端接口可以是一个 RESTful API,也可以是一个简单的 HTTP 接口,只要能够通过 HTTP 协议进行通信即可。 一般来说,Ajax 请求后端接口的流程如下: 1. 创建 XMLHttpRequest 对象 2. 使用 open() 方法设置请求信息 3. 使用 send() 方法发送请求 4. 监听 XMLHttpRequest 对象的 readyState 和 status 属性来获取响应状态 5. 在回调函数中处理接口的响应数据 在现代化的 Web 开发中,通常会使用一些 JavaScript 框架或库来简化 Ajax 请求的代码编写,例如 jQuery、Vue.js、React 等。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
写文章

热门文章

  • echarts 地图标注 symbol 27120
  • echarts 饼图引导线周围文字位置的改变 18975
  • vue echarts自定义地图 15111
  • Javascript:为input设置readOnly属性 12083
  • Response.setHeader("Content-Disposition", "attachment; filename=" + fileName+".xls");file.Name为中文则乱码 10720

分类专栏

  • vue学习 3篇

最新评论

  • 后端API接口

    漠冰的痛: 放在后面是正确的

  • Java 从数据库里读取数据,并将数据赋予某变量

    kkaiI: 工具类呢

  • 后端API接口

    QiaoQiao17: 萌新,请问下为什么你的状态码可以放在后面,我是状态码放在方法后面就报错,放在private Integer code前面才正常。。。表情包

  • Android Studio SDK Manager license 失效问题

    Tisfy: 写得太好了!正如那:遗民忍死望恢复,几处今宵垂泪痕。

  • application.properties 常见配置

    ctotalk: mark

大家在看

  • C语言深度探索:循环、条件与数据类型解析
  • 昆明理工大学信号与系统B实验 202
  • 学习哪种编程语言怎么选择?别急!深度了解【2024年全球排行榜TOP20开发语言的特点、难易程度、跨平台性、适用领域】是什么,能干嘛?重点不是语言的新旧是否热门,而是找到适合自己的技术栈! 705
  • 关于JS中的.this 453
  • 毕业设计&课设——基于SpringBoot+Mybatis+Vue实现的一个在线选课系统(学生选课系统) 293

最新文章

  • Flex各种常用布局示例
  • System.out.println对线程安全的影响
  • 深入浅出索引(上)
2022年2篇
2021年3篇
2020年15篇
2019年16篇
2018年9篇
2017年18篇
2016年32篇
2015年26篇
2014年13篇
2013年7篇

目录

目录

评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值

深圳SEO优化公司汕头模板网站建设价格包头营销型网站建设推荐长治优秀网站设计公司抚州seo网站优化多少钱兴安盟百度网站优化公司和县网站制作报价驻马店网站优化推广价格衢州网站改版湘潭百度爱采购哪家好龙岗企业网站建设价格渭南网页设计黄山SEO按天收费多少钱平凉外贸网站设计报价洛阳百度seo多少钱潍坊seo优化报价梅州建网站哪家好商丘外贸网站建设多少钱松岗模板网站建设哪家好中卫建设网站多少钱绥化网站设计推荐吉安优秀网站设计公司垦利品牌网站设计报价塘坑百姓网标王报价长治网站搭建价格中山设计网站报价来宾网站seo优化公司鸡西百度爱采购哪家好咸阳网站定制报价和县SEO按天扣费哪家好咸阳设计公司网站价格歼20紧急升空逼退外机英媒称团队夜以继日筹划王妃复出草木蔓发 春山在望成都发生巨响 当地回应60岁老人炒菠菜未焯水致肾病恶化男子涉嫌走私被判11年却一天牢没坐劳斯莱斯右转逼停直行车网传落水者说“没让你救”系谣言广东通报13岁男孩性侵女童不予立案贵州小伙回应在美国卖三蹦子火了淀粉肠小王子日销售额涨超10倍有个姐真把千机伞做出来了近3万元金手镯仅含足金十克呼北高速交通事故已致14人死亡杨洋拄拐现身医院国产伟哥去年销售近13亿男子给前妻转账 现任妻子起诉要回新基金只募集到26元还是员工自购男孩疑遭霸凌 家长讨说法被踢出群充个话费竟沦为间接洗钱工具新的一天从800个哈欠开始单亲妈妈陷入热恋 14岁儿子报警#春分立蛋大挑战#中国投资客涌入日本东京买房两大学生合买彩票中奖一人不认账新加坡主帅:唯一目标击败中国队月嫂回应掌掴婴儿是在赶虫子19岁小伙救下5人后溺亡 多方发声清明节放假3天调休1天张家界的山上“长”满了韩国人?开封王婆为何火了主播靠辱骂母亲走红被批捕封号代拍被何赛飞拿着魔杖追着打阿根廷将发行1万与2万面值的纸币库克现身上海为江西彩礼“减负”的“试婚人”因自嘲式简历走红的教授更新简介殡仪馆花卉高于市场价3倍还重复用网友称在豆瓣酱里吃出老鼠头315晚会后胖东来又人满为患了网友建议重庆地铁不准乘客携带菜筐特朗普谈“凯特王妃P图照”罗斯否认插足凯特王妃婚姻青海通报栏杆断裂小学生跌落住进ICU恒大被罚41.75亿到底怎么缴湖南一县政协主席疑涉刑案被控制茶百道就改标签日期致歉王树国3次鞠躬告别西交大师生张立群任西安交通大学校长杨倩无缘巴黎奥运

深圳SEO优化公司 XML地图 TXT地图 虚拟主机 SEO 网站制作 网站优化