热门标签 | 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;
}


推荐阅读
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社区 版权所有