首页 > 编程知识 正文

使用接口时有哪些是需要注意的(开发接口需要注意什么)

时间:2023-05-03 12:01:14 阅读:102823 作者:3882

00-1010什么是接口?

接口无非就是客户端请求你的接口地址,传入接口定义的一堆参数,通过接口本身的逻辑处理,返回约定的数据和对应的数据格式。

如何开发接口

由于接口本身的性质,以及与合作伙伴的数据对接,开发时需要注意以下几点:

1.定义接口参数:编写接口文档。

2.定义接口返回的数据类型:一般需要打包成一定的格式来决定是返回json还是xml消息。

请参见以下返回数据定义格式:

结果

反应

3.确定访问界面、获取或发布等方式。可以根据restful接口定义规则restful API: RESTful API。

4.定义一组全球统一的通用返回代码,以帮助解决问题;

响应代码

5.统一异常处理:每个系统都应该需要一套统一的异常处理。

6.拦截器链设置:合作伙伴访问接口时,会根据您的接口定义的参数访问您的接口服务器,但会出现接口参数类型或格式不正确、无法传输所需参数等问题,甚至会出现一些恶意请求,可以通过拦截器链提前拦截,避免接口服务的压力。

还需要注意的是,签名检查也可以在拦截器中设置。通过继承WebMvcConfigurerAdapter实现跳脚拦截器链。实现HandlerInterceptor方法来编写业务拦截器。

SignInterceptor

WebAppConfigurer

g-caption">

7、token令牌和sign数字签名实现数据保密性。

创建令牌(Token)

为保证请求的合法性,我们提供第三方创建令牌接口,某些接口需要通过token验证消息的合法性,以免遭受非法攻击。

token过期时间目前暂时定为1天,由于考虑到合作方往往是分布式环境,多台机器都有可能申请token,为了降低合作方保证token一致性的难度,调用接口创建token成功以后一分钟以内,再次请求token返回的数据是一样的。

获取私钥

获取用于数字签名的私钥,第三方获取的私钥需妥善保存,并定期更新,私钥只参与数字签名,不作为参数传输。

数字签名方式:

参数签名;签名方式:所有值不为null的参数(不包括本参数)均参与数字签名,按照“参数名+参数值+私钥”的格式得到一个字符串,再将这个字符串MD5一次就是这个参数的值。(示例:h15adc39y9ba59abbe56e057e60f883g),所以需要先获取私钥。

验签方式:

将用户的所有非null参数放入定义好排序规则的TreeSet中进行排序,再用StringBuilder按照按照“参数名+参数值+私钥”的格式得到一个字符串(私钥从redis拿),再将这个字符串MD5一次就是这个参数的值。将这个值与用户传来的sign签名对比,相同则通过,否则不通过。

8、接口限流

有时候服务器压力真的太大,以防交易接口被挤死,就可以对一些其他不影响主要业务功能并且计算量大的接口做限流处理。RateLimit--使用guava来做接口限流,当接口超过指定的流量时,就不处理该接口的请求。

9、协议加密,http升级成https;

为什么要升级呢,为了保证数据的安全性。当使用https访问时,数据从客户端到服务断,服务端到客户端都加密,即使黑客抓包也看不到传输内容。当然还有其他好处,这里不多讲。但这也是开发接口项目需要注意的一个问题。

总结

下面对接口开发服务做一些总结:

1.拉还是推:

当接口作为数据源时,还要考虑数据是让合作方主动过来拉还是数据有变化就推送呢,当然是推的效果更好,但是如何有效的推数据,不推重复数据等都是需要根据实际业务考虑的问题。

2.多台分布式服务器上,怎么保证交易的幂等和订单的唯一性

当接口服务和合作方都处于分布式情况下,就很容易出现一个订单号申请多次交易请求,但是根据幂等性,一张彩票只能交易一次,并且每次不管何时请求,结果都应该一样不会改变。

这种情况下,我们怎么保证唯一性呢,我们需要把该订单和订单状态存redis,每次请求时去看是否订单已存在。但可能这次交易不成功,下次这张票还可以继续交易,可以生成新的订单号啊。

redis的setNX是一个很好的解决方案,意思是当存在该key时,返回false,当没有时,该key和value插入成功。用作检查订单是否正在提交,如果是,则阻塞本次请求,避免重复提交 ,可以设置过期时间3s。提交之前锁定订单,防止重复提交。

3.处理时间超过10s,自动返回该订单交易失败

总之,在高并发场景下,导致服务崩溃的原因还是redis和数据库,可能是redis读写太慢,或者数据库的一些sql使用不当,或者没建索引导致读写很慢。

如果你觉得这篇文章对你有点用的话,麻烦请给我们的开源项目点点star: http://github.crmeb.net/u/defu不胜感激 !

版权声明:该文观点仅代表作者本人。处理文章:请发送邮件至 三1五14八八95#扣扣.com 举报,一经查实,本站将立刻删除。