基于OAS设计可扩展OpenAPI

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

开放API战略(Open API Initiativev)于2017年1月发表声明,2月发布实现草案,经过反复讨论, 标准API规范OAS(OpenAPI-Specification)3.0版本在2017年6月诞生。

 

OAS 3.0架构中将OpenAPI赋予了以下8个模块的定义,其中黄色模块为必选字段,绿色模块为可选字段:

 

基于OAS设计可扩展OpenAPI

各个主要模块工作流如下所示:

 

基于OAS设计可扩展OpenAPI

以下重点说明用户获取使OAS API信息的三个必选部分:

1.1 API基本信息

用户查询获取OpenAPI的基本定义及信息,涉及以下两个模块内容:

l   openapi

是否必选:必选

对象类型:String

类似于XML声明(<?xml version="1.0"?> ),用于设定文件应该使用哪一种规范进行解析。

l   info

是否必选:必选

对象类型:Info Object

这个模块主要提供API的元数据。

以下为一个Info Object样例:

title: Sample Pet Store App    #必须,应用名称
description: This is a sample server for apetstore.   #应用的描述
termsOfService:       #应用的服务条款连接
contact:      #应用提供商的联系方式
   name: API Support
   url:
   email: support@example.com
license:   #应用所遵循的协议
   name: Apache 2.0
   url:
version: 1.0.1       #应用版本

1.2 目标服务器信息

用户查询获取服务器的基本定义及信息,涉及以下模块信息:

servers

是否必选:必选

对象类型:[Server Object]

这个模块主要提供和目标服务器的连接信息,如果这个模块没有定义url,根据规范会自动生成一个url为/的Server Object。

例如:

servers:
- url: https://development.gigantic-server.com/v1  #必选,
  description: Development server   #非必选,url描述

1.3 API路径及定义

查询API具体参数,涉及OAS剩余的模块,本文主要介绍paths和components模块。

l   paths

是否必选:必选

对象类型:Paths Object

这个模块主要提供OpenAPI所在的目标服务器的连接信息,如果这个模块没有定义,根据规范会自动生成一个url为/的Server Object。通过多级定义,分别确定API的paths/method,并且通过$ref引用comonents模块中的定义,可以复用响应码等相关信息。对于携带body体的请求类型,requestBody可以提供example(或数组examples),这是非常灵活的(可以传入一个完整的例子,一个参考,甚至是一个URL的例子)。

例如:

/pets:        #URL
     get:     #方法,get/post/..
         description: Returns all pets .    #描述
         responses:         #响应模块
             '200':         #返回码为200,可以使用通配符定义响应
             description: A list of pets.    #响应描述
             content:           #Content字段
                 application/json:
                     schema:
                         type: array 
                         items:
                             $ref: '#/components/schemas/pet' #引用componets

l   components

是否必选:非必选

对象类型:Components Object

这个模块主要提供每个OpenAPI自定义的字段定义,这部分定义的对象往往被paths中具体API进行引用:

−           响应 responses

−           参数 parameters

−           示例 examples

−           请求体 requestBodies

−           标题 headers

−           链接 links

−           回调 callbacks

−           模式 schemas

−           安全体系 securitySchemes

以下为一个Components Object样例:

components:
     schemas: #协议定义
         Category:
             type: object
             properties:
                 id:
                     type: integer
                     format: int64
             name:
                     type: string
         Tag:
             type: object
         properties:
                 id:
                     type: integer
                     format: int64
                 name:
                     type: string
     parameters: #参数定义
         skipParam:
             name: skip
             in: query
             description: number of items to skip
             required: true
             schema:
                 type: integer
             format: int32
         limitParam:
             name: limit
             in: query
             description: max records to return
             required: true
             schema:
                 type: integer
             format: int32
     responses: #返回信息定义
         NotFound:
             description: Entity not found.
         IllegalInput:
             description: Illegal input for operation.
     GeneralError:
         description: General Error
         content:
             application/json:
                 schema:
                     $ref: '#/components/schemas/GeneralError'
     securitySchemes:
         api_key:
             type: apiKey
             name: api_key
             in: header
     petstore_auth:  #认证定义
         type: oauth2
         flows:
             implicit:
                 authorizationUrl:
                 scopes:
                     write:pets: modify pets in your account
                     read:pets: read your pets

2 如何使用OAS 设计可扩展的OpenAPI

内容版权声明:除非注明,否则皆为本站原创文章。

转载注明出处:https://www.heiqu.com/zyyxdd.html