由于API对于我们的软件运行方式至关重要,因此记录我们的API对于确保我们大型IT组织中的每个人都了解正在发生的事情至关重要,这就是我们使用OpenAPI来帮助记录API规范的原因。

在本文中,我将向你介绍OpenAPI规范和API-First开发原则。

OpenAPI规范

OpenAPI规范始于Swagger规范,经过Reverb Technologies和SmartBear等公司多年的发展,OpenAPI计划拥有该规范(捐赠之后),OpenAPI Initiative在GitHub上托管社区驱动的规范。

规范是一种与语言无关的格式,用于描述RESTful Web服务,应用程序可以解释生成的文件,这样才能生成代码、生成文档并根据其描述的服务创建模拟应用。

什么是API优先开发?

应用程序向云环境这一演变趋势为更好地集成服务和增加代码重用提供了机会,只要拥有一个接口,然后通过该接口,其他服务的应用程序就可以与你的应用程序进行交互,这是向其他人公开你的功能,但是,开发API却不应该是在开发后才公开功能。

API文档应该是构建应用程序的基础,这个原则正是API-First(API优先)开发的全部内容,你需要设计和创建描述新服务与外部世界之间交互的文档,一旦建立了这些交互,就可以开发代码逻辑来支持这些交互。让我们来看看这种方法带来的好处。

API-First如何使您的组织受益

当你的组织从API文档开始时,这允许团队在开发过程中更快地开始彼此交互。API文档是应用程序与使用它的人之间的合同。

内部开发可以在API合同背后进行,而不会干扰使用它的人的努力,计划使用你的应用程序的团队可以使用API​​规范来了解如何与你的应用程序进行交互,甚至在开发之前。他们还可以使用该文档创建用于测试其应用程序的虚拟服务。

OpenAPI文档的剖析

该规范的当前版本是3.0.1版,并在OpenAPI GitHub存储库中进行了详细记录。但是,如果你像我一样,我更喜欢看一个规范的例子,而不是通过描述文档描述每个可能的部分的明确的技术细节。

让我们看一个描述服务API的简单API文档,它允许用户创建,修改,检索和删除用户首选项。您可以在SwaggerHub上完整地查看此API 。

OpenAPI文档有三个必需的部分或对象:

1. openapi - OpenAPI规范版本的语义版本号

2. info - 有关API的元数据

3. paths - API的可用路径和操作

你可以根据需要包含其他对象。其他对象包括安全性,服务器,标签和组件。

openapi: 3.0.1
info:
version: "1.0.0"
title: 用户指导API
description: 这是一个支持用户设置的创建,修改,检索和删除。
<p>

openapi对象声明了用于文档的规范的版本。该版本对于用户理解文档的结构至关重要,更重要的是,对于可能为了验证目的而获取文档或创建虚拟服务的任何工具,info对象提供有关API本身的基本信息。标题和版本是必填字段,我们可以选择包含其他信息,例如说明,联系和许可信息。

路径对象

paths路径对象是API文档的核心。此对象详细说明了可与应用程序交互的路径,可用的方法以及这些交互包含的内容的详细信息。该对象包括请求参数和预期结果:

paths:
/preference:
get:
summary: 根据ID发现用户设置
description: 返回用户设置
operationId: getPreferenceById
parameters:
- name: id
in: query
description: 这是返回一个用户设置的ID
required: true
schema:
type: string
responses:
'200':
description: 请求成功
content:
application/json:
schema:
$ref: '#/components/schemas/Preference'
'400':
description: 无效 ID
'404':
description: 用户设置没有发现
<p>

上面的摘录描述了按ID检索用户设置的GET请求路径,这些属性大多是不言自明的。值得注意的是HTTP 200响应的模式。$ ref属性引用文件中其他位置的对象,它是用于多个路径的描述:

#/components/schemas/Preference的结构如下:

components:
schemas:
Preference:
type: object
required:
- userId
- preferenceName
- status
properties:
userId:
type: string
format: uuid
preferenceName:
type: string
preferenceValue:
type: string
status:
type: string
description: Preference Status
enum:
- test
- enabled
- disabled
- delete
<p>

在另外一个地方定义组件并引用它,这种方式能让我们重用相同的定义并使我们的OpenAPI合同更易于管理。

swaggerhub有在线编辑器可以体验。

Getting Started with the OpenAPI Specification · S

OpenAPI规范入门的更多相关文章

  1. OPENAPI规范Swagger

    OPENAPI规范 是一种规范,Swagger是一种工具,Swagger帮我们使用OPENAPI更具体更完善,更好. 博客1:https://app.swaggerhub.com/help/index ...

  2. 【API规范】OpenAPI规范

    OpenAPI规范 openAPI 3.0_百度搜索 OpenAPI Specification 2.0 - CSDN博客 APP相关_API 列表_OpenAPI 2.0_开发指南_移动推送-阿里云 ...

  3. Liferay7 BPM门户开发之2: BPMN 2.0 规范入门 (Activiti BPMN extensions)

    Liferay最大的问题是BPM弱,如果做企业开发,BPM必不可少,所以直入主题,做个BPMN2入门. 本文参考地址:http://activiti.org/userguide/index.html# ...

  4. OpenAPI 3.0 规范-食用指南

    概述 OpenAPI 3.0 规范由 8 个根对象组成: openapi info servers paths components security tags externalDocs OpenAP ...

  5. REST easy with kbmMW #20 – OpenAPI and Swagger UI

    即将推出的kbmMW更新不仅是一些bug修正,同时将包含一个新的主要功能:客户端存根生成器框架. 那什么是客户端存根生成器框架呢? 他是一个基于kbmMW smart services,可以生成由各种 ...

  6. Swagger使用教程大全,从入门到精通

    Swagger是遵守OpenAPI规范(OAS)的世界上最大的API框架开发工具,可在整个API生命周期内进行开发,从设计和文档到测试和部署.它提供了许多试用的工具来帮助开发者进行接口开发,如及时接口 ...

  7. Swagger从入门到精通

    https://legacy.gitbook.com/book/huangwenchao/swagger/details 如何编写基于OpenAPI规范的API文档 [TOC] 前言 编写目的 本文介 ...

  8. OpenAPI初体验

    问题的一开始源于客户和服务部门抱怨我的REST API文档写得不好,然后又了解到 django rest framework 利用 coreapi 能自动生成文档,再就是看到 swagger.io 上 ...

  9. 基于OAS设计可扩展OpenAPI

    前言 随着互联网行业的兴起,开发模式已逐步转换为微服务自治:小团队开发微服务,然后通过Restful接口相互调用.开发者们越来越渴望能够使用一种“官话”进行流畅的沟通,甚至实现多种编程语言系统的自动化 ...

随机推荐

  1. Am335x SD卡刷eMMC二

    犹豫前段时间一直在搞另一个项目,Am335x这个BBlack板就放置一边了.前几天把BBlack板重新拿到手,之前搞得给全忘了.SD卡烧写emmC时突然出现了错误,一直找不到原因,今天终于算是有点眉目 ...

  2. VTORRAAYY ws+tls+nginx config

    # nginx conf partal location /haha { proxy_redirect off; # the prot should same with config v2*** pr ...

  3. CentOS开放端口的方法

    Centos升级到7之后,内置的防火墙已经从iptables变成了firewalld.所以,端口的开启还是要从两种情况来说明的,即iptables和firewalld.更多关于CentOs防火墙的最新 ...

  4. Load store action in vulkan & ogles 的解决方案

    metal的带宽之前的blog有讲 这篇主要是vulkan 和ogles的解决方案 https://www.khronos.org/registry/vulkan/specs/1.1-extensio ...

  5. CSS实现按钮YES-NO按钮+Jquery获取按钮状态。

    前几天我经理突然跟我说,能不能做一个开关按钮,需要过滤的一个标识.说实话,一个做后端我是懵逼状态的. 不过网上资料很多,查了一遭,发现一个不错的哥们给出的案例,模仿一下成功实现,下面就自己总结一下: ...

  6. 计算机网络|C语言Socket编程,实现两个程序间的通信

    C语言Socket编程,实现两个程序间的通信 server和client通信流程图 在mooc上找到的,使用Socket客户端client和服务端server通信的流程图

  7. 简单NLT

    目录 操作文本 需求 代码实现 操作文本 I have a dream that my four little children will one day live in a nation where ...

  8. 「CF712E」Memory and Casinos「线段树」「概率」

    题解 解法1:(官方做法) 一段区间的\(L\)定义为从最左边开始出发,最左不失败,一直到最右边胜利的概率,\(R\)定义为从最右边开始出发,最左不失败,又回到最右边胜利的概率 考虑一个区间\([l, ...

  9. JS学习-01

    01

  10. Zookeeper原理 二

    Zookeeper到底是什么!? 学一个东西,不搞明白他是什么东西,哪还有心情学啊!! 首先,Zookeeper是Apache的一个java项目,属于Hadoop系统,扮演管理员的角色. 然后看到官网 ...