小程序在1月9日正式发布,小程序与微信、公众号绑定实现流量互转和更低的开发门槛,吸引了众多的开发者。小程序究竟是什么?我们先来看看小程序的结构:
![小程序代码]
(https://yqfile.alicdn.com/78391e108d5b135cc40145b61da7c15be16cf065.png)
![小程序代码结构分析]
(https://yqfile.alicdn.com/ae108106b5b4c0e55c446135e56ac6f9d3b3e203.png)
从小程序的代码结构来看,是由js、wxml(xml)、wxss(css)组成,全部为前端语言,也就是说想要开发小程序,只需要懂前端技术即可开发小程序。
然而,在实际的业务场景中,除了通过微信的API来实现些系统功能外,还需要一些自有的业务逻辑来满足用户的实际需求。因此,若要提供有价值的小程序,仍然需要进行后端业务逻辑的开发。
如,一个航班管理的小程序,需要实现航班信息、手机值机、机场进出港状况、票务查询等功能。
这需要开发者构建一个业务程序,小程序和业务程序通过API来通信。
说及API,那就必然要考虑API安全、API的管理、API运行情况的监控与分析等问题,可以使用阿里云API网关(API Gateway)来完成API的管理。
1 保护API安全
安全,对外开放服务永恒的话题,微信小程序也在安全方面做了不少工作,如:通过域名控制可以访问的url、必须使用https、禁止小程序内外链url、缓存加密存储、安全登陆等等严格的审核机制降低钓鱼风险等安全措施。
然而,安全控制基本是小程序的安全,并未提及后端业务程序的安全需要开发者自行处理。如:业务程序的防攻击、数据安全等问题。
这需要开发者自行预防业务程序:
- API被恶意调用、SQL注入造成数据泄漏或者被爬库的风险;
- 恶意高频调用,造成系统故障;
1.1 请求数据加密
一般使用HTTPS将请求进行数据加密,保证请求即使被恶意截获,也无法获取有价值的信息。
1.2 身份认证
身份认证是安全防护的第一步,让API请求都附带上身份信息是常见的防护手段,身份认证包含很多种,有HTTP Basic、API KEY/APP KEY、Oauth、openConnectid、JWK等方式。API网关支持一下2种认证方式:
1.2.1 API KEY/APP KEY
API KEY/APP KEY,是经过用户身份认证之后服务端给客户端分配一个调用API的API KEY/Secret、APP KEY/Secret,用户本地使用Secret对请求进行加密,一般客户端请求中会包含, API KEY/APP KEY、SignatureMethod、Timestamp、SignatureNonce、Signature
1.2.2 OpenID Connect
OpenID Connect 是一套基于 OAuth 2.0 协议的轻量级规范,提供通过 API 进行身份交互的框架。较 OAuth 而言, OpenID Connect 方式除了认证请求之外,还标明请求的用户身份。
API 网关依据 OpenConnect 的标准,对用户请求进行 Appkey+Token 校验,Token 由 API 提供者的系统颁发,网关颁发 Appkey,并负责 Appkey、Token 的真伪校验。
1.3 授权/鉴权
给API设置访问权限,重要数据只允许高级用户访问,不同用户的数数据相互隔离。这需要完成一个授权和鉴权机制。API网关提供了完整的授权和健全机制,控制API的开放范围。
1.4 防止SQL注入
对请求的预处理,在API设计时,对每个参数的类型、大小、格式取值范围等都有一个期望值,若用户请求不满足期望,则拒绝请求。
1.4.1 URL过滤
用户请求的URL或HTTP方法,不在开放的API列表,则拒绝。
1.4.2 取值范围校验
如请求入参的类型、大小、长度、枚举值。如:/user?age=[num],其中num为1-150,那么当用户请求为/user?age=151时,请求将被拒绝。
1.4.3 格式校验
则对于一些复杂参数,如Json或者有规则的字符串,进行格式校验,校验方法:正则、Json Schema。
1.5 流量控制
需要保持后端服务的稳定,而限制用户的访问频率。API网关支持API流控、用户流控和特殊流控;
API流控用于通道内的业务分层,API提供者可以根据后端服务能力和业务的重要程度来区分API,可分别设置不同的流量控制,以保证重要业务的延续性。
用户流控用于在API上的用户分层,API提供者可以为普通用户设置流量控制,防止用户间相互挤占资源。
特殊流控用于配置特殊用户的流控策略。
2 最小开发量支持小程序
小程序狂热背后应该思考,为什么要接入小程序,会给企业带来什么样的改变。所以一般企业不会直接摒弃之前的APP,只保留小程序。而是使用小程序来进行试水,来确认是否可以发展新的业务场景。所以,也不会为小程序搞特例的API,而是期望使用同APP公用同一套,甚至使用企业自身的OpenAPI
然而不同客户端要求的功能相同,但又存在细微差别,为避免重复开发,可以接入API网关。通过API网关的参数转换,将后端一个标准逻辑转化为满足不同客户端需求的API。支持参数位置的转换、参数名称的转换、参数值的转换,并支持常量参数。
3 考虑API迭代
无论正在构建什么,无论你在入手前做了多少计划,核心的应用总会发生变化,数据关系也会变化,资源上的属性也会被增加或删除。
API是服务端与客户端之间的一个公共契约。如API做了一个更改,并且无法向后兼容,那么就打破了这个契约,您的小程序就会发生故障。为了避免此类事件,你既要确保服务端的演变,保证小程序的可用性。必须在引入新版本API的同时保持旧版本API仍然可用。
API网关提供版本管理功能:您可以在API的URL中包含版本信息,或者是在请求头里面保持版本信息。但是实践证明在请求头里面包含版本信息远没有放在URL里面来的容易。
如果只是简单的增加一个新的特性到API上,如资源上的一个新属性或者增加一个新的端点,并不需要增加API版本。因为这些并不会造成向后兼容性的问题,小程序支持新功能即可。
4 借力给力
在小程序上提供更多相关的功能,可以增加用户粘性。但大多企业由于开发资源紧张,略显局促,可以使用阿里云API市场来满足更多的用户需要。以更少的系统代码完成更多的功能,而真正价值在于可以让开发人员有更多时间解决自身领域独有的问题,这要比重复构建别人已经实施的功能有意义得多。
在API市场上的每个API,在上线前都做过严格的审核,不用担心服务质量,可以放心选购。
5 低成本支持小程序
因此,通过API网关您甚至不需要后端业务逻辑的开发,而只是在API网关进行API的简单定义,既可以为您的小程序提供一个安全稳定的后端服务。也可以通过API市场,来购买其他公司已经成熟的API服务(功能)。低成本支撑小程序的运行。
<待续...>