API接口设计之 安全性 与 性能

接口安全性

1. Token验证机制

通过用户名/密码调用授权接口获取Token,设置token有效期保持用户授权期间状态,可以使用token将信息保存在服务端,避免网络间传输,目的在于防止用户信息泄露,存储状态机。

2. 接口调用签名

由于前后端分离前端通过http请求调用后端接口,期间通过网络介质传输接口调用参数,黑客可能通过公共网域监听http请求信息,窃取调用接口参数信息,并从中查询规律,从而不通过客户端,直接通过http直接请求调用接口。这种情况下需要通过签名方式对一些敏感接口进行签名访问。

做法步骤:

a. 前后端约定Secret密钥,密钥可以尽可能复杂。

b. 约定MD5加密规则:一般格式:MD5(param1 + secret + param2 + timestamp)

c. 后端接收到前端参数后使用同样得MD5算法进行加密操作,通过比对前后端密文,如果一致则可以调用后续业务。不一致则返回错误信息。

3. 接口限流

防止黑客恶意攻击(比如cc攻击)导致qps过高,可以考虑策略在服务入口为相同uid的账户请求限制每秒钟的最高访问数。

限流解决方案:

可以通过分布式缓存中间件Redis,将客户得Uid作为key通过自增长获取用户接口调用次数,如果接口调用请求过多超过服务访问阈值,拒绝用户继续访问该接口。

通过Nginx在网管层面进行限流控制。使用方法可以使用nginx得limit_conn模块实现,也可通过自定义脚本,通过刷访问日志得方式实现。

 4. 接口幂等控制,接口如果没有做幂等性控制,则改接口遇到接口重复调用或者接口调用方有重试机制,则会出现数据重复被录入

得情况,这是需要考虑接口幂等问题,通常解决接口幂等性问题得常用方法是:

a. 在数据库层面进行唯一键约束

b. 在接口调用前先调用获取令牌接口获取redis令牌,然后将令牌信息放入请求参数中提交,后台拿到令牌后访问redis验证,如果有该令牌则进行后续业务。

c. 数据库乐观锁控制,在更新数据是,保存数据更新版本,每次更新版本+1,更新语句为:UPDATE table t set t.a = value and t.version = t.version +1 WHERE t.id = #{id} t.version = #{version}

接口性能

1. 接口无状态设计,采用接口无状态设计就可以轻松实现服务得横向扩展,这样当接口并发量高得时候就可以增加服务数量来提高接口得并发量。

2. 重要数据进行缓存预热处理,从而实现调用接口时减少应用过多得和底层数据得交互,提升IO得性能。

3. 使用LRU,LFU,LNU等算法,缓存热点数据,降低缓存击穿率。

4. 使用消息中间件,对高频接口进行异步消峰处理。提升接口得响应事件。

原文地址:https://www.cnblogs.com/mjbenkyo/p/12206885.html

时间: 2024-10-30 03:18:18

API接口设计之 安全性 与 性能的相关文章

atitit.基于http json api 接口设计 最佳实践 总结o7

atitit.基于http  json  api 接口设计 最佳实践 总结o7 1. 需求:::serverand android 端接口通讯 2 2. 接口开发的要点 2 2.1. 普通參数 meth,param, 2 2.2. 全部的參数定义 2 2.3. key,dynami key)韩式 static key? 2 2.4. 防篡改 sign 2 2.5. Encry加密 3 2.6. zip压缩:: 3 2.7. 首先压缩韩式加密??? 3 3. 选型大全:rim ,ws, http 

Web API接口设计(学习)

1.在接口定义中确定MVC的GET或者POST方式 由于我们整个Web API平台是基于MVC的基础上进行的API开发,因此整个Web API的接口,在定义的时候,一般需要显示来声明接口是[HttpGet]或者[HttpPost],虽然有些接口也可以不用声明,但是避免出现类似下面的错误信息,显式声明还是有好处的. 请求的资源不支持 http 方法“POST 例如在基类定义的查找对象接口如下所示. /// <summary> /// 查询数据库,检查是否存在指定ID的对象 /// </su

1、API接口设计--前言

1.场景描述 比如说我们要做一款APP,需要通过api接口给app提供数据.假设我们是做商城,比如我们卖书的.我们可以想象下这个APP大概有哪些内容: 1)首页:banner区域(可以是一些热门书籍的图片做推广).本周热卖书籍区域.本月好评书籍区域.活动打折的书籍区域... 2)排行榜:比如第一季度热销榜.新书版... 3)书单:管理后台运营添加的书单,比如<程序员从入门到放弃>系列书单... 4)用户相关的:比如用户个人信息设置.订单管理.消息管理.收藏的书籍... 数据是保存在数据库中,考

php后台对接ios,安卓,API接口设计和实践完全攻略,涨薪必备技能

2016年12月29日13:45:27 关于接口设计要说的东西很多,可能写一个系列都可以,vsd图都得画很多张,但是由于个人时间和精力有限,所有有些东西后面再补充 说道接口设计第一反应就是restful api 请明白一点,这个只是设计指导思想,也就是设计风格 ,比如你需要遵循这些原则 原则条件REST 指的是一组架构约束条件和原则.满足这些约束条件和原则的应用程序或设计就是 RESTful.Web 应用程序最重要的 REST 原则是,客户端和服务器之间的交互在请求之间是无状态的.从客户端到服务

优秀的API接口设计原则及方法(转)

一旦API发生变化,就可能对相关的调用者带来巨大的代价,用户需要排查所有调用的代码,需要调整所有与之相关的部分,这些工作对他们来说都是额外的.如果辛辛苦苦完成这些以后,还发现了相关的bug,那对用户的打击就更大.如果API经常发生变化,用户就会失去对提供方失去信心,从而也会影响目前的业务. 但是我们为什么还要修改API呢?为了API看起来更加漂亮?为了提供更多功能?为了提供更好的性能?还是仅仅觉得到了改变了时候了?对于用户来说,他们更愿意使用一个稳定但是看起来不那么时髦的API,这并不意味着我们

微信小程序的Web API接口设计及常见接口实现

微信小程序给我们提供了一个很好的开发平台,可以用于展现各种数据和实现丰富的功能,通过小程序的请求Web API 平台获取JSON数据后,可以在小程序界面上进行数据的动态展示.在数据的关键 一环中,我们设计和编写Web API平台是非常重要的,通过这个我们可以实现数据的集中控制和管理,本篇随笔介绍基于Asp.NET MVC的Web API接口层的设计和常见接口代码的展示,以便展示我们常规Web API接口层的接口代码设计.参数的处理等内容. 1.Web API整体性的架构设计 我们整体性的架构设计

Web API接口设计经验总结

在Web API接口的开发过程中,我们可能会碰到各种各样的问题,我在前面两篇随笔<Web API应用架构在Winform混合框架中的应用(1)>.<Web API应用架构在Winform混合框架中的应用(2)--自定义异常结果的处理>也进行了总的介绍,在经过我的大量模块实践并成功运行后,总结了这篇随笔,希望对大家有所帮助. 1.在接口定义中确定MVC的GET或者POST方式 由于我们整个Web API平台是基于MVC的基础上进行的API开发,因此整个Web API的接口,在定义的时

三分钟学会API接口设计 之 Compass 的Restful API 快速入门指南 -- 使用Flask框架

声明: 本博客欢迎转载,但请保留原作者信息! 作者:曾国仕 团队:华为杭州OpenStack团队 引子 大部分开源框架基本上都是使用Curl + RPC的方式构筑系统,以提供对外\对内的交互能力. 这种设计,本人认为更多地是出于层次化与模块化设计的考量,简化整个架构,使得开发轻量简单化. 本文主要介绍Compass的REST API的设计与实现. 通过本文档,读者至少能快速搭建一个属于自己的REST API 框架,并且能够基于该框架进行功能扩展以建立一个完整的系统. Compass的结构简介 图

API接口设计之token、timestamp、sign具体实现

一.token 简介 Token:访问令牌access token, 用于接口中, 用于标识接口调用者的身份.凭证,减少用户名和密码的传输次数.一般情况下客户端(接口调用方)需要先向服务器端申请一个接口调用的账号,服务器会给出一个appId和一个key, key用于参数签名使用,注意key保存到客户端,需要做一些安全处理,防止泄露. Token的值一般是UUID,服务端生成Token后需要将token做为key,将一些和token关联的信息作为value保存到缓存服务器中(redis),当一个请