什么是API?
无抓取抓取API暴露了应用程序用于从支持的Web源请求结构化数据的文档操作。
简而言之
- API是软件组件之间的定义接口。 它指定了可用的操作和调用它们的规则。
- Web API是一种API。 库函数、浏览器功能、操作系统和远程服务都可以暴露接口。
- 合同比成功的连接更重要。 输入、凭据、响应字段、错误和生命周期状态决定了正确的使用。
- HTTP状态和业务结果是不同的证据。 客户端验证响应协议和所需的数据。
API代表应用程序编程接口。它是一个程序通过其提供能力的边界。调用者看到名称、输入、输出和规则;它不需要拥有背后的实现。在Python库中,边界可能是一个函数签名。在Web服务中,它通常是一组URL、HTTP方法、头部、请求体、响应格式和错误条件。
这个定义比熟悉的餐厅类比更有用,因为它告诉工程师应该检查什么。API是提供者对消费者的承诺。它可能描述一个快速查询、一个更改状态的命令或一个异步作业。成功集成意味着遵循该承诺并验证预期的结果,而不仅仅是从服务器接收字节。
接口是一个合同
API合同识别存在的操作以及调用者如何使用它们。对于远程操作,合同可以包括端点、方法、必需字段、接受的值、凭据方法、响应模式和可能的错误。它还可以描述分页、速率限制、版本控制和异步状态。消费者应该将这些视为同一接口的一部分,因为遗漏一个可以改变表面上有效请求的含义。
该 OpenAPI规范 为团队提供了一种机器可读的方式来描述HTTP API路径、操作、参数、请求体、响应和安全方案。描述文档有助于工具,但不能替代观察服务。示例可以省略可选字段或异常情况。将规范与一个真实的响应进行比较,并将接受测试与应用程序实际使用的字段关联起来。
良好的合同将稳定的公共行为与私有实现分开。提供者可以在保持相同外部请求和响应语义的同时更换数据库或内部工作者。消费者应避免依赖JSON中的字段顺序、偶然的延迟或未记录的错误字符串。这些细节可以在没有正式API版本变更的情况下更改,因为它们从未成为承诺的一部分。
Web API调用如何通过HTTP移动
客户端首先选择一个操作并构建请求。该方法表达一个操作类别,目标URL标识资源或操作,头部字段携带元数据,正文可以携带结构化输入。服务器解析消息,评估凭证和输入,执行工作并发送响应。 HTTP语义标准 定义了方法、状态代码和字段的共享含义;每个产品合同将这些可能性缩小到其自身的操作。
考虑一个客户端请求结构化公共Web数据。它可以发送一个经过身份验证的请求,命名所选源及其输入。提供者可以直接返回结果,或返回后续检索的任务标识符。因此,201或202响应可以表示操作已被接受而不是完成。阅读文档化的响应信封,然后决定记录哪个本地状态。
传输、HTTP结果和业务结果应分开记录。DNS故障意味着没有HTTP响应到达。HTTP 401表示服务拒绝身份验证。成功的HTTP响应仍然可以包含空或不完整的业务结果。保持这些层次分开,使运营诊断成为可能,并防止代码悄悄地将登录页面存储为提取记录。
API的种类及其适用时机
库API是一个本地编程接口:函数和类型在一个进程内调用。浏览器API将DOM选择或网络请求等功能暴露给页面代码。操作系统API暴露文件、进程或设备。远程API跨越网络边界。共享特性是一个文档化的方式,允许一个组件使用另一个组件;单独的API一词并不意味着JSON、REST或甚至HTTP。
Web API的样式也各不相同。面向资源的HTTP接口通常以标准方法公开可寻址资源。GraphQL通过架构和字段选择来公开操作。事件API在某些变化时发送通知或流。一个系统可以结合多种样式:一个调用提交作业,另一个读取其当前状态,网络钩子宣布完成。选择那些保证与工作流程契合的样式,而不是将一个首字母缩写视为质量标签。
比较应重点关注消费者的任务。如果可以通过官方文档端点检索公共产品记录,则在其条款允许时使用该接口。如果数据仅作为渲染页面可用,则Web数据服务可能会提供该页面或结构化提取。如果浏览器必须通过多步骤公共工作流程进行点击,则浏览器自动化变得相关。获取选择发生在编写字段选择器之前。
身份验证、授权和错误含义
身份验证告诉提供者哪个调用者提出了凭证。授权决定该调用者是否可以执行特定操作。API 密钥可以识别帐户或应用程序,但并不会自动授予所有功能。 无抓取密钥指南 记录相关 REST 请求的确切头信息,并警告不要在客户端代码中暴露密钥。遵循所选产品的当前方法,而不是猜测标准外观的头信息。
错误响应属于合同。客户端应区分格式错误的输入、缺少凭证、访问不足、资源缺失、速率控制和服务失败,当 API 记录这些结果时。不要将每个失败体解析为成功模式。安全的集成首先检查状态和预期的媒体类型,然后解释特定操作的消息体。如果服务返回任务状态,请在将结果视为最终结果之前读取该状态。
错误处理应保留足够的上下文以便在不记录机密的情况下修复请求。保留操作名称、安全请求标识符、状态和编辑后的响应消息。避免记录完整的凭证头或敏感页面数据。当提供者记录请求 ID 时,将其保留以供支持。一个有用的错误报告识别失败的合同字段,而不是将每个问题转变为“API 不可用”。
一个具体的无抓取 API 示例
该 抓取 API 介绍 描述了为支持的网络来源选择请求的执行者。执行者识别操作类别;其输入对象提供源特定参数。服务返回结构化输出,其字段取决于执行者。这就是 API 合同的实际应用:调用者选择一个操作并验证返回的形状,而不拥有集合基础设施。
一个消耗这些结果的应用仍然需要其自己的记录模式。假设它需要标题、源 URL 和观察时间。执行者的响应可能在不同源的不同嵌套位置包含这些值。明确映射每个支持的执行者,将可选字段标记为可选,并拒绝缺少下游用例所需字段的响应。一个通用 JSON 解析器仅能证明文本在内存中变成了值。
该 抓取 API 产品概述 解释了结构化数据表面,而 抓取器 API 执行者指南 则展示了为什么端点和结果封装因执行者类别而异。从一个记录的执行者和一个狭隘的接受测试开始。只有在检查第二个模式后才扩展到另一个执行者。
如何在依赖之前评估 API
在编码之前写一个简短的集成检查清单:您需要的操作、当前端点、凭证如何发送、所需输入、输出字段、错误响应以及如何指示完成。识别哪些细节是稳定的文档行为,哪些仅仅是示例。检查您的应用是否需要历史数据、实时数据或任务之后的通知。这些需求暗示即使对于同一提供者也有不同的接受测试。
创建一个针对允许目标的小合同测试。测试应该断言预期的 HTTP 结果和证明结果属于该目标的业务标记。具有正确状态但错误页面或空壳的响应应该失败。存储响应形状的编辑示例以供开发,并避免将说明性示例值视为实时证据。
最后,计划变化。版本化的端点可以帮助应对重大变化,但可选字段可能会在其他稳定接口中出现或消失。隔离提供者特定的映射代码。监控缺少的字段、意外的媒体类型和变化的完成状态。健康的 API 集成使其假设可见,因此提供者的更改会产生明确的验证错误,而不是破坏存储的数据。
结论
API 是一个软件合同,使组件能够跨定义的边界协作。有效的问题是提供了什么操作、接受什么输入和凭证、如何表示完成,以及哪些输出证明业务目标得以实现。将这些答案视为每个集成的可测试要求。
发挥 API 合同的作用
使用当前的无抓取操作,并将其记录的结果映射到您的应用所需的字段。
今天注册并获得 $5 的免费信用 — 不需要信用卡.
领取您的 $5 信用 →常见问题解答
API 的全称是什么?
API 的全称是应用程序编程接口。它指定了一种定义的方式,让一个软件组件使用另一个组件所暴露的功能。接口可以是本地的,例如库函数,或远程的,例如 HTTP 服务。
每个 API 都是网络 API 吗?
不是。浏览器、操作系统、库和设备在不必发送 HTTP 请求的情况下暴露 API。网络 API 使用网络协议,并且有额外的考虑因素,如传输错误、凭证、媒体类型和服务可用性。
API 是否总是返回 JSON?
不。网络 API 可以返回 JSON、HTML、XML、二进制数据、空响应或协议特定消息。操作合同定义了表示方式。客户端应在解析之前确认预期的媒体类型。
什么是 API 端点?
端点是一个可寻址的地点或远程服务上的操作。在 HTTP API 中,它通常是与方法、头和可选输入体一起使用的 URL。仅凭 URL 可能无法识别完整的操作。
API 和 SDK 之间有什么区别?
API 是服务或组件暴露的接口。SDK 是一组工具和代码,帮助开发人员使用接口,通常包装请求和响应处理。SDK 可以简化调用,但其版本和方法形成另一个合同进行验证。