【.com快译】如今各大企业都在以消费者为导向,为客户提供价值是重中之重。为了找到更高效、更方便工作的方法,我们需要通过反复试验来构建和试用系统的功能,以确保它们真正为客户带来巨大的价值。近年来“微服务”的出现,恰恰方便了企业对原有服务架构的分解和按需组合。因为微服务能够将传统高度依赖的整体资源分解成更小的独立单元,我们可以更快更容易地为系统引入新功能,并最大限度地减少对系统其他区域的影响。在微服务中,API作为一个关键要素,可以极大地提升业务的敏捷性和效率。它倾向于位于客户端和微服务之间,将两者连接在一起以创建令人满意的用户体验。在本文中,我们将深入探讨交付成功的API所需的条件。1.颠覆传统API交付模式如果你的公司从事过消费者API的交付流程,那么你一定对以下几种交付模式不陌生。传统的API工作流程在这个模型中,我们首先使用某个门户来设计、实现和记录我们自己的API。然后,通过发布、部署到我们的网关和开发者门户,供应用程序开发者发现和使用。虽然此模型作为服务流程为我们提供了很好的服务,但它现在已成为我们向客户交付价值的主要敏捷性瓶颈之一。为了提高微服务流程的自动化效率和出现故障时“回滚”的能力,我们需要改进开发和部署流程,将自上而下的方式替换为如图所示的自下而上的方式下图方法:自下而上的API开发方式类似于部署代码,我们的API也需要持续集成和持续部署。我们可以授权开发人员构建、部署和测试API,并在令人满意的基础上将它们部署到生产环境的门户和网关。我们需要使用SCM(Github)来版本控制和管理API的代码。我们需要使用Jenkins和TravisCI等自动化构建工具,将API自动部署到各自的环境中。我们需要为开发人员配备他们需要的适当工具,以便在API上启用CI/CD并像管理应用程序源代码一样管理它们。2.API治理当然,采用自下而上的API交付模型也需要适当的治理。研发团队有责任确保他们发布的API遵循正确的标准、良好实践和适当的保护措施。API工作流程如上图所示,API需要通过一个好的“控制平面(ControlPlane)”来支持生命周期管理。API在发布到门户之前需要经过全面审查,并通过CI/CD交付到上层环境。我们通过可配置的工作流将API设计和验证等良好实践应用到相关的安全架构中。3.可组合API可组合API不再只是微服务的简单HTTP接口。现代企业架构由许多不同类型的微服务组成。您可以让团队将各种微服务开发为无服务器功能(例如AWSLambda)并发布到gRPC、WebSockets。同时,应用需要通过统一的接口访问这些服务。接口应该有单一的认证服务,授权访问服务,单一的SDK,统一的文档。这些由API层提供给应用程序。可见,一个API并不是一组服务的简单代理。它有能力处理集成异构微服务的细微差别,并为应用程序“公开”统一接口以使用这些细微差别的单元。4.API安全许多组织将其业务功能发布为公共API。这自然使API成为攻击者的猎场,他们试图窃取可能对组织造成伤害的敏感信息。因此,我们需要对API安全问题保持高度警惕,并将其设置为高优先级。通常,企业会从基于OAuth2.0的认证授权方式入手。如下图所示,我们还应该考虑以下三个方面的API安全:防止恶意内容和DoS攻击。身份验证和授权。通过持续识别和学习异常模式来确保安全性。API安全工作流程恶意内容和DoS攻击为了攻击API,黑客可以完全控制他们发送的恶意请求。这些请求报文可能是注入攻击的报文(如:SQL注入)、畸形报文(造成大量服务器资源耗尽)、XML炸弹(https://www.soapui.org/security-testing/security-scans/xml-bomb.html)等。所谓DoS攻击是指:恶意软件客户端会发送大量的API请求,导致服务端没有足够的资源为真实的用户请求提供服务。为了防止这种针对API的攻击,我们可以使用Web应用程序防火墙(WAF)或API网关来检查消息的内容,并根据预定义的规则和模式对其进行验证。同时,它们还可以限制客户端请求的速率,以防止客户端在短时间内发送大量消息。对于安全网关,我们也需要通过持续的监控发现新的漏洞,及时修补。虽然从技术上来说,API网关和Web应用防火墙都可以防御此类攻击,但Web应用防火墙更合适。这样做的原因是:Web应用防火墙更专注于此类安全域,而API网关通常负责系统中的多个功能任务。身份验证和授权在身份和访问控制方面,我们通常会根据有效凭证授予请求对API资源的访问权限。此类凭据包括:OAuth2.0访问令牌、API密钥、基本身份验证标头、客户端证书和其他内容信息。例如,应允许任何拥有有效用户名和密码的用户浏览电子商务网站上的产品详细信息。但是,只有具有管理员权限的用户才能更新产品详细信息。当然,访问控制不仅限于基于角色的检查,有时一些系统也会进行基于日期和时间的访问控制(例如:只允许在工作日的8:00到17:00之间访问),或者基于请求配额等。上面提到的API网关可以负责这种认证和授权检查。它们将各种系统安全需求抽象成标准规范和协议,并允许客户端应用程序通过这种机制(如OAuth2.0)与其进行交互。此外,下游或后端API有时需要了解访问API的用户的详细信息,以便执行其固有逻辑。因此,一些API网关还负责将用户的上下文转发给下游或后端API。持续学习以识别模式和检测异常防火墙和简单的身份验证本身不足以检测API密钥或访问令牌等凭证泄露。前文提到,OAuth2.0的accesstoken的时间跨度比较短,即使被黑,也只能到token过期后才有效。那么为了防止token在这么短的时间内被盗取,我们还需要进一步通过MFA(Multi-FactorAuthentication)进行认证。值得一提的是,API网关本身并不能保护系统免受异常攻击,它只是避免跨网络的集群之间共享用户状态和访问记录。因此,API网关需要与某些机器学习和数据模式分析类型的场景一起使用。这些解决方案将能够跟踪用户的访问历史和模式,并在出现问题时提醒API网关,以便网关采取适当的措施。五、可扩展性API的扩展如今,许多组织正在将其基础设施迁移到云端,以按需付费的方式将其全部或部分运行在第三方IaaS提供商(如AWS、Google和Azure等)上-go基础IT服务。云原生架构的一个关键特征是能够提供可自动扩展的服务。那么我们的API和它的网关也应该具备这样的特点。对此,我们需要考虑以下三点:启动延迟。对其他系统的依赖。状态复制。通常,流程启动得越快,扩展就越容易。例如:一个进程需要30秒或更长时间才能启动,那么它至少需要提前30秒开始伸缩,这样系统才能及时启动并运行该进程。也就是说,流程启动所需的时间越长,您就越需要提前扩展流程。有时候,一个进程不能自己扩展,你的API和它的网关需要依赖其他辅助进程来实现。可见,你的API和它的网关越是独立,就越容易扩展系统。另外,如果你的API和它的网关需要保持内外状态的一致性,你需要考虑在扩展API时如何复制系统的状态。独立和无状态的API比常规的有状态系统更容易自动扩展。6.可用性如今系统的可用性变得越来越重要。虽然云服务提高了我们整体业务的健壮性,但是我们仍然需要考虑如何构建和配备具有一定弹性的API,包括:当系统出现故障时,我们可以快速恢复系统。数据中心、整体区域和IaaS服务的高可用性。一般来说,我们很容易通过备份来满足单个系统中各个服务器、进程、文件系统、数据库的高可用。但是我们如何处理整个数据中心或区域的故障?我们经常需要同时在多个数据中心位置部署我们的API。为了减少API构建、部署和维护的开销,我们经常需要通过尽可能多的自动化,轻松高效地实现跨多个可用区的数据复制自动化。由于系统中的依赖项越多,从故障中恢复就越困难。因此,很多系统采用原生的云容器平台(如Kubernetes),具备自动修复能力,以降低故障恢复的难度。然而,云服务提供商本身的可用性最近也受到质疑。想象一下:如果某个IaaS提供商的某个特定服务出现全球性中断,我们是否可以切换到其他IaaS?比如AWSRDS某个区域运行中断的业务是否可以协同切换到Azure备份?如今,一些企业已经成功地在不同地区的IaaS提供商之间部署了自己的API。他们在不同的IaaSS上构建分布式可扩展系统,通过分担整体系统负载实现按需扩展和付费。7.维护我们可以从以下三个方面及时了解API的有效性和性能:运行监控故障诊断业务监控运行监控运行监控对于API的正常运行和业务的顺利开展至关重要.您需要能够在问题实际发生之前识别故障、修复故障并消除负面影响。例如,如果您的某个服务或API内存不足,您可以及时监控系统以检测API内存使用量的快速增加,并在超过预定阈值时收到警报消息。对于这样的情况,我们往往可以通过扩展更多的实例进程来为查找根源和解决问题争取时间。故障诊断对于事件故障诊断,及时收集相关故障数据非常重要。首先,我们需要收集API和服务的所有运行时日志,并对其进行索引,以便快速、轻松地进行搜索,然后获取和识别特定时间段内发生的系统事件。掌握事件日志后,我们需要根据“线索”按需启用进一步的日志跟踪,以获取有关内存转储、网络等的信息。您的目标应该是构建可以在理想情况下对客户影响为零或最小的故障排除系统。这样做的一种流行模式是将一组故障节点隔离到一个单独的集群中,该集群要么不接收来自客户的流量,要么只接收其中的一小部分,以便于故障排除。业务监控现在很多公司都把提供API作为业务的主要增长点。因此,他们需要通过衡量API使用情况来确定组织业务的策略。为此,我们需要一个系统来捕获与实现当前业务目标相关的所有API数据,包括:上个月新API的消费者数量、基于现有API构建的新应用程序数量、调用当前API的应用程序其响应时间的改进、特定地区API用户的增长等。我们深入研究API调用以衡量业务KPI的性能。总结通过以上讨论,我希望您了解到:为客户提供价值是我们的首要任务。基于微服务的架构可以更快地交付可靠的软件,为客户提供更高的价值。API是企业创建数字体验的架构基础。现代API通常是自下而上开发的,因此开发人员和CI/CD流程尤为重要。API治理在确保正确交付API方面发挥着重要作用。组织应该能够将异构的服务集合组合成不同的API。API安全主要包括:内容检测、认证授权、异常模式分析。API应该是可扩展的,以满足云原生应用程序的需求。我们需要通过云服务为API带来更高的可用性。API的监控是企业可持续发展的重要保障。原标题:DeliveringaSuccessfulAPI:KnowWhatitTakes,作者:NuwanDias
