介绍:
OAS就是定义基于http的远程api的文档的一种规范
什么是API? API就是应用程序接口接口,比如说像编程中调用到的方法/函数,就是api之一,这个时候api是由方法的名称、参数、返回值等组成的。对于本地api来说,交互双方(调用者和提供api者)是处于同一台机器的,比如你自己机器的标准c库是由c编译器程序提供的。
而OAS就是聚焦于远程API的描述的,一般来说,提供API服务的一方称为提供方,而调用API的一方称为消费者。
OAS的优点:
文档校验和检查;
数据校验;
文档生成;
代码自动生成;
mock服务;
安全分析;
同时可供机器和人类阅读;
-
强大而完善的工具体系
使用 API 是计算机科学中的日常实践,因为它们的好处是毋庸置疑的。 举个最突出的例子:
API 提供信息隐藏:API 的任何一方(提供者和消费者)都不知道另一方的实现细节。 只要两者都遵守 API,就可以根据需要随意更改,而对方甚至不会注意到。
API 也称为契约,因为它们被认为是牢不可破的:提供者承诺不会改变其 API 并在未来几年继续兑现它。 有了这个承诺,消费者就可以开始开发他们的部件并充满信心地依赖 API 提供的功能。
现在,为了让所有相关方遵守相同的 API,必须对其进行精确定义。 下一节将介绍传统上如何实现这一目标。
一般来说,API都会配套有参考指南,用于解释如何来使用该api。而不幸地是,每个软件开发者或许都会面临以下的几种情况: 不熟悉文档
文档不全
过时的信息
读者无法理解的语言
为了解决这些问题,程序开发者往往需要大量时间来阅读源码、调试程序或者分析网络流量,这太浪费时间了
更现实的情况是,很多使用中会出现的问题,在你真真使用之前都难以发现
api描述文件(也称为契约)是一种机器可读的api规范(需要配合一些支持oas的工具,比如swagger)。它应该是尽可能完整且详细的(就是你几乎尽可能地把这个api涉及到细节都给描述出来了,从url到请求参数、响应参数、content-type、cookie、其他用到的header、以及包括对这些内容的描述、字段类型啥的全都给说清楚),虽然这不是强制(如果把一切都写清楚也不太现实)。这就是合同/契约 一样,你要是描述的越没有歧义,那它就越有用。
跟一般的人类可读的文档相比(也就是以往开发人员自行手写的比如markdown或者其他形式的文档),它最大的优势就是可以由机器自动处理,为本指南开头列出的好处敞开了大门。
只要是按照OAS编写的api描述,就可以很简单利用工具生成面向人类可读的文档;更进一步地说,它还能利用api描述直接生成即时可用的目标代码,这样生成的客户端代码是完全匹配api描述的,也避免了我们手动编写代码集成的时候一些错误。
OAS解释:
我们再次来介绍下OAS,OpenAPI规范(OAS)是一种与供应商无关的基于http的远程api描述格式。它最初基于2015年SmartBear Software捐赠的Swagger 2.0规范。
总而言之,它就是用于定义和描述基于http或者基于类似http的远程api的一种规范。
OAS规范:
整个OPENAPI的规范是很长的,对于新手来说是令人生畏的
所以我们需要先按主题、组织,简化浏览
OpenAPI文档结构:
OpenAPI文档是一个文本文件,一般是xxx.json或者xxx.yaml,是以json或者yaml格式来书写的
该文件被称为根文档并且可以被分割为多个json或者yaml文件 以让其更加清晰
一般来说,JSON不支持注释,需要:用逗号分隔字段,对象周围用花括号括起来,字符串周围用双引号括 起来,数组周围用方括号括起来。另一方面,YAML在数组项之前需要连字符,并且严重依赖缩进,这在大文件中可能很麻烦(在JSON中缩进完全是可选的)。YAML通常是首选的,因为它稍微减小了文件大小,但是这两种格式是完全可以互换的(只要使用YAML 1.2)。这些页面中的所有示例都将在YAML中给出。
然而,YAML是JSON的超集,这意味着这两种语法可以混合使用。虽然一般情况下不推荐这样做,但有时还是会派上用场的。例如
/users
server url中可以包含变量,在url中通过{}分隔,这些变量必须在进一步在server对象的variables中进行配置。variables是一个对象,它是一个变量名和变量对象之间的映射关系。
服务器变量对象有以下字段:
default(string): 这是一个必填字段,如果没有其他值要提供的话
enum(字符串数组):如果存在的话,那么这个数组就会列出该变量的合法值,默认值也必须出现在其中
description: 该字段的描述