65.9K
CodeProject 正在变化。 阅读更多。
Home

使用规范驱动开发构建 API

starIconstarIconstarIconstarIcon
emptyStarIcon
starIcon

4.62/5 (6投票s)

2014年11月4日

CPOL

7分钟阅读

viewsIcon

12944

使用规范驱动开发以及 RAML、Swagger 或 API Blueprint 等工具,您可以确信构建的 API 将深受用户喜爱,同时还能节省未来的时间和精力,并降低成本。

回顾过去

“一切都完成了!”  在我上一份工作中,最后一行代码终于写完了,我们的 API 已经准备好发布到大众了!  我们再也无法感到更自豪了;这是六个月艰苦的跨公司会议、细致的编码以及 QA 大量耐心的最终成果。  在这个辉煌的时刻,我没有意识到,仅仅几个月后,整个项目就会在我们眼前崩溃,被迫关闭。

不,这不是高层领导改变了想法,也不是我们“战略性地转移”了重点,而是没有人想使用我们的 API。  尽管进行了许多长时间的会议、细致的编码和残酷的测试 我们却忘记了一个小细节。  我们忘记了在尝试构建 API 之前进行设计,并且将实际用户纳入设计周期。

可悲的是,在匆忙构建面向外部的 API 并将其交付给客户的过程中,公司却忘记了“销售”任何产品或服务的第一法则:了解客户的需求。
 

了解您为何要构建 API

当我与其他公司交流时,当我问他们为何要构建 API 时,我收到的最常见的回答是“他们想向开发者公开他们的应用程序/数据。”  但当我问“为什么”时,答案似乎站不住脚,不是因为他们没有提供优质的服务,而是因为他们没有花时间去理解或考虑开发者的用例。

在构建 API 之前,重要的是要理解您为何要构建 API。  重要的是要理解您是为谁构建的 是为了内部使用、您的客户,还是将扩展您的服务/补充他们自己服务的开发者?  是为了数据迁移还是服务利用?  您的 API 用户会期望执行哪些类型的操作?

这意味着要超越“他们将使用我们的数据”的说法,而是要绘制一个资源图,显示开发者将实际利用哪些服务,以及他们将如何利用这些服务。  很容易将此步骤与 CRUD 的实现混淆 试图将这些操作与 GET、POST、PUT、PATCH 和 DELETE 联系起来。  但这个过程应该更简单,因为在这个阶段,您只是在创建用户故事,而不是技术定义。  因此,与其关注 CRUD,不如关注客户端将能够做什么,例如您的 API 能够创建新用户、更新用户、重置忘记的密码等。  或者,如果您有一个消息系统,能够发送消息、创建草稿、发送草稿、查看消息、将消息移至文件夹、查看联系人等。

在此阶段,请务必让您的用户参与进来。  询问他们想做什么,什么对他们很重要。  因为无论您的 API 设计多么精心考虑,或者您如何细致地编写代码 如果它不是他们想要的,那将毫无用处。

一旦您有了 API 用户需求,现在是时候设计 API 了。  令人惊讶的是,许多公司会跳过这一步,而是直接进行开发。  问题在于,您的 API 是一份合同,是您与用户之间的协议。  这是您公司对他们的承诺,他们依赖您的 API 不仅是为了让他们的生活更轻松,也是为了他们的生计。  当您破坏向后兼容性、当您更改内容时,您就剥夺了他们专注于开发新功能的能,并迫使他们专注于修复由您自己的 API 引起的问题。

因此,确保您的 API 设计为 API 的初始发布以及未来的开发提供坚实的基础非常重要。  重要的是,您的 API 设计要关注长远发展。  不要只关注当前的产品路线图,而是要考虑您的产品在 2-3 年后可能会变成什么样 以及您的 API 将需要能够做什么。
 

利用规范驱动开发

做到这一点的最简单方法之一是利用规范驱动开发,或者将您的 API 分为两个不同的阶段:设计和开发。

第一阶段,即设计阶段,意味着与您的开发团队和潜在的 API 用户合作,制定一份规范,或者说是 API 应如何工作的蓝图。  有一些规范可以帮助您做到这一点,包括 RAMLSwaggerAPI Blueprint。  我个人最喜欢 RAML,因为它提供了一个单一格式 (YAML) 来管理您的 API,并允许代码重用,同时鼓励基于模式的设计。  RAML 也有一些很棒的 开源项目,包括一个 API 设计器,可以在您定义 API 的同时以可视化的方式显示它,交互式文档,以及一个 API Notebook,让用户可以使用 JavaScript 与您的 API 进行交互和探索。

使用 MuleSoft 免费托管的 API Designer ,您还可以原型化或模拟您的 API,让您在无需编写或修改任何代码的情况下获得即时用户反馈。  在设计过程中,API 的原型化/模拟至关重要,因为它可以帮助您识别潜在的设计缺陷和不一致之处,同时还能让您未来的 API 开发者为您提供您可能未曾想到的宝贵反馈和用例。

规范驱动开发的第二个阶段是开发,即为 API 的不同层编写代码。  通过拥有一份强大的蓝图供开发人员使用,他们可以快速无畏地构建您的 API,而无需担心他们的资源是否会与其他开发人员的资源兼容,或者模式是否匹配。

其理念是,在设计阶段,您将消除 99% 的设计缺陷/潜在设计错误。  因此,在开发周期中坚持使用规范非常重要。  很容易想偏离或更改内容,但这样做会让你回到原点 即时地创建 API,而事先没有经过仔细的思考。  请记住,我们在短期设计方面做得很好,但在长期设计方面却非常糟糕,而 API 的目的是长期存在的。

Spec Driven Development

如果您在设计中确实发现了一个问题,那也没关系。  这意味着您需要回到设计阶段,实施解决方案,然后进行测试,以确保该解决方案按用户预期运行,并且不会破坏其他任何东西/引起任何不一致。  完成这些之后,您可以立即回到开发阶段。
 

一个痛苦的教训

他们说,一些人生中最好的教训是那些你用惨痛的代价学到的。  虽然我非常赞同,但我仍然希望在我们从事那个项目时,我们已经了解了规范驱动开发,并且有 RAML、Swagger 和 API Blueprint 等技术可用。  很难想象如果我们能在编写第一行代码之前就识别出 API 的问题,会发生什么。  API 可能今天是什么样子,以及我们会节省多少时间和金钱。

规范驱动开发并不能保证您的 API 会完美,甚至不能保证它会遵循 最佳 API 设计实践 但是,它确实能确保您的 API 对用户来说是有意义的,并提供一个坚实、经过深思熟虑的基础,您可以在此基础上构建您的 API 从而提高其灵活性、可扩展性和寿命。

 

  

© . All rights reserved.