迄今为止,越来越多的企业依靠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个建议【翻译】的更多相关文章

  1. 用Apache Kafka构建流数据平台的建议

    在<流数据平台构建实战指南>第一部分中,Confluent联合创始人Jay Kreps介绍了如何构建一个公司范围的实时流数据中心.InfoQ前期对此进行过报道.本文是根据第二部分整理而成. ...

  2. Android 优化APP 构建速度的17条建议

    转载:http://www.jianshu.com/p/a1cc8f2e0877 较长的构建时间将会减缓项目的开发进度,特别是对于大型的项目,app的构建时间长则十几分钟,短则几分钟,长的构建时间已经 ...

  3. lumen 构建api(dingo api)

    什么是 API API(Application Programming Interface,应用程序编程接口)是一些预先定义的函数,目的是提供应用程序与开发人员基于某软件或硬件得以访问一组例程的能力, ...

  4. Spring Boot中使用Swagger2构建API文档

    程序员都很希望别人能写技术文档,自己却很不愿意写文档.因为接口数量繁多,并且充满业务细节,写文档需要花大量的时间去处理格式排版,代码修改后还需要同步修改文档,经常因为项目时间紧等原因导致文档滞后于代码 ...

  5. 优化Webpack构建性能的几点建议

    Webpack 作为目前最流行的前端构建工具之一,在 vue/react 等 Framework 的生态圈中都占据重要地位.在开发现代 Web 应用的过程中,Webpack 和我们的开发过程和发布过程 ...

  6. springboot+mybatis-puls利用swagger构建api文档

    项目开发常采用前后端分离的方式.前后端通过API进行交互,在Swagger UI中,前后端人员能够直观预览并且测试API,方便前后端人员同步开发. 在SpringBoot中集成swagger,步骤如下 ...

  7. ASP.NET WebAPI构建API接口服务实战演练

    一.课程介绍 一.王小二和他领导的第一次故事 有一天王小二和往常一下去上早班,刚吃完早餐刚一打开电脑没一会儿.王小二的领导宋大宝走到他的面前,我们现在的系统需要提供服务给其他内部业务系统,我看你平时喜 ...

  8. springboot学习-jdbc操作数据库--yml注意事项--controller接受参数以及参数校验--异常统一管理以及aop的使用---整合mybatis---swagger2构建api文档---jpa访问数据库及page进行分页---整合redis---定时任务

    springboot学习-jdbc操作数据库--yml注意事项--controller接受参数以及参数校验-- 异常统一管理以及aop的使用---整合mybatis---swagger2构建api文档 ...

  9. ASP.NET Core WebApi构建API接口服务实战演练

    一.ASP.NET Core WebApi课程介绍 人生苦短,我用.NET Core!提到Api接口,一般会想到以前用到的WebService和WCF服务,这三个技术都是用来创建服务接口,只不过Web ...

随机推荐

  1. [题解] [AGC024F] Simple Subsequence Problem

    题目大意 有一个 01 串集合 \(S\),其中每个串的长度都不超过 \(N\),你要求出 \(S\) 中至少是 \(K\) 个串的子序列的最长串,如果有多解,输出字典序最小的那组解. 由于 \(S\ ...

  2. 关于数据拓展及面试题讲解 Java

    强类型语言  要求变量的使用严格符合规定,所有变量都必须先定义后才能使用 弱类型语言 Java 的数控类型分为两大类 基本类型(primitive type) 引用类型(reference type) ...

  3. Spring 源码(10)Spring Bean 的创建过程(1)

    Spring Bean的创建刚开始进行了一些准备工作,比如转换服务的初始化,占位符解析器的初始化,BeanDefinition元数据的冻结等操作,都是为了在创建Bean的过程中保证Bean的正确的创建 ...

  4. 【多线程】线程优先级 Priority

    线程优先级 Priority Java提供一个线程调度器来监控程序中启动后进入就绪状态的所有线程,线程调度 器按照优先级决定应该调度哪个线程来执行. 线程的优先级用数字表示,范围从1~10. Thre ...

  5. 好客租房4-react的基本使用 方法说明

    2.2方法说明 React.createElement //第二步创建react元素         //参数1:元素名称         //参数2:元素属性         //参数3:元素的子节 ...

  6. Python模块Ⅱ

    Python模块2 part3 模块的分类: 内置模块200种左右:python自带的模块,time os sys hashlib等 第三方模块6000种左右:需要pip install beauti ...

  7. 记一次Tomcat卡死在 Deploying web application 步骤的问题

    公司有一个历史的遗留项目是传统的MVC架构的前后不分离的项目,一开始使用JDK1.7写的,后来前一阵老板说想在这个远古项目上加点功能,顺带换换皮,于是乎一帮程序员们就用JDK1.8重新翻新了一遍项目顺 ...

  8. docker引起服务器磁盘爆满

    服务器异常 又是开开心心打开我心爱的服务器一天: 吔!这是嘛啊?我的服务器域名访问不了了,一直转圈圈超时了,好,打开ssh远程看看,吔!!!还是访问不了,宕机了?怀着一颗憋大便的心情打开了阿里云控制面 ...

  9. ExtJS 布局-Auto布局(Auto Layout)

    更新记录 2022年5月30日 开启本篇 1.说明 auto布局是大部分容器默认的布局类型. auto布局通常是从上到下进行堆叠,auto布局不会设置子组件的宽度,默认与容器一样的宽度. 类似于HTM ...

  10. 使用PowerShell压缩和解压ZIP包

    更新记录 本文迁移自Panda666原博客,原发布时间:2021年7月13日. 解压ZIP包 使用PowerShell的Expand-Archive命令.PowerShell官方文档地址. 命令格式: ...