构建 API 的7个建议【翻译】
迄今为止,越来越多的企业依靠API来为客户提供服务,以确保竞争的优势和业务可见性。出现这个情况的原因是微服务和无服务器架构正变得越来越普遍,API作为其中的关键节点,继承和承载了更多业务。
在这个前提下,API 的设计需要考虑到哪些方面就尤为重要。在本文中,笔者将讨论有助于构建的 API 的7个建议(这些见解基于笔者为移动客户端构建 API 的经验,但可以更广泛地用于任何类型的API)。
| 将 API 视为产品
在开始任何类型的开发时,产品的概念都是最为关键的因素,产品是向用户展示有用的功能和好处的单独个体,这在 API 中也是一样。如果在开发过程中,没有强烈的责任感和主动意识,想要设计和完成一个易于使用、可扩展、正确记录和安全的 API 并非易事。
所以需要将 API 视为一个整体来看,从第一天开始就做好生产准备。因此,需要指派产品负责人将理想 API 的愿景传达给敏捷团队。开发人员和测试人员必须制定计划以使用最佳 API 实践,并避免常见错误。
| 使用 API 规范框架
通常,API 框架由涵盖从概念到生产的整个开发生命周期的工具库组成。虽然在开发 API 时遵守 OpenAPI/Swagger 之类的规范有点死板,但它提供了更好的工具规范性。能够在每次代码更改时生成文档、SDK 和 UI 交互点非常有用的,毕竟每个人都喜欢自动化。
如果关心标准并希望在描述的 API 时提供常规工具,那么国外的 Swagger、国内的 Eolink 都是非常可靠的选择,可以提前获得回报。
| 使用版本控制策略
API 会随着业务需求的变化而不断发展。作为产品,它会有一个特定的版本,因此客户会希望得到这个版本的正确响应。在客户不知道的情况下引入重大更改,更新已发布和使用的 API 接口就像定时炸弹一样,很容易出现问题,特别是当用户的手机上可能仍然安装了旧版本时。
有多种方法可以在 API 上强制执行版本控制信息,其中大多数 API 开发者选择将版本信息放在 URL 中,这确实很实用。例如,以下 URL 表示客户的资源端点:
及时更新适合业务的版本策略非常重要。不过,如果决定更新版本,提供警告、更新和其他机制会更让版本更新的影响更小。
| 使用过滤和分页
开发 API 时的一个常见错误是没有提供过滤或对结果分页的方法。当公开一个返回可随时间更改的项目列表的 API 时,我们需要建立分页策略。
原因很简单,客户端尤其是移动客户端,无法一次查看数百个列表项,通常只能显示前10个。如果 API 为每个请求返回整个数据库列表,那么会有大量资源被浪费并且性能显着下降。
现代框架提供了一种对结果进行分页的方法:对查询使用 LIMIT 和 OFFSET 语句。例如,通过下面的 MySQL 语句,返回总结果的一部分代码:
上面的语句将从数据库中检索第 6-16 行,所以还需要提供一个JSON响应,根据LIMIT参数给出指向该查询的第一页、下一页、上一页和最后一页的链接。
| 使用 REST 和 HATEOAS
REST 是一种经过验证和实践测试的设计 Web 服务的架构方法,它独立于任何底层协议。因此,它非常适合设计 API。通过使用 REST 原则,我们可以应用一些设计注意事项,例如:
将端点视为具有传统命名方案的资源。例如,如果要公开排序列表,可以公开以下端点:
如果想查找特定的排序,可以提供一个 ID 参数:
这种方法有几个优点,包括更好的一致性、可读性和连贯性。
促进无状态连接。这有助于使服务更具可扩展性,因为它们不会有在客户端和服务器通信之间保持状态的硬耦合约束。
在 HATEOAS 的帮助下,无需事先了解内部 URI 方案,即可在整个资源集中更轻松地导航。它通过提供一组相关链接来增强每个资源的响应模型,以便更轻松地与 API 交互,而无需查找规范或其他元数据服务。HATEOAS 的一种很好的格式是 HAL 规范。例如,这里是对特定文本资源的 HAL 响应,为记者公开相关链接:
| 保护端点
安全问题这是一定不能忽视的点。任何漏洞都可能导致严重的后果,甚至涉及法律问题。安全管控需要在开发过程的早期建立,理想情况下,API 需要由外部供应商进行评估。C.I.A 安全三原则(机密性、完整性和可用性)适用于以下情况:
机密性是通过添加适当的身份验证控制来实现的,这些控制为系统提供了一种方法来了解谁正在访问信息或站点。OAuth2 和 JWT 提供了一种实用且安全的方法控制身份验证。必须在所有公共端点使用 HTTPS 以确保安全通信。
完整性是通过使用访问控制和授权策略来防止未经授权的用户篡改数据来实现的。 基于角色的授权 是一个不错的选择。
可用性是通过建立速率限制、部分响应和缓存来实现的,以防止大量使用 API 资源甚至服务器被无限循环关闭。
| 使用监控和报告
虽然开发和测试 API 在这个过程中扮演着重要的角色,但真正的工作并没有就此结束。我们需要继续提供监控,甚至从代码部署到生产之后都要继续保持。如果出现问题,需要使用可操作的信息通知正确的人,以便通过任何必要的方式做出响应。这构成了开发 API 时的一种主动方法:监控与报告。只要保持谨慎,当端点问题出现时,我们就可以及时处理,防止任何灾难性故障。像 Eolink 也有这样的 API 监控工具,也可以帮助我们解决这个问题。
图中所使用的的接口管理工具是eolink,可以对不同类型的接口进行测试,在测试流程中也支持添加不同步骤,感兴趣可以自行使用:www.eolink.com
构建 API 的7个建议【翻译】的更多相关文章
- 用Apache Kafka构建流数据平台的建议
在<流数据平台构建实战指南>第一部分中,Confluent联合创始人Jay Kreps介绍了如何构建一个公司范围的实时流数据中心.InfoQ前期对此进行过报道.本文是根据第二部分整理而成. ...
- Android 优化APP 构建速度的17条建议
转载:http://www.jianshu.com/p/a1cc8f2e0877 较长的构建时间将会减缓项目的开发进度,特别是对于大型的项目,app的构建时间长则十几分钟,短则几分钟,长的构建时间已经 ...
- lumen 构建api(dingo api)
什么是 API API(Application Programming Interface,应用程序编程接口)是一些预先定义的函数,目的是提供应用程序与开发人员基于某软件或硬件得以访问一组例程的能力, ...
- Spring Boot中使用Swagger2构建API文档
程序员都很希望别人能写技术文档,自己却很不愿意写文档.因为接口数量繁多,并且充满业务细节,写文档需要花大量的时间去处理格式排版,代码修改后还需要同步修改文档,经常因为项目时间紧等原因导致文档滞后于代码 ...
- 优化Webpack构建性能的几点建议
Webpack 作为目前最流行的前端构建工具之一,在 vue/react 等 Framework 的生态圈中都占据重要地位.在开发现代 Web 应用的过程中,Webpack 和我们的开发过程和发布过程 ...
- springboot+mybatis-puls利用swagger构建api文档
项目开发常采用前后端分离的方式.前后端通过API进行交互,在Swagger UI中,前后端人员能够直观预览并且测试API,方便前后端人员同步开发. 在SpringBoot中集成swagger,步骤如下 ...
- ASP.NET WebAPI构建API接口服务实战演练
一.课程介绍 一.王小二和他领导的第一次故事 有一天王小二和往常一下去上早班,刚吃完早餐刚一打开电脑没一会儿.王小二的领导宋大宝走到他的面前,我们现在的系统需要提供服务给其他内部业务系统,我看你平时喜 ...
- springboot学习-jdbc操作数据库--yml注意事项--controller接受参数以及参数校验--异常统一管理以及aop的使用---整合mybatis---swagger2构建api文档---jpa访问数据库及page进行分页---整合redis---定时任务
springboot学习-jdbc操作数据库--yml注意事项--controller接受参数以及参数校验-- 异常统一管理以及aop的使用---整合mybatis---swagger2构建api文档 ...
- ASP.NET Core WebApi构建API接口服务实战演练
一.ASP.NET Core WebApi课程介绍 人生苦短,我用.NET Core!提到Api接口,一般会想到以前用到的WebService和WCF服务,这三个技术都是用来创建服务接口,只不过Web ...
随机推荐
- Python 函数进阶-递归函数
递归函数 什么是递归函数 如果一个函数,可以自己调用自己,那么这个函数就是一个递归函数. 递归,递就是去,归就是回,递归就是一去一回的过程. 递归函数的条件 一般来说,递归需要边界条件,整个递归的结构 ...
- burp通过条件竞争上传文件
一·何为条件竞争 现代框架更能抵御此类攻击.他们通常不会将文件直接上传到文件系统上的预期目的地.相反,他们采取了预防措施,例如首先上传到临时的沙盒目录并随机命名以避免覆盖现有文件.然后,他们对这个临时 ...
- 干货 | 一文彻底读懂nginx中的location指令
一个执着于技术的公众号 Nginx系列导读 给小白的 Nginx 10分钟入门指南 Nginx编译安装及常用命令 完全卸载nginx的详细步骤 Nginx 配置文件详解 一文带你读懂Nginx反向代理 ...
- JUC自定义线程池练习
JUC自定义线程池练习 首先上面该线程池的大致流程 自定义阻塞队列 首先定义一个双向的队列和锁一定两个等待的condition 本类用lock来控制多线程下的流程执行 take和push方法就是死等, ...
- Redisson批量操作类RBuckets和管道利器RBatch
<Spring Boot 整合Redisson配置篇> <Spring Boot 整合Redisson操作Redis基础篇> <Redisson批量操作类RBuckets ...
- 使用 AgileConfig 动态配置 NLog
NLog 是我们在 .NET 领域使用非常广泛的日志组件.它默认使用 xml 来维护它的配置.最近有几个同学问我当使用 AgileConfig 的时候如何配置 NLog .因为 AgileConfig ...
- 『忘了再学』Shell基础 — 14、环境变量(二)
目录 1.PS1变量的作用 2.PS1变量的查看 2.PS1可以支持的选项 3.PS1环境变量的配置 4.总结 提示: 在Linux系统中,环境变量分为两种.一种是用户自定义的环境变量,另一种是系统自 ...
- Nexus5x 刷机
1.刷机方式 线刷 线刷的本质的是对分区的全部内容的替换,线刷的包通常比较大. 卡刷 顾名思义,将升级包放在存储卡上,然后进入Recovery引导模式对系统进行刷机.卡刷本质是对文件的替换过程.它不会 ...
- Spring AOP快速使用教程
Spring是方法级别的AOP框架,我们主要也是以某个类的某个方法作为连接点,用动态代理的理论来说,就是要拦截哪个方法织入对应的AOP通知.为了更方便的测试我们首先创建一个接口 public in ...
- 即时通讯IM,是时代进步的逆流?看看JNPF怎么说
JNPF快速开发平台所包含的第四个重要的开发框架是即时通讯沟通工具.即时沟通工具的目的是让各大企事业单位在各种业务工作流程环境下实现实时无缝协同办公,打破信息数据孤岛,形成高效的层级流转审批和各流程环 ...