java中如何编写出优雅的Controller呢?

欢喜 SpringBoot 发布时间:2025-06-13 11:06:09 阅读数:10106 1
下文笔者讲述写出优美的Controller的注意事项及操作方法,如下所示
java代码编写优美的Controller,只需注意以下几点即可
  1.安全性
  2.可重复调用
  3.稳定性
  4.日志全面,方便问题排查

===========================================================
具体的相关说明,如下所示 

1.签名

为避免Controller接口中的数据被篡改
   我们需要对Controller接口接收和输出的数据进行签名操作 

1.常见的签名方法:
    接口请求方将请求参数 + 时间戳 + 密钥拼接成一个字符串
	 然后使用md5等hash算法,生成一个前面sign。

2.在请求参数或者请求头中
    增加sign参数,传递给API接口。

3.当API接口的网关服务
    获取到该sign值
	  然后用相同请求参数 + 时间戳 + 密钥拼接成一个字符串
	  用相同的m5算法生成另外一个sign
	  对比两个sign值是否相等。

  3.1 当两个sign相等,则认为是有效请求
       API接口的网关服务会将给请求转发给相应的业务系统。
  3.2 当两个sign不相等,则API接口的网关服务会直接返回签名错误。

2.加密

controller中如何传递敏感数据,如: 
      用户登录密码,银行卡号、转账金额、用户身份证等
	  这些信息我们通常使用 “非对称加密”的方式,对敏感数据进行加密和皆灭操作

3.ip白名单

为避免接口的签名及加密都泄漏,那么此时我们还可以对接口增加IP白名单
    这种方式,就可以再一次保证接口的安全

4.限流

避免接口使用多,我们可以对接口进行相应的限流
限流方法有三种:
  对请求ip做限流:
       如同一个ip,在一分钟内,对API接口总的请求次数,不能超过10000次。
  对请求接口做限流:
       如同一个ip,在一分钟内,对指定的API接口,请求次数不能超过2000次。
  对请求用户做限流:
       如同一个AK/SK用户,在一分钟内,对API接口总的请求次数,不能超过10000次。
     实际工作中
	  可通过nginx,redis或者gateway实现限流的功能。

5.参数校验

    日常开发中,我们必须对传入的参数做严格限制
	  如:
       校验必填字段是否为空,校验字段类型,校验字段长度,校验枚举值等等。
       验证参数可对一些无效的请求做相应的拦截
========================================================
 例:	     
   1.在新增数据时
      字段长度超过数据字段的最大长度
	   数据库会直接报错
	  在参数验证层面拦截,避免进入数据库,减少数据库的压力
   2.一些收款金额,避免为负数
   等等等

6.统一返回值

调用过别人API接口
 正常返回数据是一种json格式

如:

{
    "code":0,
    "message":null,
    "data":[{"id":88888,"name":"java265.com"}]
},
签名错误返回的json格式:

{
    "code":1001,
    "message":"签名错误",
    "data":null
}
没有数据权限返回的json格式:

{
    "rt":10,
    "errorMgt":"没有权限",
    "result":null
}

7.统一封装异常

如:
  API接口服务器返回异常时 
      默认会返回SQL异常
  此时我们应该避免返回的异常信息,弹出SQL语句,表结构信息
     应该统一返回的信息,为指定的文字

8.请求日志

由于涉及三方接口交互,此时我们需进行相应的请求日志,
 如:  API接口的请求url、请求参数、请求头、请求方式、响应数据和响应时间等,记录到日志文件
      当然有 traceId 更好,后续方便联调和追踪 
 例:在request头上,加入 x-traceId 等信息 在各系统的日志中,记录 x-traceId

9.幂等设计

    在极短的时间内,请求我们接口多次
	   如:在1秒内请求两次。有可能是他们业务系统有bug
	        或
		  在做接口调用失败重试
		  因此我们的API接口需要做幂等设计。

例:
    第一次请求数据库会新增数据
	  第二次请求以后就不会新增数据,但也会返回成功。
    这样做的目的是不会产生错误数据。

日常开发中
   可通过在数据库中增加唯一索引
    或
   在redis保存requestId和请求参来保证接口幂等性

10.限制记录条数

限制接口 传入参数的大小及返回数据的行数大小
     避免接口资源的浪费

11.压测

上线前,需对接口进行压测
      了解各接口的QPS情况

12.异步处理

API接口如果同步处理,则会使接口返回的非常慢

  此时我们应该将可以异步处理的消息,进行MQ等缓存,然后使用另外一个服务去消费
   采用这样的方式,则会使系统的速度更快

13.数据脱敏

在接口返回敏感信息中
   直接对敏感数据进行加密
 如:
   用户手机号、银行卡号等 我们需对敏感数据进行加密保护  

14.完整的接口文档

  列举各接口的功能
    使用说明
	返回示例
版权声明

本文仅代表作者观点,不代表本站立场。
本文系作者授权发表,未经许可,不得转载。

本文链接: https://www.Java265.com/JavaFramework/SpringBoot/202506/8493.html

最近发表

热门文章

好文推荐

Java265.com

https://www.java265.com

站长统计|粤ICP备14097017号-3

Powered By Java265.com信息维护小组

使用手机扫描二维码

关注我们看更多资讯

java爱好者