我已经创建了一个proto文件,其中包含我打算生成的REST Web服务的所有必要消息和rpc函数。使用proc-gen-swagger插件,我设法将该proto文件编译成一个swagger.json文件,一切似乎都很好,除了两件事,我似乎无法解决。
>
swagger.json文件中的所有定义都以我的原始文件包的名称为前缀。有没有办法摆脱这个?
我的消息的所有字段都是“可选的”。它们没有被明确指定为这样,但它们没有被指定为“必需”,根据定义,这使得它们是可选的。Proto3不再支持required/optional/repeating,但即使我使用Proto2并添加这些关键字,它似乎也不会影响招摇过市。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;
}
然后,这被编译成一种炫耀。带有以下命令的json文件:
协议-I.-I“%GOPATH%/src/github.com/grpc生态系统/grpc网关/第三方/googleapis”--swagger\u out=logtostderr=true:。webservice。原型
产生以下输出: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"
}
}
}
}
}
>
注意proto文件中的MyMessage
和MyACK
如何转换为json文件中的mypack ageMyMessage
和mypack ageMyACK
。
例如,如果我希望需要MyMessage: MyString,我必须在“定义”中的“mypack ageMyMessage”部分中添加一个部分,如下所示:
“必需”:[“MyString”]
如果有一种方法可以在proto文件中指定,那么我肯定会更喜欢,这样我就不必每次编译json文件时都手动编辑它。
您的前缀mypackage是中命名空间的一部分。原型文件。它来自以下行:package-mypackage
删除此行并重新生成json
在这里发帖给任何遇到这个问题寻找相同信息的人。
更新这是代码定义如何创建定义的地方。
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;
}
我很难让swashbuckle.aspnetcore(1.0.0)包生成任何输出。我读到swagger.json文件应该写到'~/swagger/docs/v1'。然而,我没有得到任何输出。 我从一个全新的ASP.NET核心API项目开始。我应该提到这是ASP.NET Core2。API可以工作,我可以从values控制器检索值。 我的启动类的配置与本文描述的完全相同(GitHub上的swashb
问题内容: 我需要一些帮助来创建文件 我在过去的几个小时中尝试使用RandomAccessFile并尝试实现下一个逻辑: 获取文件对象 创建一个具有相似名称的临时文件(我如何确保将临时文件与给定的原始文件放置在同一位置?) 写入此文件 用临时文件替换磁盘上的原始文件(应使用原始文件名)。 我正在寻找一个简单的代码,谁喜欢使用RandomAccessFile,我只是不正确地解决这几个步骤。 编辑:好
问题内容: 我是Scala的新手,也不了解Java。我想从一个简单的Scala文件中创建一个jar文件。所以我有了我的HelloWorld.scala,生成了一个HelloWorld.jar。 Manifest.mf: 在控制台中,我运行: 问题答案: 示例目录结构: HelloWorld.scala: MANIFEST.MF: build.bat: 为了成功使用 -jar 开关,您需要在 MET
在我的项目中,我正在上传一个文件。上传时,我将其原始文件名和扩展名保存在数据库中,并将该文件与一些一起保存在服务器上,生成的GUID也与文件名和扩展名一起存储在数据库中。 比如-- -用于上载的文件名为Questions.docx -则orignalFileName将为“问题” -文件扩展名将为“.docx” -上传文件,文件名为“0C1B96D3-AF54-40D1-814D-B863B7528
问题内容: 我正在尝试在Android Studio的res \ raw文件中保留一个.txt文件,并读取/解析该文件。我在“ res”目录(未创建)中创建的名为“ raw”的文件夹中有一个文件“ my_file.txt”。 我认为我的主要问题是:创建File对象(与Scanner对象一起使用)时,应该为文本文件传递什么路径? 这是我的代码: 问题答案: 认为您正在寻找符合以下条件的东西 其中ct
问题内容: 因此,有很多关于如何使用puttyGen将PEM转换为PPK的教程。但是我的问题是我的Windows计算机只有唯一的PEM副本,我将其转换为PPK并删除了它。现在,我需要弄清楚如何将PPK转换为PEM,以便我的Mac可以通过SSH进入服务器。我仍然可以访问服务器,因此,如果需要的话,我也可以创建一个新密钥,有人知道如何将PPK转换为PEM吗? 问题答案: 安装 PuttyTools 生