OpenAPI工具、生成器

news2024/10/7 14:29:00

文章目录

  • 一、OpenAPI工具
  • 二、OpenAPI文档
  • 四、OpenAPI Generator
  • 五、API规范(契约)
  • 参考

一、OpenAPI工具

OpenAPI.Tools

  • OpenApi 文档编辑器,推荐使用:Stoplight Studio
  • Mock服务器,推荐使用Prism
  • 代码生成工具:OpenAPI Generator,github

二、OpenAPI文档

Open API Specification

  • 文档可以使用yaml或者json描述
  • Open API规范的内容:路径,http操作;基本信息;联系方式;授权路径;访问控制;服务器
  • OpenAPI文档实际上就是HTTP操作描述的集合
  • 设计API的过程就是编写OpenAPI文档的过程,后续的开发工作会基于这个OpenAPI文档进行
  • 建议使用Stoplight studio创建的OpenAPI文档

Stoplight

  • Stoplight studio,集成IDE
  • Spectral,验证
  • Prism,模拟服务器

eg:Stoplight studio创建一个支付的OpenAPI文档

在这里插入图片描述

(1)设置一些基本信息

在这里插入图片描述

(2)创建一个路径用于查询支付状态
在这里插入图片描述
使用(3)中创建的Response在这里使用这个Response

在这里插入图片描述

(3)创建一个Response
在这里插入图片描述

(4)创建一个路径用于创建支付记录
在这里插入图片描述
保存项目工程
在这里插入图片描述

在这里插入图片描述

工程最终就是一个yaml文件

openapi: 3.1.0

# ASAM SOVD V1.0.0

# © by ASAM e.V., 2022

# SOVD API Fault Data Types
# This file is informative. The normative REST API definition is published in the specification.


# Any use is limited to the scope described in the ASAM license terms.
# See http://www.asam.net/license.html  for further details.

info:
  title: SOVD API Fault Data Types
  license:
    name: Licensing Terms for Grant of Rights to Use ASAM Products
    url: https://www.asam.net/license/
  version: 1.0.0
  description: >-
    Data types for representing faults

paths: {}

components:
  # ==========================================================================
  # Schema definitions
  schemas:
    # ------------------------------------------------------------------------
    # Schema: ListOfFaults
    ListOfFaults:
      description: >-
        List of all faults of a device
      type: object
      required:
        - items
      properties:
        items:
          type: array
          items:
            $ref: '#/components/schemas/Fault'
        schema:
          description: >-
            Schema for describing the fault response.
            Condition: Only provided if the query parameter include-schema is true.
          $ref: ../commons/types.yaml#/components/schemas/OpenApiSchema

    # ------------------------------------------------------------------------
    # Schema: Fault
    Fault:
      description: >-
        Description of a single fault
      type: object
      required:
        - code
        - fault_name
      properties:
        code:
          description: >-
            Fault code in the native representation of the entity.
          type: string
          example: '0012E3'
        scope:
          description: >-
            Defines the scope (e.g., user-defined fault memories) for fault entries.
            The capability description defines which scopes are supported.
          type: string
          example: Default
        display_code:
          description: >-
            Display representation for the fault code.
          type: string
          example: P102
        fault_name:
          description: >-
            Name / description of the fault
          type: string
          example: No signal from sensor
        fault_translation_id:
          description: >-
            Optional identifier for translating the name
          type: string
          example: CAMERA_0012E3_tid
        severity:
          description: >-
            Severity defines the impact on the availability of the vehicle. Lower number means higher severity.
            For a classic ECU this resembles the level from ODX, for HPCs the SOVD API recommends
            1 = FATAL,
            2 = ERROR,
            3 = WARN, and
            4 = INFO.
          type: integer
          example: 1
        status:
          description:
            Detailed status information for the fault as key value pairs. For classic ECU this resembles the status byte of a DTC.
            The content of the keys and values is OEM-specific. The keys are defined in the capability description. See Notes below.
          type: object
        symptom:
          description: >-
            Detailed symptom / failure mode information for the fault. For classic ECU this resembles the symptom of a DTC.
            The content of the attribute is OEM-specific.
          type: string
        symptom_transaction_id:
          description: >-
            Translation identifier for the symptom name.
          type: string
          items:
            $ref: ../commons/types.yaml#/components/schemas/AnyValue

四、OpenAPI Generator

功能:

  • 根据OpenAPI文档生成不同类型的代码,支持生成多种编程语言和框架

使用方式:

  • 使用命令行工具,以jar包的形式提供
子命令:
generator

查看generator的帮助
openapi-generator-cli help generator
重要参数:
-g:指定生成器
-i:输入的openAPI文档
-o:指定代码生成目录
-p: 传递生成器特有的配置项



=======================================================
辅助命令:
验证OpenAPI文档
openapi-generator-cli validate -i payment-service.yaml

列出生成器:客户端,服务器端,文档,模式,配置生成器
openapi-genertor-cli list

查看生成器的配置项
openapi-generator-cli config-help -g spring

eg:生成使用Spring的服务器端代码

openapi-generator-cli generate -g spring -i payment-service.yaml -o payment-service-server-spring
openapi-generator-cli generate -g spring -i payment-service.yaml -o payment-service-server-spring -p delegatePattern=true
  • 使用Maven或者Gradle的插件
  • 使用在线服务,发送代码生成请求到公开或者私有的服务器上,然后下载生成好的代码(使用较少),openapi-generator online

五、API规范(契约)

(1)API规范就是契约契约。

Reset API的规范可以使用OpenAPI规范或者早期的Swagger;

  • Open API规范基于Swagger发展而来,以yaml或者json的格式来表述RESET API的契约
  • Open API规范中最重要的两个元素:路径,模型
    (1)路径是标识每个API的访问路径,可以定义路径的参数、查询参数、请求格式和相应格式等
    (2)模型是定义请求和响应中可能出现的对象的结构
    (3)OpenAPI的时候是Json或者yaml的

gRPC API使用Protobuf来定义API契约;

(2)查看OpenAPI生成的文件,可以使用swagger UI

docker run --rm -p 8800:8080 -v /home/wangji/test.yaml:/openapi.yaml -e SWAGGER_JSON_=/openapi.yml/swaggerapi/swagger-ui 

打开浏览器即可:

在这里插入图片描述

(3)模拟服务器

  • 可以使用Stoplight Prism
prism-cli  mock -d product.v1.yaml

服务器默认端口:4010
-d:标识给出随机数据

在这里插入图片描述

(4)OpenAPI Generator可以生成访问API的客户端和服务器端代码

在这里插入图片描述
eg:使用yaml生成java代码

(1)下载OpenAPI Generator CLI的jar文件
(2)执行命令:
生成客户端代码:
java -jar ./openapi-generator-cli-5.0.0-beta2.jar generate -i ./product.v1.yaml -g java -o product-java-client
生成服务端代码,使用spring框架生成服务端代码
java -jar ./openapi-generator-cli-5.0.0-beta2.jar generate -i ./product.v1.yaml -g spring -o product-java-server

使用IDEA打开创建的服务端代码,生成的代码中内置了Swagger UI,直接启动服务端,输入:localhost: 3000即可

参考

  • 【API 优先的设计】工具篇

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/1479558.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

不可多得的干货,网易的朋友给我这份339页的Android面经

这里先放上目录 一 性能优化 1.如何对 Android 应用进行性能分析 android 性能主要之响应速度 和UI刷新速度。 首先从函数的耗时来说,有一个工具TraceView 这是androidsdk自带的工作,用于测量函数耗时的。 UI布局的分析,可以有2块&#x…

Kubernetes工作负载重点总结

文章目录 1、容器2、Pod3、工作负载4、Deployment5、StatefulSet5、DaemonSet6、Job7、CronJob 1、容器 容器: 容器是容器镜像的运行态,通过基于标准的容器运行时运行,将应用程序从底层的主机设施中解耦。 容器镜像: 容器镜像是一…

网友对阿里爸爸家的商标们说了一句话,惊呆了

只是没想到 没有什么是买不到的 今天科技界依然没有大事发生~ 嗯,世界和平世界和平。 。 。 然而,当我浏览微博时,我发现很多网友对阿里巴巴的商标非常感兴趣: 阿栗的爸爸、妈妈、兄弟、姐妹、祖父母、叔叔、阿姨,…

数据可视化基础与应用-02-基于powerbi实现医院数据集的指标体系的仪表盘制作

总结 本系列是数据可视化基础与应用的第02篇,主要介绍基于powerbi实现医院数据集的指标体系的仪表盘制作。 数据集描述 医生数据集doctor 医生编号是唯一的,名称会存在重复 医疗项目数据projects 病例编号是唯一的,注意这个日期编号不是真…

智慧灌区项目案例(甘肃省兰州市某重点灌区)

​甘肃省兰州市某重点灌区自上个世纪80年代建成后,灌溉面积达到30万亩,对推动当地农业发展发挥了重要作用。但长期以来,该灌区的水利管理仍主要依靠人工统计记录,缺乏实时监测和精细化管理。为实现灌区管理的现代化升级,甘肃水利局委托星创易联公司设计实施水利信息化项目。 项…

STM32自学☞AD单通道

程序的最终运行成果: 当转动电位器时,数值和电压值发生变化 ad.c文件 #include "stm32f10x.h" #include "stm32f10x_adc.h" #include "ad.h" #include "stdint.h" void ad_Init(void) { /* 初始化步骤:…

pause、alarm、kill——进程——day13

今天主要讲线程中信号的三个函数 1.pause 1.pauseint pause(void); 功能:让进程睡眠,直到接收到信号(捕捉)才能继续向下执行eg: #include "head.h"void handler(int signo) {return; }int main(void) {signal(SIGINT,handler);printf("pause up!\…

uniapp基于Android学生课程签到成绩管理系统_ilzd 微信小程序

通过前面的功能分析可以将教师事务管理系统的功能分为管理员和学生、教师三个部分,系统的主要功能包括课程信息、学生签到、学生成绩等内容。任何用户只要进入网站不需登录也可浏览到的信息,后台管理是针对已登录的用户看到满意的教师事务管理系统而设计…

文心一言 VS 讯飞星火 VS chatgpt (205)-- 算法导论15.4 1题

一、求〈1,0,0,1,0,1,0,1〉和〈0,1,0,1,1,0,1,1,0〉的一个LCS。需要写代码的时候,请用…

C++ //练习 10.7 下面的程序是否有错误?如果有,请改正。

C Primer&#xff08;第5版&#xff09; 练习 10.7 练习 10.7 下面的程序是否有错误&#xff1f;如果有&#xff0c;请改正。 (a) vector<int>vec; list<int> lst; int i;while(cin>>i)lst.push_back(i);copy(lst.cbegin(), lst.cend(), vec.begin());(b) …

DDS笔记

1.DDS 直接数字式频率合成器&#xff08;Direct Digital Synthesizer,DDS&#xff09;是通过相位和幅值 的映射实现任意频率的正弦曲线样本的方法 系统时钟CLK频率为fclk&#xff0c;输出信号频率为fout&#xff0c;频率字输入K的位宽为N位。 相位累加器通常由一个N位加法器和…

Docker之自定义镜像上传阿里云

目录 一、Alpine制作jdk镜像 1. 下载镜像 2. 创建并编辑Dockerfile 3. 执行Dockerfile构建镜像 4. 测试 二、Alpine制作jre镜像 1. 下载jre 2. 上传gz压缩包&#xff0c;删除无用的文件&#xff0c;并重新压缩 3. 创建并编辑Dockerfile 4. 执行Dockerfile并构建镜像…

【电商干货】5分钟了解电商数据API测试完整流程,建议收藏!可获取免费测试key!

电商API是什么&#xff1f; API是application programming interface&#xff08;应用程序接口&#xff09;的简称&#xff0c;是一些预先定义的函数。目的是提供应用程序与开发人员基于某软件或硬件得以访问一组例程的能力&#xff0c;而又无需访问源码&#xff0c;或理解内部…

CentOS安装GUI图形界面

CentOS安装图形界面 CentOS minimal环境安装图形界面。 列出所有可用的Environment Groups yum group list yum groupinfo "GNOME Desktop"选择GNOME Desktop软件包组进行安装 yum groupinstall -y GNOME Desktop1 如果要通过GUI配置网络需要安装Server with GU…

删除有序数组中的重复项Ⅱ

问题 给你一个有序数组 nums &#xff0c;请你 原地 删除重复出现的元素&#xff0c;使得出现次数超过两次的元素只出现两次 &#xff0c;返回删除后数组的新长度。 不要使用额外的数组空间&#xff0c;你必须在 原地 修改输入数组 并在使用 O(1) 额外空间的条件下完成。 说明…

有哪些视频媒体?邀请视频媒体报道活动的好处

传媒如春雨&#xff0c;润物细无声&#xff0c;大家好&#xff0c;我是51媒体网胡老师。 视频媒体在当今的媒体生态中占据了重要的地位。以下是一些主要的视频媒体类型&#xff1a; 电视台&#xff1a;如中央电视台、各省级卫视台、地方电视台等&#xff0c;他们拥有专业的视…

vue2后台管理系统demo,包含增删查改、模糊搜索、分页

因一直敲小程序&#xff0c;vue不熟练&#xff0c;自己练手项目&#xff0c;就包含增删查改以及模糊搜索分页 一、页面简单但功能齐全 二、数据是mock模拟 三、启动步骤 1、 json-server --watch data.json 启动mock数据 2、npm i 下载依赖 3、npm run serve 四、github地址…

PSO-CNN-LSTM多输入时序预测|粒子群算法优化的卷积-长短期神经网络时序预测(Matlab)——附代码+数据

目录 一、程序及算法内容介绍&#xff1a; 基本内容&#xff1a; 亮点与优势&#xff1a; 二、实际运行效果&#xff1a; 三、算法介绍&#xff1a; 四、完整程序数据分享下载&#xff1a; 一、程序及算法内容介绍&#xff1a; 基本内容&#xff1a; 本代码基于Matlab平台…

Flutter(四):SingleChildScrollView、GridView

SingleChildScrollView、GridView 遇到的问题 以下代码会报错: class GridViewPage extends StatefulWidget {const GridViewPage({super.key});overrideState<GridViewPage> createState() > _GridViewPage(); }class _GridViewPage extends State<GridViewPage&g…

go并发模式之----阻塞/屏障模式

常见模式之一&#xff1a;阻塞/屏障模式 定义 顾名思义&#xff0c;就是阻塞等待所有goroutine&#xff0c;直到所有goroutine完成&#xff0c;聚合所有结果 使用场景 多个网络请求&#xff0c;聚合结果 大任务拆分成多个子任务&#xff0c;聚合结果 示例 package main ​…