如何提升 API-First 设计流程
一个 API-First 设计应该具有可复用性、互操作性、可修改性、用户友好性、安全性、高效性、务实性,并且重要的是,与组织目标保持一致。这些基本特征将确保 API 能够有效地为 API- First 组织战略和开发模式做出贡献,在这种模式中,API 可以最大限度地为业务创造价值。
但如何生成这样的 API-First 设计呢?
在本文中,我们将探讨如何通过以下五个流程集成到 API 设计过程中来实现 API-First 设计:
使用自然语言来分析和应对需求
观察上下文并确定约束条件
充分描述和记录 API
利用现有的 API 和指南
将自动化和人工反馈循环集成到流程中
1、使用自然语言来分析和应对需求
为了确保创建的 API 符合组织的目标,需要使用自然语言深入分析需求。这种分析可能涉及明确消费者或最终用户、他们的用例以及如何实现它们,这对于确定满足需求所必需的每个 API 功能至关重要。进行分析后,应与利益相关者交流预期,以确保一致性。
在进行此类分析时,只能使用自然语言,不考虑编程接口表示,通过这样区分问题将有助于与专家讨论,并避免过早地就诸如/customers or /customer或PUT or POST之类的问题展开辩论。最终,你可能会意识到有比标准 REST API 更好的选择,例如,gRPC、异步或 GraphQL API 可能更适合。
2、观察上下文并确定约束条件
API 设计者和利益相关者必须观察 API 上下文,并确定所有约束条件以确保 API 设计实用、高效且安全。这可能涉及到以下问题:
新 API 应该在什么时候部署?
底层系统是否存在限制?
主题内容是否符合我们创建 API 的常用方法?
安全要求是什么?
接下来,API 设计者和利益相关者可以决定是隐藏还是将约束条件融入设计中。隐藏它们可能会带来额外的工作,但设计更好。另一方面,将它们纳入其中可能会降低 API 的质量,但更容易按期交付。然而,请务必记住安全性是一个不可妥协的问题。
3、全面描述和编写 API 文档
在设计过程中写好 API 文档至关重要,以确保捕获所有信息,如编程接口描述、需求及其分析、约束和安全要求。这也可以指导你创建合适的 API。
为了描述和记录 API,你可以轻松地使用诸如 OpenAPI、AsyncAPI、GraphQL schema 或 JSON Schema 等 API 规范。这些规范将为你提供一个框架,但它们只能用于记录 API 的元素,而不是消费者如何组合它们以实现在需求分析期间确定的用例。
无论你使用哪种格式,把需求分析和生成 API 连接起来至关重要,以确保最终设计中不会遗漏任何内容。同时还需要向实施者提供尽可能多的信息,确保实现符合预期,例如,在 OpenAPI 文档中, 你可以通过查看摘要来确认在需求分析过程中确定“搜索客户”的操作已转换成 GET /customers 。此外,还可以查看操作安全配置及响应描述,以确保仅返回用户或消费者范围内的客户。
4、利用现有 API 和指南简化决策过程
API 设计过程涉及到大量的决策。然而许多决策是相同的,因为所有的 API 最终都要处理相同的基本问题,例如,表示日期或金额的最佳方式、如何搜索目录、创建资源或启动流程等。此外,在一个组织内部,所有 API 必须具有共同的样式。
为了避免在漫长且重复性高的讨论中浪费时间或重新设计轮子,可以参考组织内其他 API 并复制它们的设计模式。不过,在描述常见“配方”,如“如何设计搜索操作”或者“如何管理文件上传”的指南中,更高效的方法是将这些模式形式化。API 指南可以涵盖各种主题, 从用户友好性到安全性, 但它们只作用于促进创建 API-First 设计。如果某个指导原则规定对实现该目标没有帮助,就删除它。
遵循指南能够快速实现具有一定用户友好性、互操作性、可扩展能力、安全性和效率的 API 设计,但最重要的是可以帮助你专注于核心问题,创建正确的 API,而不会浪费时间和精力在遣词造句问题上。
5、将反馈循环整合到流程中
即使指南涵盖了所有相关主题,并以友好的方式呈现,但总有一些 API 设计者可能永远不会看,其他相关的人可能会通过反复检查指南中的细节而减缓进程。此外,任何人在编程接口设计中都可能犯一些小错误。因此,尽早寻求同事、专家和消费者的迭代反馈至关重要,与他们共享扩展的 API 文档以及模拟数据,确保他们能获取到所需的信息,以提供建设性的有效反馈。
Eolink 就是一个 API-first 的优秀案例,设计和开发了一系列的 API 工具平台,包括 API 快速生产、研发管理、自动化测试、网关、监控、开放平台等,实现对 API 的全生命周期覆盖。首创提出 DTDD(文档与测试驱动开发 )理念,通过标准化的工具和流程来解决 API 迭代效率的问题,致力于让 API 管理更简单。
DTDD(文档与测试驱动开发 ):
文档驱动开发:项目开发前,先把文档写好,明确功能需求、入参出参定义、异常情况处理等,再进行开发。
测试驱动开发:项目开发前,先写好测试方案/用例,要求代码顺利通过测试,如不通过则持续进行改进。

如何提升 API-First 设计流程的更多相关文章
- 探索 .NET团队对API的设计流程
在这篇文章中,我想介绍一些我觉得非常有趣的东西,.NET 团队是如何设计API的? 我们先来看下.NET团队面临的有哪些挑战,您正在设计一套API库,每天有数百万的开发人员在使用这些库,它们在世界各地 ...
- 好RESTful API的设计原则
说在前面,这篇文章是无意中发现的,因为感觉写的很好,所以翻译了一下.由于英文水平有限,难免有出错的地方,请看官理解一下.翻译和校正文章花了我大约2周的业余时间,如有人愿意转载请注明出处,谢谢^_^ P ...
- 关于API的设计与实现
http://blog.csdn.net/horkychen/article/details/46612899 API的设计是软件开发中一个独特的领域.最主要的特殊点在于API是供开发者使用的界面,即 ...
- 从涂鸦到发布——理解API的设计过程(转)
英文原文:From Doodles to Delivery: An API Design Process 要想设计出可以正常运行的Web API,对基于web的应用的基本理解是一个良好的基础.但如果你 ...
- RESTful API的设计原则
好RESTful API的设计原则 说在前面,这篇文章是无意中发现的,因为感觉写的很好,所以翻译了一下.由于英文水平有限,难免有出错的地方,请看官理解一下.翻译和校正文章花了我大约2周的业余时间, ...
- Android应用UI设计流程
Android应用UI设计流程 设计原理 1.在移动设计中,使用环境是最关键的因素.原型设计方法必须考虑尺寸因素 2.用户测试必须涵盖运动.声音和多点触控等方面: 进行移动设计和测试时,请将你知道的有 ...
- 好的RESTful API的设计原则
转载自一位大佬 英文原版 Principles of good RESTful API Design Good API design is hard! An API represents a cont ...
- OpenResty api网关设计
本文讲述 OpenResty api网关设计,主要涉及api网关介绍.openresty api网关 请求路由(路由判断.路由重写.服务判断.限流).授权验证(统一认证).动态Upstream 以及这 ...
- API的设计与安全
前后端分离是个浪潮,原来只有APP客户端会考虑这些,现在连Web都要考虑前后端分离 . 这里面不得不谈的就是API的设计和安全性,这些个问题不解决好,将会给服务器安全和性能带来很大威胁 . API的设 ...
- Web Api 端点设计 与 Oauth
最近一直看这方面的东西,总结如下: 在后续会进行实例demo演示,本篇进行理论详解. 下篇相关博客: <Web Api 内部数据思考 和 利用http缓存优化 Api> <API接口 ...
随机推荐
- 2021-10-18:乘积最大子数组。给你一个整数数组 nums ,请你找出数组中乘积最大的连续子数组(该子数组中至少包含一个数字),并返回该子数组所对应的乘积。力扣152。
2021-10-18:乘积最大子数组.给你一个整数数组 nums ,请你找出数组中乘积最大的连续子数组(该子数组中至少包含一个数字),并返回该子数组所对应的乘积.力扣152. 福大大 答案2021-1 ...
- 2021-10-03:合并两个有序数组。非递减数组nums1和nums2。合并这两个数组并放在nums1中。力扣88。
2021-10-03:合并两个有序数组.非递减数组nums1和nums2.合并这两个数组并放在nums1中.力扣88. 福大大 答案2021-10-03: 从右往左遍历nums1和nums2,谁大拷贝 ...
- 2021-09-27:Pow(x, n)。实现 pow(x, n) ,即计算 x 的 n 次幂函数(即,x**n)。力扣50。
2021-09-27:Pow(x, n).实现 pow(x, n) ,即计算 x 的 n 次幂函数(即,x**n).力扣50. 福大大 答案2021-09-27: 遍历n的二进制位. 时间复杂度:O( ...
- uni-app Flex布局
Flexbox #Flex 容器 Flex 是 Flexible Box 的缩写,意为"弹性布局",用来为盒状模型提供最大的灵活性. nvue布局模型基于 CSS Flexbox, ...
- 【GiraKoo】C++多线程消息分发架构
[开源需求]C++多线程消息分发架构 项目[gi_messager] 在多线程环境中,为每个线程提供独立的消息队列 MessageLoop.注:主线程默认自动创建消息队列. MessageLoopCe ...
- flutter系列之:做一个下载按钮的动画
目录 简介 定义下载的状态 定义DownloadButton的属性 让DownloadButton的属性可以动态变化 定义downloadController 定义DownloadButton的细节 ...
- 每周更新 | Verilog测试用例及波形展示图功能上线
Hi,亲爱的技术伙伴,经过产研团队的努力,本周ShowMeBug有以下4个功能上线啦- 芯片语言 Verilog 支持测试用例 芯片语言 Verilog 支持测试用例,自动评分同步上线- 同时,Ver ...
- wait,notify,notifyAll,sleep,join等线程方法的全方位演练
一.概念解释 1. 进入阻塞: 有时我们想让一个线程或多个线程暂时去休息一下,可以使用 wait(),使线程进入到阻塞状态,等到后面用到它时,再使用notify().notifyAll() 唤醒它,线 ...
- 【PAT】1001 害死人不偿命的(3n+1)猜想(动态更新)
卡拉兹(Callatz)猜想: 对任何一个正整数 n,如果它是偶数,那么把它砍掉一半:如果它是奇数,那么把 ( 砍掉一半.这样一直反复砍下去,最后一定在某一步得到 n=1.卡拉兹在 1950 年的世界 ...
- JUC同步锁原理
JUC同步锁原理 1.锁的本质 1.什么是锁? 通俗来讲,锁要保证的就是原子性,就是一个代码块不允许多线程同时执行,就是锁.从生活的角度上来说,就比如你要去上厕所,当你在上厕所期间,你会把门锁上, ...