迄今为止,越来越多的企业依靠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. 1.4 类UNIX系统是什么鬼?

    上节<UNIX和Linux的区别>中讲到了 UNIX 系统的历史,UNIX 是操作系统的开山鼻祖,是操作系统的发源地,后来的 Windows 和 Linux 都参考了 UNIX. 有人说, ...

  2. IT人的修炼之路

    前言 计算机技术更新迭代的速度太快了,作为ITer每天除了面对工作,就要学习新技术,自己的感觉是一直在为技术疲于奔命,直到现在,也不敢放缓脚步.程序员每天必须抽出一定时间学习新技术,避免被淘汰. 1. ...

  3. srpingboot拦截器

    1.创建一个普通的web工程. 2.先创建需要的基础文件,比如一个用户类. package com.example.mode; public class User { private Integer ...

  4. 面试官:Kafka是什么,它有什么特性与使用场景?

    哈喽!大家好,我是小奇,一位热爱分享的程序员 小奇打算以轻松幽默的对话方式来分享一些技术,如果你觉得通过小奇的文章学到了东西,那就给小奇一个赞吧 文章持续更新 一.前言 不知不觉进入了五月份了,天气越 ...

  5. Linux中文件/文件系统的压缩、打包和备份总结(基于rhel7)

    文件/文件系统的压缩.打包 Linux有哪些压缩工具可供选择 按压缩比:xz>bzip2>gzip,按压缩时长:gzip>bzip2>xz,另外还有zip可以选择. gzip只 ...

  6. Linux磁盘和文件系统知识总结

    硬盘操作 为什么要给硬盘分区? 如果你需要在一块硬盘上用到多个文件系统,那么你就需要对硬盘进行分区,以便用不同的分区支持不同的文件系统.(但一个硬盘只能有一个分区表!)反过来说,如果你整块硬盘都用同样 ...

  7. 【多线程】观测线程状态 getState()

    观测线程状态 getState() Thread.State(查看JDK帮助文档) 线程状态.线程可以处于以下状态之一: [NEW] 尚未启动的线程处于此状态. [RUNNABLE] 在Java虚拟机 ...

  8. 128_Power BI父级排名TOPN子级动态展示

    博客:www.jiaopengzi.com 焦棚子的文章目录 请点击下载附件 一.背景 前些天在和朋友交流Power BI中有这样一个需求,按照父级排名后,需要显示出父级TOPN的子级明细. 如下&l ...

  9. 怎样生成分布式的流水ID

    流水编号 日常在我们开发的过程中可能会用到编号的功能,如销售订单号,采购订单号,日志编号,凭证号...等等,为了保证唯一有些表的主键要么用自增长,要么用GUID值,或通过雪花ID算法生成.这此方式基本 ...

  10. Spring bean到底是如何创建的?(上)

    前言 众所周知,spring对于java程序员来说是一个及其重要的后端框架,几乎所有的公司都会使用的框架,而且深受广大面试官的青睐.所以本文就以常见的一个面试题"spring bean的生命 ...