热门标签 | HotTags
当前位置:  开发笔记 > 编程语言 > 正文

从原始文件创建swagger.json文件的混乱

如何解决《从原始文件创建swagger.json文件的混乱》经验,为你挑选了1个好方法。

我已经创建了一个原型文件,其中包含要生成的REST Web服务的所有必需消息和rpc函数。使用protoc-gen-swagger插件,我已经设法将该原型文件编译为swagger.json文件,并且看起来很不错,除了两件事,我似乎无法解决。

    swagger.json文件中的所有定义都有我原型文件包的名称的前缀。有办法摆脱这种情况吗?

    我的邮件的所有字段均为“可选”。没有明确指定它们,但没有指定它们是“必需的”,根据定义,这使它们成为可选的。Proto3不再支持必需/可选/重复,但是即使我使用Proto2并添加了这些关键字,它似乎也不会影响swagger.json输出。如何在proto文件中指定必填字段,以便protoc-gen-swagger将所需部分添加到json输出中?

这是一个非常基本的原始文件的示例:

webservice.proto

syntax = "proto3";
package mypackage;
import "google/api/annotations.proto";

service MyAPIWebService {
    rpc MyFunc (MyMessage) returns (MyResponse) {
        option (google.api.http) = {
            post: "/message"
            body: "*"
        };
    }
}

message MyMessage {
    string MyString = 1;
    int64 MyInt = 2;
}

message MyResponse {
    string MyString = 1;
}

然后使用以下命令将其编译为swagger.json文件:

协议-I。-I“%GOPATH%/ src / github.com / grpc-ecosystem / grpc-gateway / third_party / googleapis” --swagger_out = logtostderr = true :。webservice.proto

产生以下输出: webservice.swagger.json

{
  "swagger": "2.0",
  "info": {
    "title": "webservice.proto",
    "version": "version not set"
  },
  "schemes": [
    "http",
    "https"
  ],
  "consumes": [
    "application/json"
  ],
  "produces": [
    "application/json"
  ],
  "paths": {
    "/message": {
      "post": {
        "operationId": "MyFunc",
        "responses": {
          "200": {
            "description": "",
            "schema": {
              "$ref": "#/definitions/mypackageMyResponse"
            }
          }
        },
        "parameters": [
          {
            "name": "body",
            "in": "body",
            "required": true,
            "schema": {
              "$ref": "#/definitions/mypackageMyMessage"
            }
          }
        ],
        "tags": [
          "MyAPIWebService"
        ]
      }
    }
  },
  "definitions": {
    "mypackageMyMessage": {
      "type": "object",
      "properties": {
        "MyString": {
          "type": "string"
        },
        "MyInt": {
          "type": "string",
          "format": "int64"
        }
      }
    },
    "mypackageMyResponse": {
      "type": "object",
      "properties": {
        "MyString": {
          "type": "string"
        }
      }
    }
  }
}

    请注意如何MyMessageMyResponse在原文件转化为mypackageMyMessagemypackageMyResponse在JSON文件。

    例如,如果我需要MyMessage:MyString,则必须在“ definitions”的“ mypackageMyMessage”部分中添加一个部分,如下所示:

    “必填”:[“ MyString”]

我绝对希望有一种方法可以在原型文件中指定它,这样我就不必在每次编译时都手动编辑json文件。



1> Jodie Putrin..:

在这里张贴给遇到此问题的任何人,以寻找相同的信息。


UPDATE 这是代码定义定义创建方式的地方。

https://github.com/grpc-ecosystem/grpc-gateway/blob/master/protoc-gen-swagger/genswagger/template.go#L859


这是您可以根据需要表示字段的方式-在消息定义中添加自定义选项:

message MyMessage {
    option (grpc.gateway.protoc_gen_swagger.options.openapiv2_schema) = {
        json_schema: {
            title: "MyMessage"
            description: "Does something neat"
            required: ["MyString"]
        }
    };

    string MyString = 1;
    int64 MyInt = 2;
}


推荐阅读
  • Spring Cloud Config 使用 Vault 作为配置存储
    本文探讨了如何在Spring Cloud Config中集成HashiCorp Vault作为配置存储解决方案,基于Spring Cloud Hoxton.RELEASE及Spring Boot 2.2.1.RELEASE版本。文章还提供了详细的配置示例和实践建议。 ... [详细]
  • Java 架构:深入理解 JDK 动态代理机制
    代理模式是 Java 中常用的设计模式之一,其核心在于代理类与委托类共享相同的接口。代理类主要用于为委托类提供预处理、过滤、转发及后处理等功能,以增强或改变原有功能的行为。 ... [详细]
  • 详解 | 日志系统ViseLog的基本使用与功能
    本文详细介绍了日志系统ViseLog的使用方法及其核心功能,旨在帮助开发者更好地理解和利用这一工具,提高开发效率。 ... [详细]
  • golang基础-protobuf使用,Go语言社区,Golang程序员人脉社 ... [详细]
  • protobuf 安装_protobuf详解
    protobuf详解一、什么是protobufprotobuf全称GoogleProtocolBuffers,是google开发的的一套用于数据存储,网络通信时用于协议编解码的工具 ... [详细]
  • gRPC框架学习:2、ProtocolBuffers学习文章目录gRPC框架学习:2、ProtocolBuffers学习1.前言2.定义消息类型(1). ... [详细]
  • 微信小程序中实现位置获取的全面指南
    本文详细介绍了如何在微信小程序中实现地理位置的获取,包括通过微信官方API和腾讯地图API两种方式。文中不仅涵盖了必要的准备工作,如申请开发者密钥、下载并配置SDK等,还提供了处理用户授权及位置信息获取的具体代码示例。 ... [详细]
  • 本文详细介绍了 Kubernetes 集群管理工具 kubectl 的基本使用方法,涵盖了一系列常用的命令及其应用场景,旨在帮助初学者快速掌握 kubectl 的基本操作。 ... [详细]
  • 在Linux系统上构建Web服务器的详细步骤
    本文详细介绍了如何在Linux系统上搭建Web服务器的过程,包括安装Apache、PHP和MySQL等关键组件,以及遇到的一些常见问题及其解决方案。 ... [详细]
  • 在学习Python的map函数过程中,由于误将一个字典类型的变量命名为map,导致程序运行时报出了 'dict' object is not callable 的错误。 ... [详细]
  • 本文探讨了浏览器的同源策略限制及其对 AJAX 请求的影响,并详细介绍了如何在 Spring Boot 应用中优雅地处理跨域请求,特别是当请求包含自定义 Headers 时的解决方案。 ... [详细]
  • 本文档详细介绍了Scrapy框架中的信号系统,包括如何利用信号来增强爬虫的功能性和灵活性,以及各个内置信号的具体用途和参数。 ... [详细]
  • 本文档详细介绍了在 Kubernetes 集群中部署 ETCD 数据库的过程,包括实验环境的准备、ETCD 证书的生成及配置、以及集群的启动与健康检查等关键步骤。 ... [详细]
  • 微信小程序实现拍照与图片上传功能
    本文介绍如何在微信小程序中实现用户通过拍照或从相册选择图片,并将图片上传至服务器的功能,包括调用相关API和处理上传响应。 ... [详细]
  • 学习gRPC1.工作原理是什么
    什么是gRPCgRPC已经成为实现需要大规模快速运行的分布式软件系统的一项重要技术。简而言之,gRPC是一个API框架,它允许一个程序在互联网上的一个位置传递数据到另一个位置的另一 ... [详细]
author-avatar
手机用户2502923903
这个家伙很懒,什么也没留下!
PHP1.CN | 中国最专业的PHP中文社区 | DevBox开发工具箱 | json解析格式化 |PHP资讯 | PHP教程 | 数据库技术 | 服务器技术 | 前端开发技术 | PHP框架 | 开发工具 | 在线工具
Copyright © 1998 - 2020 PHP1.CN. All Rights Reserved | 京公网安备 11010802041100号 | 京ICP备19059560号-4 | PHP1.CN 第一PHP社区 版权所有