大家好,我是阿萨。日常测试API少不了。API都有哪些类型?今天来学习一下。
API是连接各种不同软件应用程序的强大而通用的方法。API允许大量不相关的软件产品与其他软件和数据集成和互操作。API还允许开发人员利用丰富的其他开发人员的API向软件添加特性和功能。今天的许多企业、移动和网络软件都依赖于广泛的API。
然而,API并不都是平等的。开发人员可以使用各种API类型、协议和体系结构,以满足不同应用程序和业务的独特需求。
一:四种类型的WEB API
API在web应用程序中被广泛接受和使用。web服务中常用的API有四种不同类型:公共的、合作的、私有的和组合的。在这种情况下,API“类型”表示预期的使用范围。
1. 公共API。公共API是开放的,可供任何外部开发人员或企业使用。如果企业制定的业务策略涉及与其他企业共享其应用程序和数据,那么企业将开发并提供公共API。这些也称为开放api或外部api。
2. 合作的API。合作API仅供特定选择和授权的外部开发人员或API使用者使用,是促进企业对企业活动的一种手段。例如,如果企业希望有选择性地与外部CRM公司共享其客户数据,合作API可以将内部客户数据系统与这些外部方连接起来——不允许使用其他API。
合作伙伴拥有访问此类API的明确权利和许可。出于这个原因,合作API通常包含更强的身份验证、授权和安全机制。企业通常也不会直接将这些API货币化;合作伙伴按服务付费,而不是通过使用API付费。
3. 内部API。内部或私有API仅用于在企业内连接业务内的系统和数据。例如,内部API可能连接组织的工资和人力资源系统。
内部API传统上表现出较弱的安全性和身份验证——或者根本没有——因为API是为内部使用而设计的,并且假定这种安全级别是通过其他策略实现的。然而,随着威胁意识的增强和法规遵从性需求对组织的API策略的影响越来越大,这种情况正在发生变化。
4. 复合API。复合API通常将两个或多个API组合在一起,以生成一系列相关或相互依赖的操作。复合API有助于处理复杂或紧密相关的API行为,有时可以提高单个API的速度和性能。
二:API协议和体系结构
API交换命令和数据,这需要明确的协议和架构——管理API操作的规则、结构和约束。今天,有三类API协议或体系结构:REST、RPC和SOAP。这些可能被称为“格式”,每一种都有独特的特征和权衡,用于不同的目的。
1. REST。具象状态传输(representational state transfer, REST)体系结构可能是构建 API最流行的方法。REST依赖于分离API前端和后端的客户机/服务器方法,并在开发和实现方面提供了相当大的灵活性。REST是无状态的,这意味着API在请求之间不存储数据或状态。REST支持缓存,用于存储慢速或非时效性 API的响应。REST API,通常被称为RESTful API,也可以直接通信或通过API网关和负载均衡器等中间系统进行操作。
2. RPC。远程过程调用(RPC)协议是一种发送多个参数并接收结果的简单方法。RPC API调用可执行的操作或流程,而REST API主要交换数据或资源,如文档。RPC可以使用两种不同的语言,JSON和XML进行编码;这些API分别被称为JSON-RPC和XML-RPC。
3. SOAP。简单对象访问协议(SOAP)是由万维网联盟(World Wide Web Consortium)定义的一种消息传递标准,广泛用于创建Web api,通常使用XML。SOAP支持internet上广泛的通信协议,如HTTP、SMTP和TCP/IP。SOAP也是可扩展的和与风格无关的,这使得开发人员能够以不同的方式编写SOAP API,并轻松地添加特性和功能。SOAP方法定义了如何处理SOAP消息、包含的特性和模块、支持的通信协议以及SOAP消息的构造。
与REST的灵活性相比,SOAP是一个高度结构化、严格控制和定义清晰的标准。例如,SOAP消息最多可以包含四个组件,包括信封、消息头、消息体和错误——后者用于错误处理。
三:比较API协议
API格式的选择可以对API的成功和采用产生深远而持久的影响。组织必须根据必须交换的信息的复杂性、信息所需的安全级别以及这些交换所需的速度或性能来选择最合适的格式。
例如,更简单的格式可能更容易编码和维护,但可能无法提供企业采用者所需的安全级别。更复杂的格式可能会提供这种安全性,但会给采用者带来更高的学习曲线,或者需要开发人员进行更多的错误修复和工作。权衡很少是简单的,但是对于主要的API格式有一些共同的考虑。
考虑REST和SOAP。这两种格式都是为了连接应用程序而设计的,主要利用HTTP协议和Get、Post和Delete等命令。两者都可以在请求和响应中使用XML。然而,SOAP在设计上依赖于XML,而REST也可以使用JSON、HTML和纯文本。SOAP通过严格的规则进行了标准化,而REST则允许其规则的灵活性,并由体系结构进行治理。SOAP是从远程过程调用构建的,而REST是基于资源的。
因此,REST和SOAP都交换信息,但是以非常不同的方式进行。当企业需要严格的安全性和明确定义的规则来支持更复杂的数据交换和调用过程的能力时,就使用SOAP。开发人员经常将SOAP用于内部API或合作API。REST用于相对简单数据的快速交换。REST还可以支持更大的可伸缩性,支持大型且活跃的用户群。这些特性使得REST在公共API中很流行,比如在移动应用程序中。
REST | SOAP |
与XML, JSON, HTTP和纯文本一起工作 | 与XML一起工作 |
松散 灵活 | 严格、明确定义的规则 |
中等安全 | 高级安全 |
与数据打交道 | 与流程处理或者操作一起 |
低带宽,高可伸缩性 | 更多带宽,但可伸缩性有限 |
关于何时使用RPC的讨论稍微简单一些。与SOAP类似,RPC是高度结构化的,用于能够调用流程的相对简单的 API。接下来的选择是使用JSON还是XML——同样,这取决于API的预期用途、交换的信息类型和所需的安全级别。
JSON是更简单的语言,JSON- RPC只支持字母数字数据或文本交换,安全性很低。XML-RPC处理更广泛的数据,包括文本、图像、图形、图表等。因此,XML提供了优于JSON的文档处理能力,并提供了更好的安全特性。这两种方法都支持各种编程语言,包括Python、Java和PHP。
基于RPC的API对于企业级API来说是一个糟糕的选择,因为它们的数据类型支持有限,安全性也有限。但是,它们可能适用于一些内部复合API。例如,JSON-RPC API可以在不等待响应的情况下进行调用,并支持多个可以异步处理的同时调用。这里的重点是选择最适合业务需求和必须连接的应用程序的API类型。
四:选择正确的API
无论是在软件项目中选择一个现有的API,还是从头开始构建一个新的API,开发人员都应该考虑或包括以下几个重要因素:
1. 清晰完整的文档。API是软件,像任何软件一样,它们需要全面的文档,为开发人员提供如何指导、参考用法和示例用例,旨在帮助开发人员快速成功地应用API。
2. 简单方便。保持API的简单性,建立一个获取API的简单方法——例如下载和帐户注册——并确保可靠和知识渊博的API支持,可以解决任何开发人员的问题。否则,该API将难以集成或难以集成,开发人员将放弃它,而选择更容易采用的其他API。
3. 易于使用。一个好的API很容易使用,具有合理和直观的调用结构。即使是最强大、最全面的API,如果它使用了繁琐且不一致的调用和响应,也会被忽略。简单、一致、清晰和向后兼容性——包括明确的弃用——是一个好的API的标志。
4. 稳定可靠。好的API的开发就像任何其他软件一样,它应该包括全面的错误测试和可伸缩性和性能的明确指标,比如API每秒可以处理多少客户端-服务器调用和其他相关因素。性能不一致或不可靠的有bug的api很快就会被开发人员抛弃。通过第三方提供商使用的api必须是高可用性和健壮性的。
5. 安全。API必须通过明确的身份验证来支持安全性——只有授权用户才能使用API。此外,通过API交换的任何数据都应该加密或以其他方式防止窥探和窃取。
五:API例子
对于许多现代软件平台的成功来说,API是常见的,甚至是必不可少的。日常计算机用户可能使用各种各样的 API,却从未意识到它们的重要性。API用例的例子包括:
1.社交媒体API。Twitter和Facebook等社交媒体平台依赖api来处理平台和远程端点之间的通信,包括Twitter机器人等功能。
2. 登录和身份验证api。当今高度集成的软件环境依赖API来提供某种程度的单点登录。例如,一个应用程序可能要求用户“使用Facebook登录”。这避免了用户需要为他们使用的每个站点或应用程序创建唯一的帐户,但所涉及的API在幕后有效地集成了多个应用程序的身份验证。
3. 小部件和服务API。API通常用于集成各种小特性和函数。例如,天气报告、海潮时间表、新闻提要和网络搜索中出现的其他内容通常是通过搜索引擎向不同的服务提供商使用的API生成的。谷歌Maps等其他服务使用API使用户能够通过浏览器搜索位置或规划路线,API还允许地图包含在无数第三方网站中。
4. 财务和支付API。银行通常依靠API将远程用户连接到银行的后端系统,以进行远程存款、余额检查、转账和电子支付。像PayPal这样的大型金融企业使用API将用户连接到PayPal帐户,甚至使用PayPal向其他购物网站(如Amazon和eBay)付款。
5.旅行和预订api。搜索航班时刻表和购买机票的用户使用的是航空公司的API,而搜索酒店可用性和预订房间的用户使用的是酒店的API。还有一些网站,如Trivago和Expedia,使用自定义API使用户能够搜索和预订各种航班和住宿,而旅游网站则从后端使用航空公司、酒店、汽车租赁和其他提供商 API。
6. 航运和供应链API。从产地到目的地的包装和运输过程产生了大量的实时数据。API用于允许客户检查购买状态并查看任何运输细节,包括包裹的当前位置和预期交付。
7. 内容交付和管理API。Spotify和Netflix等在线内容分发平台依靠API使用户能够选择所需的内容,然后将流媒体内容发送到用户的设备上进行观看,同时提供商保持对内容的控制,这些内容从未真正下载或存储在用户的设备上。
8. Microservices。从软件开发的角度来看,API是现代基于微服务的应用程序的重要元素,允许在组成应用程序的许多模块或容器之间进行通信。因此,可以对一个模块进行更改,但测试和更新可以限制在相应的模块或微服务中。
这些通常是目前使用的最常见和最易识别的API,但是还有无数为业务合作伙伴或内部使用而开发的 API,它们对业务有帮助,但从未被广泛采用。随着软件角色的增长,API将继续发现新的用例,并在软件开发中扮演越来越重要的角色。