Feature: Support string format for server variables (#3952)

This commit is contained in:
Timothee Guerin 2021-03-04 16:54:29 -08:00 коммит произвёл GitHub
Родитель b9770b81f0
Коммит e61eee0c3b
Не найден ключ, соответствующий данной подписи
Идентификатор ключа GPG: 4AEE18F83AFDEB23
7 изменённых файлов: 205 добавлений и 7 удалений

Просмотреть файл

@ -0,0 +1,11 @@
{
"changes": [
{
"packageName": "@autorest/modelerfour",
"comment": "Allow server variables to provide a string format(url, uri, etc.)",
"type": "patch"
}
],
"packageName": "@autorest/modelerfour",
"email": "tiguerin@microsoft.com"
}

Просмотреть файл

@ -0,0 +1,11 @@
{
"changes": [
{
"packageName": "@azure-tools/oai2-to-oai3",
"comment": "When converting x-ms-parameterized-host parameters to server variables keep format as x-format",
"type": "patch"
}
],
"packageName": "@azure-tools/oai2-to-oai3",
"email": "tiguerin@microsoft.com"
}

Просмотреть файл

@ -1657,13 +1657,7 @@ export class ModelerFour {
// scenario 3 : single parameterized value
for (const { key: variableName, value: variable } of items(server.variables).where((each) => !!each.key)) {
const sch = variable.enum
? this.processChoiceSchema(variableName, <OpenAPI.Schema>{
type: "string",
enum: variable.enum,
description: variable.description || `${variableName} - server parameter`,
})
: this.stringSchema;
const sch = this.getServerVariableSchema(variableName, variable);
const clientdefault = variable.default ? variable.default : undefined;
@ -1768,6 +1762,23 @@ export class ModelerFour {
return baseUri;
}
private getServerVariableSchema(variableName: string, variable: OpenAPI.ServerVariable) {
if (variable.enum) {
return this.processChoiceSchema(variableName, <OpenAPI.Schema>{
type: "string",
enum: variable.enum,
description: variable.description || `${variableName} - server parameter`,
});
}
if (variable["x-format"]) {
return this.processSchema(`${variableName}`, {
type: JsonType.String,
format: variable["x-format"],
});
}
return this.stringSchema;
}
processApiVersionParameterForProfile() {
throw new Error("Profile Support for API Verison Parameters not implemented.");
}

Просмотреть файл

@ -75,6 +75,7 @@ export class Oai2ToOai3 {
case "in":
case "required":
case "type":
case "format":
case "name":
// turn these into x-* properties
param[`x-${key}`] = originalParameter[key];

Просмотреть файл

@ -0,0 +1,103 @@
{
"servers": [
{
"url": "{UriParam}{EnumParam}{StringParam}",
"variables": {
"StringParam": {
"x-name": "StringParam",
"x-in": "path",
"description": "Parameter that is a generic string",
"x-required": true,
"x-type": "string",
"default": "https://api.cognitive.microsoft.com",
"x-ms-parameter-location": "client",
"x-ms-original": {
"$ref": "#/components/parameters/StringParam"
}
},
"UrlParam": {
"x-name": "UrlParam",
"x-in": "path",
"description": "Parameter that is formatted as url",
"x-required": true,
"x-type": "string",
"default": "https://api.cognitive.microsoft.com",
"x-ms-parameter-location": "client",
"x-ms-original": {
"$ref": "#/components/parameters/UrlParam"
}
},
"EnumParam": {
"x-name": "EnumParam",
"x-in": "path",
"description": "Shared endpoint param.",
"x-required": true,
"x-type": "string",
"enum": [
"v1",
"v2"
],
"default": "v1",
"x-ms-parameter-location": "client",
"x-ms-original": {
"$ref": "#/components/parameters/EnumParam"
}
}
}
}
],
"$schema": "https://github.com/OAI/OpenAPI-Specification/blob/master/schemas/v2.0/schema.json",
"openapi": "3.0.0",
"info": {
"x-ms-metadata": {
"apiVersions": [
"test-0.1"
]
},
"title": "Test",
"description": "test",
"version": "test-0.1"
},
"paths": {},
"components": {
"parameters": {
"StringParam": {
"name": "StringParam",
"in": "path",
"description": "Parameter that is a generic string",
"required": true,
"x-ms-parameter-location": "client",
"schema": {
"default": "https://api.cognitive.microsoft.com",
"type": "string"
}
},
"UrlParam": {
"name": "UrlParam",
"in": "path",
"description": "Parameter that is formatted as url",
"required": true,
"x-ms-parameter-location": "client",
"schema": {
"default": "https://api.cognitive.microsoft.com",
"type": "string"
}
},
"EnumParam": {
"name": "EnumParam",
"in": "path",
"description": "Shared endpoint param.",
"required": true,
"x-ms-parameter-location": "client",
"schema": {
"enum": [
"v1",
"v2"
],
"default": "v1",
"type": "string"
}
}
}
}
}

Просмотреть файл

@ -0,0 +1,56 @@
{
"$schema": "https://github.com/OAI/OpenAPI-Specification/blob/master/schemas/v2.0/schema.json",
"swagger": "2.0",
"info": {
"x-ms-metadata": {
"apiVersions": ["test-0.1"]
},
"title": "Test",
"description": "test",
"version": "test-0.1"
},
"x-ms-parameterized-host": {
"hostTemplate": "{UriParam}{EnumParam}{StringParam}",
"useSchemePrefix": false,
"parameters": [
{
"$ref": "#/parameters/StringParam"
},
{
"$ref": "#/parameters/UrlParam"
},
{
"$ref": "#/parameters/EnumParam"
}
]
},
"paths": {},
"definitions": {},
"parameters": {
"StringParam": {
"name": "StringParam",
"in": "path",
"description": "Parameter that is a generic string",
"required": true,
"type": "string",
"default": "https://api.cognitive.microsoft.com"
},
"UrlParam": {
"name": "UrlParam",
"in": "path",
"description": "Parameter that is formatted as url",
"required": true,
"type": "string",
"default": "https://api.cognitive.microsoft.com"
},
"EnumParam": {
"name": "EnumParam",
"in": "path",
"description": "Shared endpoint param.",
"required": true,
"type": "string",
"enum": ["v1", "v2"],
"default": "v1"
}
}
}

Просмотреть файл

@ -49,4 +49,9 @@ describe("Scenario testings", () => {
// The expected result is the parmaeter to be included/expanded in the OpenAPI3 server property.
await expectInputsMatchSnapshots("cross-file-parameterized-host-refs", ["swagger.json", "other.json"]);
});
it("Convert parameterized host parameters to server variables", async () => {
// The expected result is the parmaeter to be included/expanded in the OpenAPI3 server property.
await expectInputsMatchSnapshots("parameterized-host-parameters", ["swagger.json"]);
});
});