如何写出优雅的API
共 2697字,需浏览 6分钟
· 2021-01-17
点击上方 好好学java ,选择 星标 公众号
重磅资讯、干货,第一时间送达
重磅资讯、干货,第一时间送达
今日推荐:今天给大家推荐 6 个 Spring Boot 项目,拿来就可以赚钱!
个人原创100W+访问量博客:点击前往,查看更多
个人原创100W+访问量博客:点击前往,查看更多
转自:码不动
链接:https://www.jianshu.com/p/fa75acba5b07
在移动互联网,分布式、微服务盛行的今天,现在项目绝大部分都采用的微服务框架,前后端分离方式,(题外话:前后端的工作职责越来越明确,现在的前端都称之为大前端,技术栈以及生态圈都已经非常成熟;以前后端人员瞧不起前端人员,那现在后端人员要重新认识一下前端,前端已经很成体系了)。
一般系统的大致整体架构图如下:
需要说明的是,有些小伙伴会回复说,这个架构太简单了吧,太low了,什么网关啊,缓存啊,消息中间件啊,都没有。因为这篇主要介绍的是API接口,所以我们聚焦点,其他的模块小伙伴们自行去补充。
接口交互
前端和后端进行交互,前端按照约定请求URL路径,并传入相关参数,后端服务器接收请求,进行业务处理,返回数据给前端。
针对URL路径的restful风格,以及传入参数的公共请求头的要求(如:app_version,api_version,device等),老顾这里就不介绍了,小伙伴们可以自行去了解,也比较简单。
着重介绍一下后端服务器如何实现把数据返回给前端?
返回格式
后端返回给前端我们一般用JSON体方式,定义如下:
{
#返回状态码
code:integer,
#返回信息描述
message:string,
#返回值
data:object
}
200 - 请求成功
301 - 资源(网页等)被永久转移到其它URL
404 - 请求的资源(网页等)不存在
500 - 内部服务器错误
![](https://filescdn.proginn.com/d8518683c2a74c1009115766f889c877/b89e50c4b0002c807a3329047bd230a2.webp)
#2000~2999 区间表示用户错误
#3000~3999 区间表示接口异常
![](https://filescdn.proginn.com/a2db769522439d25205ca05ec128e064/42df870f5280f7472b7aae301b41e946.webp)
![](https://filescdn.proginn.com/f2e792a027487b5f7ba2fe461c8cc180/282c6b5d4db6997135092d4a42d43627.webp)
![](https://filescdn.proginn.com/f8d2fa01b66d577ab7b11c2907cb1cec/b1f95efa0b896b3c9bfe9d0963fe714f.webp)
控制层Controller
![](https://filescdn.proginn.com/76fc8b9d59d26673f7c79fafe806d2fc/3801fa9dc67b7925751dc02ec0c5dc29.webp)
美观优化
![](https://filescdn.proginn.com/e7ea317c548bbc4794286cb19c5a9355/63a08b6d49af5921f233b01308dd12b2.webp)
![](https://filescdn.proginn.com/76b3336c69be988607917594c800dad3/8347e0e6663a1937452b959e41c5b11b.webp)
优雅优化
2、在业务代码中,成功的时候我们调用Result.success,异常错误调用Result.failure。是不是很多余
3、上面的代码,判断id是否为null,其实我们可以使用hibernate validate做校验,没有必要在方法体中做判断。
![](https://filescdn.proginn.com/07b19a7d71676d9272cb074ef6983a9a/92e6084e50a9470ba6c41d7957c4d8de.webp)
实现方案
2、拦截请求,判断此请求是否需要被@ResponseResult注解
3、核心步骤就是实现接口ResponseBodyAdvice和@ControllerAdvice,判断是否需要包装返回值,如果需要,就把Controller接口的返回值进行重写。
![](https://filescdn.proginn.com/b19c15c7f02aff1059bdf7c991628f31/f07ae9981fe49abe7a11c3de185ca748.webp)
![](https://filescdn.proginn.com/65e17c5097ddde3873cd4989ffedcb0e/c7060f3e49030e04465d3b9023aa40c3.webp)
![](https://filescdn.proginn.com/f211456921e9068b1f1ff994729154c8/1ddec6790e8dfdf18935f6b74f9847c5.webp)
![](https://filescdn.proginn.com/3ce21d524d69aea47672377dfc3e6d65/0c026dd5d799fe4975b4bf239e8d00d9.webp)
![](https://filescdn.proginn.com/78deafbb4b09d848671a4ade194c4aa2/67c975db2fd92c7bf54e7753eade1758.webp)
总结
推荐文章
原创电子书
历时整整一年总结的 Java 面试 + Java 后端技术学习指南,这是本人这几年及校招的总结,各种高频面试题已经全部进行总结,按照章节复习即可,已经拿到了大厂offer。
原创思维导图
扫码或者微信搜 程序员的技术圈子 回复 面试 领取原创电子书和思维导图。