专栏名称: 程序员鱼皮
鹅厂全栈开发,持续分享编程技法和实用项目
今天看啥  ›  专栏  ›  程序员鱼皮

瞧瞧别人家的Controller,那叫一个优雅

程序员鱼皮  · 公众号  · 互联网安全  · 2024-11-25 14:42

主要观点总结

本文介绍了在设计Controller接口时,需要注意的多个方面,包括签名、加密、ip白名单、限流、参数校验、统一返回值、统一封装异常、请求日志、幂等设计、限制记录条数、压测、异步处理、数据脱敏、完整的接口文档等,以确保接口的安全性、稳定性和易用性。

关键观点总结

关键观点1: 签名的重要性及为何需要加时间戳

签名是为了防止Controller接口中的数据被篡改。接口请求方将请求参数、时间戳、密钥拼接成字符串,通过hash算法生成签名。API接口的网关服务验证签名的正确性。加时间戳是为了防止同一次请求被反复利用,增加密钥破解的难度,并设置合理的过期时间。

关键观点2: 加密的应用场景和使用的技术

当接口传递重要数据时,如用户登录密码、银行卡号等,需要进行非对称加密。目前常用RSA加密技术,包含公钥和私钥。前端使用公钥加密数据,后端使用对应的私钥解密。

关键观点3: ip白名单的作用和实施方式

ip白名单用于加强API接口的安全性,防止接口签名或加密被破解后被非法请求。只有在白名单中的ip地址才能成功请求API接口。

关键观点4: 限流的方法和必要性

第三方平台调用API接口时,如果并发量过高可能导致API服务不可用。因此需要对API接口进行限流,方法包括:对请求ip限流、对请求接口限流和对请求用户限流。限流可以保护API接口不被过载。

关键观点5: 参数校验的重要性及实现方法

参数校验可以拦截无效的请求,提高系统的健壮性。比如校验必填字段是否为空、字段类型、字段长度和枚举值等。在Java中可以使用hibernate的Validator框架进行数据校验。

关键观点6: 统一返回值和封装异常的意义

统一返回值结构可以提高接口的易用性,减少对接方的理解成本。对异常进行统一处理,可以避免敏感信息泄露,提升系统的安全性。异常处理时,可以把异常转换成统一的异常结构返回。

关键观点7: 请求日志的重要性及实施建议

请求日志对于分析和定位问题非常重要。应记录API接口的请求url、请求参数、请求头、请求方式、响应数据和响应时间等信息。最好有traceId,可以串联整个请求的日志,过滤多余的日志。

关键观点8: 幂等设计的意义及实现方法

第三方平台在短时间内多次请求同一API接口时,需要进行幂等设计。通过数据库中的唯一索引或保存requestId和请求参数来保证接口的幂等性,防止产生错误数据。

关键观点9: 其他注意事项包括压测、异步处理、数据脱敏和完整的接口文档

上线前进行压测可以了解接口的qps情况,预估需要部署的服务器节点数。异步处理可以提升API接口的性能。数据脱敏可以保护用户隐私数据。完整的接口文档可以减少沟通成本,让对方少走弯路。


文章预览

前言 在实际工作中,我们需要经常跟第三方平台打交道,可能会对接第三方平台Controller接口,或者提供 Controller 接口给第三方平台调用。 那么问题来了,如果设计一个优雅的 Controller 接口,能够满足:安全性、可重复调用、稳定性、好定位问题等多方面需求? 今天跟大家一起聊聊设计 Controller 接口时,需要注意的一些地方,希望对你会有所帮助。 1. 签名 为了防止 Controller 接口中的数据被篡改,很多时候我们需要对 Controller 接口做 签名 。 接口请求方将 请求参数 + 时间戳 + 密钥 拼接成一个字符串,然后通过 md5 等hash算法,生成一个前面sign。 然后在请求参数或者请求头中,增加sign参数,传递给API接口。 API接口的网关服务,获取到该sign值,然后用相同的请求参数 + 时间戳 + 密钥拼接成一个字符串,用相同的m5算法生成另外一个sign,对比两个si ………………………………

原文地址:访问原文地址
快照地址: 访问文章快照
总结与预览地址:访问总结与预览