做界面需要注意什么?什么是接口?一个接口无非就是客户端请求你的接口地址,传入接口定义的一堆参数。通过接口本身的逻辑处理,返回接口约定的数据和对应的数据格式。如何开发接口由于接口本身的性质以及与合作伙伴的数据对接,开发时需要注意以下几点:1.定义接口入参:编写接口文档2.定义接口返回数据类型:一般需要封装成某种格式,判断是返回json还是xml消息等。看下面的返回数据定义格式:ResultResponse3,判断访问接口的方式,get还是post等,可以根据restful接口RESTfulAPI定义规则:RESTfulAPI4,定义一套全球统一通用的返回码,帮助排查问题;响应码5.统一异常处理:每个系统都应该需要一套统一的异常处理6.拦截器链设置:伙伴访问接口时,会根据你接口定义的传参来访问你的接口服务器,但是会有接口参数类型错误或格式不正确,强制参数未传,甚至是一些恶意请求的问题,都可以通过拦截器链在前期拦截,避免造成接口服务失败压力。还有一个很重要的一点就是在拦截器中也可以设置签名校验。继承WebMvcConfigurerAdapter实现springboot的拦截器链。实现HandlerInterceptor方法编写业务拦截器。SignInterceptorWebAppConfigurer7、token令牌和sign数字签名实现数据保密。创建令牌(Token)为了保证请求的合法性,我们提供了第三方接口来创建令牌。有些接口需要通过token来验证消息的合法性,避免非法攻击。令牌过期时间暂时设置为1天。考虑到伙伴往往处于分布式环境,可能会有多台机器申请token。为降低合作伙伴保证token一致性的难度,在一分钟内调用接口创建token,再次请求token返回的数据是一样的。获取私钥获取用于数字签名的私钥。第三方获取的私钥需要妥善保管并定期更新。私钥只参与数字签名,不作为参数传输。数字签名方式:参数签名;签名方法:所有不为空的参数(不包括该参数)参与数字签名,按照“参数名+参数值+私钥”的格式得到一个字符串,然后将这个字符串MD5一次,就是这个参数的值。(例如:h15adc39y9ba59abbe56e057e60f883g),所以需要先获取私钥。签名验证方法:将用户的所有非空参数放入定义好的排序规则的TreeSet中进行排序,然后使用StringBuilder得到一个字符串,格式为“参数名+参数值+私钥”(私钥为从redis中获取),然后将字符串再次MD5为该参数的值。将此值与用户发送的sign签名进行比较,相同则通过,否则不通过。8、接口限流有时候服务器的压力真的太大了。在交易接口拥挤的情况下,可以限制其他一些不影响主要业务功能、计算量大的接口的流量。RateLimit--使用guava来限制接口的流量。当接口超过指定的流量时,该接口的请求将不被处理。9、协议加密,http升级为https;为什么要升级呢,为了保证数据安全。使用https访问时,数据从客户端到服务端都是加密的,从服务端到客户端,即使黑客抓包也看不到传输内容。当然还有其他的好处,这里就不说了。但是这也是在开发界面项目时需要注意的问题。总结以下是接口开发服务的总结:1.Pullorpush:当接口作为数据源时,还需要考虑如果数据发生变化,是应该由合作方拉取还是推送在数据中。当然,推送效果更好,但是如何有效推送数据,不推送重复数据,是需要根据实际业务考虑的问题。2.在多台分布式服务器上,如何保证交易的幂等性和订单的唯一性当接口服务和合作伙伴处于分布式情况下,一个订单号很容易申请多个交易请求,但是根据幂等性一个彩票只能交易一次,每次无论什么时候请求,结果都应该是一样的。在这种情况下,我们如何保证唯一性呢?我们需要将订单和订单状态存储在redis中,每次请求时都要检查订单是否已经存在。但是也许这次交易不成功,下次可以继续交易这张票,可以生成新的订单号。Redis的setNX是一个很好的解决方案,就是当key存在时,返回false,不存在时,key和value插入成功。它用于检查订单是否正在提交。如果是这样,请阻止此请求以避免重复提交。您可以设置3秒的过期时间。提交前锁定订单,防止重复提交。3、处理时间超过10s,交易自动返回订单,交易失败。索引使读取和写入非常慢。如果您觉得这篇文章对您有用,请给我们的开源项目一个小星星:http://github.crmeb.net/u/defu非常感谢!
