Rest 使用OpenAPI到底有什么意义?

Rest 使用OpenAPI到底有什么意义?,rest,api,openapi,Rest,Api,Openapi,尽管我在日常工作中反复构建和使用restapi,但我并不是来自使用OpenAPI或类似的东西的背景。在我目前的角色中,我们总是定义OpenAPI规范,这似乎是流程中假定的一部分。团队认为这非常重要 然而,就我的一生而言,我无法认识到它的一个好处。我在努力更好地理解 在我知道它能做的事情中,没有一件看起来是有益的,但是我不得不错过一些东西 OpenAPI规范可以生成文档,但在我看来,文档是供人阅读的,应该由人编写。生成的文档可能包含所有的位,但是没有一个包含整个API使用的上下文和细微差别 Op

尽管我在日常工作中反复构建和使用restapi,但我并不是来自使用OpenAPI或类似的东西的背景。在我目前的角色中,我们总是定义OpenAPI规范,这似乎是流程中假定的一部分。团队认为这非常重要

然而,就我的一生而言,我无法认识到它的一个好处。我在努力更好地理解

在我知道它能做的事情中,没有一件看起来是有益的,但是我不得不错过一些东西

  • OpenAPI规范可以生成文档,但在我看来,文档是供人阅读的,应该由人编写。生成的文档可能包含所有的位,但是没有一个包含整个API使用的上下文和细微差别
  • OpenAPI规范可以为单个API生成多种语言的客户端代码。通常,它们只是将RESTURL结构映射到方法名。这真的有用吗?这意味着我可以做
    client.books.get(title=“Moby Dick”)
    而不是
    client.get(“/books”,{'title':'Moby Dick'})
    。它所做的一切都是围绕着相同的名称进行转换,而不是让任何事情变得更简单或更简洁。那么,再说一遍,重点是什么?生成的客户端似乎根本没有添加任何内容

有谁能启发我吗?

OpenAPI规范本身并不是一件有益的事情。根据我的经验,在许多服务相互交互的微服务环境中,它们是一个巨大的好处

与所有接口一样,RESTful接口可以被视为服务提供者和服务使用者之间的契约

提供者承诺提供一组特定的操作,使用者可以订阅这些操作及其各自的端点

本例中的OpenAPI规范是参与者可以达成一致的合同草案。如果他们一开始不同意,他们就有api规范需要协商

当然,这是一个非技术方面

在更多的技术方面,我发现有三个方面非常有用

1。从单一来源生成代码和文档

当涉及到文档时,有两个丑陋的事实:没有人喜欢写它,没有人喜欢读它,而且大多数时候,它已经过时了

有了OpenAPI规范和其他类似工具,您就有了用于生成实际代码和文档的规范。两者都不过时的可能性更大。然而,机会仍然不是100%

2。无需编写样板代码

使用OpenAPI规范,不再需要手动实现数据类和简单的客户端和服务器代码。对于许多用例,您可以省略设置项目——您不需要编写spring引导服务器或java数据传输对象。如果您有api规范,生成器将为您执行此操作

当您处理一个只提供少数端点和数据对象的简单api时,这并不是一件大事。但是,当您面对数百个端点和数据类时(正如我所看到的),有了一个编写良好的api规范,事情就会变得容易得多

3。工具

openapi生态系统()中存在许多工具。它不仅仅是代码生成器

有一个很棒的规范文件编辑器,有数据验证器,测试数据生成器等

TL;DR

你当然是对的。基本上,OpenAPI及其背后的整个工具套件将生成客户机和服务器代码,并充当rest端点和生成代码之间的映射器

但是,编写映射代码可能会很枯燥且容易出错。最好让一些工具来帮你

此外,机器可读的api规范可以用作api合同清单。它可以在git存储库上进行版本控制,并通过nexus repo进行分发


如果使用得当,它可以让你的生活变得更轻松。

好吧,我可以在这里给你一些好处

  • 您可以将API文档化
  • 任何外部客户都可以轻松阅读您为REST API指定的合同,以及他们如何与API集成,而无需与您的开发团队交谈,也无需与您的技术负责人安排会议
  • 通常,资源可以有多个表示,这主要是因为可能有多个不同的客户端需要不同的表示。如果您使用可视化工具生成 基于OpenAPI格式的文档,您可以轻松地为 相同的资源,所有基于内容使用的模型 协商(例如内容类型/接受标题)
  • 如果您有一个有效的OpenAPI(Swagger格式),您可以导入文档并将其托管在API网关上,该网关可以作为所有外部客户端搜索与您的组织集成所需的API的入口点。而且,你可以 生成一些API密钥并确定哪个客户端正在使用您的 应用程序编程接口。
  • 如果为文档生成UI,则不需要使用postman进行一些测试并将数据获取/发布到API
  • VisualStudio现在有一个功能,您可以在其中传递API的URL,它会为您发现端点并创建一个HttpClient来开始使用它
  • 希望这有帮助