From 919e1db5cbd4d9607aa6acd3020b173977462284 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Cl=C3=A9ment=20Denis?= Date: Mon, 16 Sep 2019 19:41:48 +0200 Subject: [PATCH 1/3] Allow to configure the template for operationIds and tags Update the default templates to be easier to parse --- .../server/spi/tools/GetOpenApiDocAction.java | 24 +++++ .../spi/tools/GetOpenApiDocActionTest.java | 9 ++ .../server/spi/swagger/SwaggerGenerator.java | 100 ++++++++++++++---- 3 files changed, 113 insertions(+), 20 deletions(-) diff --git a/endpoints-framework-tools/src/main/java/com/google/api/server/spi/tools/GetOpenApiDocAction.java b/endpoints-framework-tools/src/main/java/com/google/api/server/spi/tools/GetOpenApiDocAction.java index d34b2f15..819881b6 100644 --- a/endpoints-framework-tools/src/main/java/com/google/api/server/spi/tools/GetOpenApiDocAction.java +++ b/endpoints-framework-tools/src/main/java/com/google/api/server/spi/tools/GetOpenApiDocAction.java @@ -56,6 +56,8 @@ public class GetOpenApiDocAction extends EndpointsToolAction { private Option titleOption = makeTitleOption(); private Option descriptionOption = makeDescriptionOption(); private Option apiNameOption = makeApiNameOption(); + private Option tagTemplateOption = makeTagTemplateOption(); + private Option operationIdTemplateOption = makeOperationIdTemplateOption(); private Option addGoogleJsonErrorAsDefaultResponseOption = makeVisibleFlagOption( "addGoogleJsonErrorAsDefaultResponse", "Add GoogleJsonError as default response" ); @@ -78,6 +80,7 @@ protected GetOpenApiDocAction(String alias, boolean displayHelp) { setOptions( Arrays.asList(classPathOption, outputOption, warOption, hostnameOption, basePathOption, titleOption, descriptionOption, apiNameOption, + tagTemplateOption, operationIdTemplateOption, addGoogleJsonErrorAsDefaultResponseOption, addErrorCodesForServiceExceptionsOption, extractCommonParametersAsRefsOption, combineCommonParametersInSamePathOption)); setShortDescription("Generates an OpenAPI document"); @@ -109,6 +112,22 @@ private static Option makeApiNameOption() { "API_NAME", "Sets the api name. Endpoints Management will use hostname if not defined."); } + + private static Option makeTagTemplateOption() { + return EndpointsOption.makeVisibleNonFlagOption( + "tt", + "tagTemplate", + "TAG_TEMPLATE", + "Sets the tag template name. Defaults to " + SwaggerContext.DEFAULT_TAG_TEMPLATE + "."); + } + + private static Option makeOperationIdTemplateOption() { + return EndpointsOption.makeVisibleNonFlagOption( + "oit", + "operationIdTemplate", + "OPERATION_ID_TEMPLATE", + "Sets the operation id template. Defaults to " + SwaggerContext.DEFAULT_OPERATION_ID_TEMPLATE + "."); + } private static boolean getBooleanOptionValue(Option option) { return option.getValue() != null; @@ -132,6 +151,8 @@ public boolean execute() throws ClassNotFoundException, IOException, ApiConfigEx getOptionOrDefault(titleOption, null), getOptionOrDefault(descriptionOption, null), getOptionOrDefault(apiNameOption, null), + getOptionOrDefault(tagTemplateOption, SwaggerContext.DEFAULT_TAG_TEMPLATE), + getOptionOrDefault(operationIdTemplateOption, SwaggerContext.DEFAULT_OPERATION_ID_TEMPLATE), getBooleanOptionValue(addGoogleJsonErrorAsDefaultResponseOption), getBooleanOptionValue(addErrorCodesForServiceExceptionsOption), getBooleanOptionValue(extractCommonParametersAsRefsOption), @@ -154,6 +175,7 @@ public boolean execute() throws ClassNotFoundException, IOException, ApiConfigEx public String genOpenApiDoc( URL[] classPath, String outputFilePath, String hostname, String basePath, String title, String description, String apiName, + String tagTemplate, String operationIdTemplate, boolean addGoogleJsonErrorAsDefaultResponse, boolean addErrorCodesForServiceExceptionsOption, boolean extractCommonParametersAsRefsOption, boolean combineCommonParametersInSamePathOption, List serviceClassNames, boolean outputToDisk) @@ -182,6 +204,8 @@ public String genOpenApiDoc( .setTitle(title) .setDescription(description) .setApiName(apiName) + .setTagTemplate(tagTemplate) + .setOperationIdTemplate(operationIdTemplate) .setAddGoogleJsonErrorAsDefaultResponse(addGoogleJsonErrorAsDefaultResponse) .setAddErrorCodesForServiceExceptions(addErrorCodesForServiceExceptionsOption) .setExtractCommonParametersAsRefs(extractCommonParametersAsRefsOption) diff --git a/endpoints-framework-tools/src/test/java/com/google/api/server/spi/tools/GetOpenApiDocActionTest.java b/endpoints-framework-tools/src/test/java/com/google/api/server/spi/tools/GetOpenApiDocActionTest.java index 918638e8..f4692c15 100644 --- a/endpoints-framework-tools/src/test/java/com/google/api/server/spi/tools/GetOpenApiDocActionTest.java +++ b/endpoints-framework-tools/src/test/java/com/google/api/server/spi/tools/GetOpenApiDocActionTest.java @@ -20,6 +20,7 @@ import static org.junit.Assert.assertFalse; import static org.junit.Assert.assertTrue; +import com.google.api.server.spi.swagger.SwaggerGenerator.SwaggerContext; import com.google.appengine.tools.util.Option; import com.google.common.collect.Lists; @@ -44,6 +45,8 @@ public class GetOpenApiDocActionTest extends EndpointsToolTest { private String outputFilePath; private String basePath; private List serviceClassNames; + private String tagTemplate; + private String operationIdTemplate; private boolean outputToDisk; private boolean addGoogleJsonErrorAsDefaultResponse; private boolean addErrorCodesForServiceExceptionsOption; @@ -56,6 +59,7 @@ protected void addTestAction(Map actions) { public String genOpenApiDoc( URL[] classPath, String outputFilePath, String hostname, String basePath, String title, String description, String apiName, + String tagTemplate, String operationIdTemplate, boolean addGoogleJsonErrorAsDefaultResponse, boolean addErrorCodesForServiceExceptionsOption, boolean extractCommonParametersAsRefsOption, @@ -65,6 +69,8 @@ public String genOpenApiDoc( GetOpenApiDocActionTest.this.outputFilePath = outputFilePath; GetOpenApiDocActionTest.this.basePath = basePath; GetOpenApiDocActionTest.this.serviceClassNames = serviceClassNames; + GetOpenApiDocActionTest.this.tagTemplate = tagTemplate; + GetOpenApiDocActionTest.this.operationIdTemplate = operationIdTemplate; GetOpenApiDocActionTest.this.outputToDisk = outputToDisk; GetOpenApiDocActionTest.this.addGoogleJsonErrorAsDefaultResponse = addGoogleJsonErrorAsDefaultResponse; @@ -97,6 +103,7 @@ public void testGetOpenApiDoc() throws Exception { new String[]{GetOpenApiDocAction.NAME, option(EndpointsToolAction.OPTION_CLASS_PATH_SHORT), "classPath", option(EndpointsToolAction.OPTION_OUTPUT_DIR_SHORT), "outputDir", option("addGoogleJsonErrorAsDefaultResponse", false), + option("tt"), "myCustomTemplate", "MyService", "MyService2"}); assertFalse(usagePrinted); @@ -110,6 +117,8 @@ public void testGetOpenApiDoc() throws Exception { assertEquals(EndpointsToolAction.DEFAULT_BASE_PATH, basePath); assertTrue(addGoogleJsonErrorAsDefaultResponse); assertFalse(addErrorCodesForServiceExceptionsOption); + assertEquals("myCustomTemplate", tagTemplate); + assertEquals(SwaggerContext.DEFAULT_OPERATION_ID_TEMPLATE, operationIdTemplate); assertStringsEqual(Arrays.asList("MyService", "MyService2"), serviceClassNames); assertTrue(outputToDisk); } diff --git a/endpoints-framework/src/main/java/com/google/api/server/spi/swagger/SwaggerGenerator.java b/endpoints-framework/src/main/java/com/google/api/server/spi/swagger/SwaggerGenerator.java index d0d1fac4..4c385178 100644 --- a/endpoints-framework/src/main/java/com/google/api/server/spi/swagger/SwaggerGenerator.java +++ b/endpoints-framework/src/main/java/com/google/api/server/spi/swagger/SwaggerGenerator.java @@ -113,6 +113,7 @@ import java.util.TreeMap; import java.util.stream.Collectors; import java.util.stream.Stream; +import org.apache.commons.lang3.text.StrSubstitutor; /** * Generates a {@link Swagger} object representing a set of {@link ApiConfig} objects. @@ -136,10 +137,7 @@ public class SwaggerGenerator { private static final String METRIC_KIND = "GAUGE"; private static final String METRICS_KEY = "metrics"; private static final String QUOTA_KEY = "quota"; - - private static final Converter CONVERTER = - CaseFormat.LOWER_CAMEL.converterTo(CaseFormat.UPPER_CAMEL); - private static final Joiner JOINER = Joiner.on("").skipNulls(); + private static final ImmutableMap TYPE_TO_STRING_MAP = ImmutableMap.builder() .put(String.class, "string") @@ -402,7 +400,7 @@ private void writeApi(ApiKey apiKey, ImmutableList apiConfi addNonConflictingApiLimitMetric(genCtx.limitMetrics, limitMetric); } writeApiClass(apiConfig, swagger, context, genCtx); - swagger.tag(getTag(apiConfig)); + swagger.tag(getTag(apiConfig, context)); } List schemas = genCtx.schemata.getAllSchemaForApi(apiKey); for (Schema schema : schemas) { @@ -426,8 +424,8 @@ private boolean isInlinedModel(Schema schema) { return INLINED_MODEL_NAMES.contains(schema.name()); } - private Tag getTag(ApiConfig apiConfig) { - Tag tag = new Tag().name(getTagName(apiConfig)); + private Tag getTag(ApiConfig apiConfig, SwaggerContext context) { + Tag tag = new Tag().name(getTagName(apiConfig, context)); String description = apiConfig.getDescription(); if (!Strings.isEmptyOrWhitespace(description)) { tag.description(description); @@ -466,8 +464,8 @@ private void writeApiMethod(ApiMethodConfig methodConfig, ApiConfig apiConfig, S SwaggerContext context, GenerationContext genCtx) throws ApiConfigException { Path path = getOrCreatePath(swagger, methodConfig); Operation operation = new Operation() - .operationId(getOperationId(apiConfig, methodConfig)) - .tags(Collections.singletonList(getTagName(apiConfig))) + .operationId(getOperationId(apiConfig, methodConfig, context)) + .tags(Collections.singletonList(getTagName(apiConfig, context))) .description(methodConfig.getDescription()) .deprecated(methodConfig.isDeprecated() ? true : null); Collection pathParameters = methodConfig.getPathParameters(); @@ -729,23 +727,16 @@ private MapProperty inlineMapProperty(SchemaReference schemaReference) { return new MapProperty(convertToSwaggerProperty(mapField)); } - private static String getTagName(ApiConfig apiConfig) { - String tag = apiConfig.getName() + ":" + apiConfig.getVersion(); - String resource = apiConfig.getApiClassConfig().getResource(); - if (!Strings.isEmptyOrWhitespace(resource)) { - tag += "." + CONVERTER.convert(resource); - } - return tag; + private static String getTagName(ApiConfig apiConfig, SwaggerContext context) { + return NamingContext.build(apiConfig, null).resolve(context.tagTemplate); } private String getFullRef(RefType type, String name) { return type.getInternalPrefix() + UrlEscapers.urlFormParameterEscaper().escape(name); } - private static String getOperationId(ApiConfig apiConfig, ApiMethodConfig methodConfig) { - return FluentIterable.of(apiConfig.getName(), apiConfig.getVersion(), - apiConfig.getApiClassConfig().getResource(), methodConfig.getEndpointMethodName()) - .transform(CONVERTER).join(JOINER); + private static String getOperationId(ApiConfig apiConfig, ApiMethodConfig methodConfig, SwaggerContext context) { + return NamingContext.build(apiConfig, methodConfig).resolve(context.operationIdTemplate); } private static Property getSwaggerArrayProperty(TypeToken typeToken) { @@ -857,6 +848,9 @@ private static void checkExistingDefinition(String defName, OAuth2Definition new } public static class SwaggerContext { + public static final String DEFAULT_TAG_TEMPLATE = "${apiName}:${apiVersion}${.Resource}"; + public static final String DEFAULT_OPERATION_ID_TEMPLATE = "${apiName}:${apiVersion}${.Resource}${.method}"; + private Scheme scheme = Scheme.HTTPS; private String hostname = "myapi.appspot.com"; private String basePath = "/_ah/api"; @@ -864,6 +858,8 @@ public static class SwaggerContext { private String title; private String description; private String apiName; + private String tagTemplate = DEFAULT_TAG_TEMPLATE; + private String operationIdTemplate = DEFAULT_OPERATION_ID_TEMPLATE; private boolean addGoogleJsonErrorAsDefaultResponse; private boolean addErrorCodesForServiceExceptions; private boolean extractCommonParametersAsRefs; @@ -904,6 +900,16 @@ public SwaggerContext setApiName(String apiName) { return this; } + public SwaggerContext setTagTemplate(String tagTemplate) { + this.tagTemplate = tagTemplate; + return this; + } + + public SwaggerContext setOperationIdTemplate(String operationIdTemplate) { + this.operationIdTemplate = operationIdTemplate; + return this; + } + public SwaggerContext setAddGoogleJsonErrorAsDefaultResponse(boolean addGoogleJsonErrorAsDefaultResponse) { this.addGoogleJsonErrorAsDefaultResponse = addGoogleJsonErrorAsDefaultResponse; return this; @@ -930,4 +936,58 @@ private static class GenerationContext { private ApiConfigValidator validator; private SchemaRepository schemata; } + + /** + * A template mechanism based on Apache Commons lang's StrSubstitutor (placeholder syntax is "${var}). + * + * The following variables are available on API and API method contexts: + * - apiName + * - apiVersion + * - resource (might be null for API or method context) + * - method (is null when working in a method context) + * + * Each variable comes with following variants: + * - Uppercased variants (if "${apiName}" is "myApi", "${ApiName}" will be "MyAPi" + * - Prefixed with "-",":" or "." (only chars that are safe for use in Swagger tags for Endpoints Portal) + * - Prefixed variants should be used for nullable vars: "${.resource}" will be empty if the resource var is null, but will be ".myResource" if resource is "myResource" + * - Prefixed variants also come in uppercased flavors ("${.Resource}" will be ".MyResource" if resource var is "myResource") + */ + private static class NamingContext { + + private static final Converter UPPER + = CaseFormat.LOWER_CAMEL.converterTo(CaseFormat.UPPER_CAMEL); + private final Map values = new HashMap<>(); + private final String prefixes; + + private static NamingContext build(ApiConfig apiConfig, ApiMethodConfig methodConfig) { + String resource = apiConfig.getApiClassConfig().getResource(); + String method = methodConfig != null ? methodConfig.getEndpointMethodName() : null; + return new NamingContext("-:.") + .put("apiName", apiConfig.getName()) + .put("apiVersion", apiConfig.getVersion()) + .put("resource", resource) + .put("method", method); + } + + NamingContext(String prefixes) { + this.prefixes = prefixes; + } + + NamingContext put(String key, String value) { + value = com.google.common.base.Strings.nullToEmpty(value); + values.put(key, value); + values.put(UPPER.convert(key), UPPER.convert(value)); + for (char c : prefixes.toCharArray()) { + values.put(c + key, value.isEmpty() ? "" : c + value); + values.put(c + UPPER.convert(key), value.isEmpty() ? "" : c + UPPER.convert(value)); + } + return this; + } + + String resolve(String template) { + return new StrSubstitutor(values).replace(template); + } + + } + } From 985b51cfe6a717991e8e08fdd63fc7089bbfa095 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Cl=C3=A9ment=20Denis?= Date: Mon, 16 Sep 2019 19:54:19 +0200 Subject: [PATCH 2/3] Update tests for new operationId naming convention --- .../spi/swagger/SwaggerGeneratorTest.java | 11 + .../absolute_common_path_endpoint.swagger | 4 +- .../swagger/absolute_path_endpoint.swagger | 6 +- .../api/server/spi/swagger/api_keys.swagger | 6 +- .../server/spi/swagger/array_endpoint.swagger | 44 +-- .../server/spi/swagger/enum_endpoint.swagger | 2 +- .../spi/swagger/error_codes_all.swagger | 12 +- .../error_codes_default_response.swagger | 10 +- .../error_codes_service_exceptions.swagger | 10 +- .../server/spi/swagger/foo_endpoint.swagger | 12 +- .../spi/swagger/foo_endpoint_api_name.swagger | 12 +- .../foo_endpoint_combine_all_params.swagger | 18 +- ..._endpoint_combine_params_same_path.swagger | 18 +- .../foo_endpoint_custom_templates.swagger | 307 ++++++++++++++++++ .../foo_endpoint_default_context.swagger | 12 +- .../foo_endpoint_extract_param_refs.swagger | 18 +- .../foo_with_description_endpoint.swagger | 12 +- .../server/spi/swagger/google_auth.swagger | 6 +- .../swagger/limit_metrics_endpoint.swagger | 8 +- .../server/spi/swagger/map_endpoint.swagger | 36 +- .../spi/swagger/map_endpoint_legacy.swagger | 36 +- .../swagger/map_endpoint_with_array.swagger | 36 +- .../swagger/multi_resource_endpoint.swagger | 6 +- .../swagger/multi_version_endpoint.swagger | 4 +- .../spi/swagger/multiple_scopes.swagger | 16 +- .../required_parameters_endpoint.swagger | 2 +- .../server/spi/swagger/special_chars.swagger | 4 +- .../spi/swagger/third_party_auth.swagger | 4 +- 28 files changed, 495 insertions(+), 177 deletions(-) create mode 100644 endpoints-framework/src/test/resources/com/google/api/server/spi/swagger/foo_endpoint_custom_templates.swagger diff --git a/endpoints-framework/src/test/java/com/google/api/server/spi/swagger/SwaggerGeneratorTest.java b/endpoints-framework/src/test/java/com/google/api/server/spi/swagger/SwaggerGeneratorTest.java index e60f77d8..44659bd1 100644 --- a/endpoints-framework/src/test/java/com/google/api/server/spi/swagger/SwaggerGeneratorTest.java +++ b/endpoints-framework/src/test/java/com/google/api/server/spi/swagger/SwaggerGeneratorTest.java @@ -98,6 +98,17 @@ public void testWriteSwagger_FooEndpoint() throws Exception { Swagger expected = readExpectedAsSwagger("foo_endpoint.swagger"); checkSwagger(expected, swagger); } + + @Test + public void testWriteSwagger_FooEndpointCustomTemplates() throws Exception { + ApiConfig config = configLoader.loadConfiguration(ServiceContext.create(), FooEndpoint.class); + Swagger swagger = generator.writeSwagger(ImmutableList.of(config), new SwaggerContext() + .setTagTemplate("${ApiName}${ApiVersion}") + .setOperationIdTemplate("${apiName}-${apiVersion}-${method}") + ); + Swagger expected = readExpectedAsSwagger("foo_endpoint_custom_templates.swagger"); + checkSwagger(expected, swagger); + } @Test public void testWriteSwagger_FooEndpointParameterCombineParamSamePath() throws Exception { diff --git a/endpoints-framework/src/test/resources/com/google/api/server/spi/swagger/absolute_common_path_endpoint.swagger b/endpoints-framework/src/test/resources/com/google/api/server/spi/swagger/absolute_common_path_endpoint.swagger index 25eb960c..f437f30c 100644 --- a/endpoints-framework/src/test/resources/com/google/api/server/spi/swagger/absolute_common_path_endpoint.swagger +++ b/endpoints-framework/src/test/resources/com/google/api/server/spi/swagger/absolute_common_path_endpoint.swagger @@ -26,7 +26,7 @@ "tags": [ "absolutepath:v1" ], - "operationId": "AbsolutepathV1AbsolutePath", + "operationId": "absolutepath:v1.absolutePath", "responses": { "204": { "description": "A successful response" @@ -39,7 +39,7 @@ "tags": [ "absolutepath:v1" ], - "operationId": "AbsolutepathV1CreateFoo", + "operationId": "absolutepath:v1.createFoo", "responses": { "200": { "description": "A Foo response", diff --git a/endpoints-framework/src/test/resources/com/google/api/server/spi/swagger/absolute_path_endpoint.swagger b/endpoints-framework/src/test/resources/com/google/api/server/spi/swagger/absolute_path_endpoint.swagger index 9a2f9af0..e3d26515 100644 --- a/endpoints-framework/src/test/resources/com/google/api/server/spi/swagger/absolute_path_endpoint.swagger +++ b/endpoints-framework/src/test/resources/com/google/api/server/spi/swagger/absolute_path_endpoint.swagger @@ -26,7 +26,7 @@ "tags": [ "absolutepath:v1" ], - "operationId": "AbsolutepathV1CreateFoo", + "operationId": "absolutepath:v1.createFoo", "responses": { "200": { "description": "A Foo response", @@ -42,7 +42,7 @@ "tags": [ "absolutepath:v1" ], - "operationId": "AbsolutepathV1AbsolutePath", + "operationId": "absolutepath:v1.absolutePath", "responses": { "204": { "description": "A successful response" @@ -55,7 +55,7 @@ "tags": [ "absolutepath:v1" ], - "operationId": "AbsolutepathV1AbsolutePath2", + "operationId": "absolutepath:v1.absolutePath2", "responses": { "204": { "description": "A successful response" diff --git a/endpoints-framework/src/test/resources/com/google/api/server/spi/swagger/api_keys.swagger b/endpoints-framework/src/test/resources/com/google/api/server/spi/swagger/api_keys.swagger index f7783f62..cfafec92 100644 --- a/endpoints-framework/src/test/resources/com/google/api/server/spi/swagger/api_keys.swagger +++ b/endpoints-framework/src/test/resources/com/google/api/server/spi/swagger/api_keys.swagger @@ -26,7 +26,7 @@ "tags": [ "apikeys:v1" ], - "operationId": "ApikeysV1ApiKeyWithAuth", + "operationId": "apikeys:v1.apiKeyWithAuth", "responses": { "204": { "description": "A successful response" @@ -45,7 +45,7 @@ "tags": [ "apikeys:v1" ], - "operationId": "ApikeysV1InheritApiKeySetting", + "operationId": "apikeys:v1.inheritApiKeySetting", "responses": { "204": { "description": "A successful response" @@ -63,7 +63,7 @@ "tags": [ "apikeys:v1" ], - "operationId": "ApikeysV1OverrideApiKeySetting", + "operationId": "apikeys:v1.overrideApiKeySetting", "responses": { "204": { "description": "A successful response" diff --git a/endpoints-framework/src/test/resources/com/google/api/server/spi/swagger/array_endpoint.swagger b/endpoints-framework/src/test/resources/com/google/api/server/spi/swagger/array_endpoint.swagger index 2ae8c047..6df49121 100644 --- a/endpoints-framework/src/test/resources/com/google/api/server/spi/swagger/array_endpoint.swagger +++ b/endpoints-framework/src/test/resources/com/google/api/server/spi/swagger/array_endpoint.swagger @@ -26,7 +26,7 @@ "tags": [ "myapi:v1" ], - "operationId": "MyapiV1GetArrayService", + "operationId": "myapi:v1.getArrayService", "responses": { "200": { "description": "A ArrayEndpoint response", @@ -42,7 +42,7 @@ "tags": [ "myapi:v1" ], - "operationId": "MyapiV1GetBaz", + "operationId": "myapi:v1.getBaz", "responses": { "200": { "description": "A Baz response", @@ -58,7 +58,7 @@ "tags": [ "myapi:v1" ], - "operationId": "MyapiV1GetFoosResponse", + "operationId": "myapi:v1.getFoosResponse", "responses": { "200": { "description": "A CollectionResponse_Foo response", @@ -74,7 +74,7 @@ "tags": [ "myapi:v1" ], - "operationId": "MyapiV1GetFoos", + "operationId": "myapi:v1.getFoos", "responses": { "200": { "description": "A FooCollection response", @@ -90,7 +90,7 @@ "tags": [ "myapi:v1" ], - "operationId": "MyapiV1GetAllArrayedFoos", + "operationId": "myapi:v1.getAllArrayedFoos", "responses": { "200": { "description": "A FooCollectionCollection response", @@ -106,7 +106,7 @@ "tags": [ "myapi:v1" ], - "operationId": "MyapiV1GetAllFoos", + "operationId": "myapi:v1.getAllFoos", "responses": { "200": { "description": "A FooCollectionCollection response", @@ -122,7 +122,7 @@ "tags": [ "myapi:v1" ], - "operationId": "MyapiV1GetAllFoosResponse", + "operationId": "myapi:v1.getAllFoosResponse", "responses": { "200": { "description": "A CollectionResponse_FooCollection response", @@ -138,7 +138,7 @@ "tags": [ "myapi:v1" ], - "operationId": "MyapiV1GetAllNestedFoosResponse", + "operationId": "myapi:v1.getAllNestedFoosResponse", "responses": { "200": { "description": "A CollectionResponse_FooCollectionCollection response", @@ -154,7 +154,7 @@ "tags": [ "myapi:v1" ], - "operationId": "MyapiV1GetArrayedFoos", + "operationId": "myapi:v1.getArrayedFoos", "responses": { "200": { "description": "A FooCollection response", @@ -170,7 +170,7 @@ "tags": [ "myapi:v1" ], - "operationId": "MyapiV1GetIntegersResponse", + "operationId": "myapi:v1.getIntegersResponse", "responses": { "200": { "description": "A CollectionResponse_Integer response", @@ -186,7 +186,7 @@ "tags": [ "myapi:v1" ], - "operationId": "MyapiV1GetListOfString", + "operationId": "myapi:v1.getListOfString", "responses": { "200": { "description": "A ListContainer response", @@ -202,7 +202,7 @@ "tags": [ "myapi:v1" ], - "operationId": "MyapiV1GetObjectIntegers", + "operationId": "myapi:v1.getObjectIntegers", "responses": { "200": { "description": "A IntegerCollection response", @@ -218,7 +218,7 @@ "tags": [ "myapi:v1" ], - "operationId": "MyapiV1GetIntegers", + "operationId": "myapi:v1.getIntegers", "responses": { "200": { "description": "A IntegerCollection response", @@ -234,7 +234,7 @@ "tags": [ "myapi:v1" ], - "operationId": "MyapiV1SetListOfBooleans", + "operationId": "myapi:v1.setListOfBooleans", "parameters": [ { "name": "list", @@ -269,7 +269,7 @@ "tags": [ "myapi:v1" ], - "operationId": "MyapiV1SetListOfByteArrays", + "operationId": "myapi:v1.setListOfByteArrays", "parameters": [ { "name": "list", @@ -308,7 +308,7 @@ "tags": [ "myapi:v1" ], - "operationId": "MyapiV1SetListOfDoubles", + "operationId": "myapi:v1.setListOfDoubles", "parameters": [ { "name": "list", @@ -345,7 +345,7 @@ "tags": [ "myapi:v1" ], - "operationId": "MyapiV1SetListOfEnums", + "operationId": "myapi:v1.setListOfEnums", "parameters": [ { "name": "list", @@ -374,7 +374,7 @@ "tags": [ "myapi:v1" ], - "operationId": "MyapiV1SetListOfFloats", + "operationId": "myapi:v1.setListOfFloats", "parameters": [ { "name": "list", @@ -411,7 +411,7 @@ "tags": [ "myapi:v1" ], - "operationId": "MyapiV1SetListOfIntegers", + "operationId": "myapi:v1.setListOfIntegers", "parameters": [ { "name": "list", @@ -448,7 +448,7 @@ "tags": [ "myapi:v1" ], - "operationId": "MyapiV1SetListOfLongs", + "operationId": "myapi:v1.setListOfLongs", "parameters": [ { "name": "list", @@ -485,7 +485,7 @@ "tags": [ "myapi:v1" ], - "operationId": "MyapiV1SetListOfString", + "operationId": "myapi:v1.setListOfString", "parameters": [ { "name": "list", @@ -510,7 +510,7 @@ "tags": [ "myapi:v1" ], - "operationId": "MyapiV1SetListOfStringAsQueryParam", + "operationId": "myapi:v1.setListOfStringAsQueryParam", "parameters": [ { "name": "list", diff --git a/endpoints-framework/src/test/resources/com/google/api/server/spi/swagger/enum_endpoint.swagger b/endpoints-framework/src/test/resources/com/google/api/server/spi/swagger/enum_endpoint.swagger index 7d975e5d..f828a6cc 100644 --- a/endpoints-framework/src/test/resources/com/google/api/server/spi/swagger/enum_endpoint.swagger +++ b/endpoints-framework/src/test/resources/com/google/api/server/spi/swagger/enum_endpoint.swagger @@ -26,7 +26,7 @@ "tags": [ "enum:v1" ], - "operationId": "EnumV1Create", + "operationId": "enum:v1.create", "parameters": [ { "name": "value", diff --git a/endpoints-framework/src/test/resources/com/google/api/server/spi/swagger/error_codes_all.swagger b/endpoints-framework/src/test/resources/com/google/api/server/spi/swagger/error_codes_all.swagger index 84659c4d..e7dbcf57 100644 --- a/endpoints-framework/src/test/resources/com/google/api/server/spi/swagger/error_codes_all.swagger +++ b/endpoints-framework/src/test/resources/com/google/api/server/spi/swagger/error_codes_all.swagger @@ -26,7 +26,7 @@ "tags": [ "exceptions:v1" ], - "operationId": "ExceptionsV1DoesNotThrow", + "operationId": "exceptions:v1.doesNotThrow", "responses": { "204": { "description": "A successful response" @@ -42,7 +42,7 @@ "tags": [ "exceptions:v1" ], - "operationId": "ExceptionsV1ThrowsMultipleExceptions", + "operationId": "exceptions:v1.throwsMultipleExceptions", "responses": { "204": { "description": "A successful response" @@ -64,7 +64,7 @@ "tags": [ "exceptions:v1" ], - "operationId": "ExceptionsV1ThrowsNotFoundException", + "operationId": "exceptions:v1.throwsNotFoundException", "responses": { "204": { "description": "A successful response" @@ -83,7 +83,7 @@ "tags": [ "exceptions:v1" ], - "operationId": "ExceptionsV1ThrowsServiceException", + "operationId": "exceptions:v1.throwsServiceException", "responses": { "204": { "description": "A successful response" @@ -99,7 +99,7 @@ "tags": [ "exceptions:v1" ], - "operationId": "ExceptionsV1ThrowsUnknownException", + "operationId": "exceptions:v1.throwsUnknownException", "responses": { "204": { "description": "A successful response" @@ -179,4 +179,4 @@ } } } -} +} \ No newline at end of file diff --git a/endpoints-framework/src/test/resources/com/google/api/server/spi/swagger/error_codes_default_response.swagger b/endpoints-framework/src/test/resources/com/google/api/server/spi/swagger/error_codes_default_response.swagger index 225581f2..69c6133c 100644 --- a/endpoints-framework/src/test/resources/com/google/api/server/spi/swagger/error_codes_default_response.swagger +++ b/endpoints-framework/src/test/resources/com/google/api/server/spi/swagger/error_codes_default_response.swagger @@ -26,7 +26,7 @@ "tags": [ "exceptions:v1" ], - "operationId": "ExceptionsV1DoesNotThrow", + "operationId": "exceptions:v1.doesNotThrow", "responses": { "204": { "description": "A successful response" @@ -42,7 +42,7 @@ "tags": [ "exceptions:v1" ], - "operationId": "ExceptionsV1ThrowsMultipleExceptions", + "operationId": "exceptions:v1.throwsMultipleExceptions", "responses": { "204": { "description": "A successful response" @@ -58,7 +58,7 @@ "tags": [ "exceptions:v1" ], - "operationId": "ExceptionsV1ThrowsNotFoundException", + "operationId": "exceptions:v1.throwsNotFoundException", "responses": { "204": { "description": "A successful response" @@ -74,7 +74,7 @@ "tags": [ "exceptions:v1" ], - "operationId": "ExceptionsV1ThrowsServiceException", + "operationId": "exceptions:v1.throwsServiceException", "responses": { "204": { "description": "A successful response" @@ -90,7 +90,7 @@ "tags": [ "exceptions:v1" ], - "operationId": "ExceptionsV1ThrowsUnknownException", + "operationId": "exceptions:v1.throwsUnknownException", "responses": { "204": { "description": "A successful response" diff --git a/endpoints-framework/src/test/resources/com/google/api/server/spi/swagger/error_codes_service_exceptions.swagger b/endpoints-framework/src/test/resources/com/google/api/server/spi/swagger/error_codes_service_exceptions.swagger index 28cf296d..89b76e23 100644 --- a/endpoints-framework/src/test/resources/com/google/api/server/spi/swagger/error_codes_service_exceptions.swagger +++ b/endpoints-framework/src/test/resources/com/google/api/server/spi/swagger/error_codes_service_exceptions.swagger @@ -26,7 +26,7 @@ "tags": [ "exceptions:v1" ], - "operationId": "ExceptionsV1DoesNotThrow", + "operationId": "exceptions:v1.doesNotThrow", "responses": { "204": { "description": "A successful response" @@ -39,7 +39,7 @@ "tags": [ "exceptions:v1" ], - "operationId": "ExceptionsV1ThrowsMultipleExceptions", + "operationId": "exceptions:v1.throwsMultipleExceptions", "responses": { "204": { "description": "A successful response" @@ -58,7 +58,7 @@ "tags": [ "exceptions:v1" ], - "operationId": "ExceptionsV1ThrowsNotFoundException", + "operationId": "exceptions:v1.throwsNotFoundException", "responses": { "204": { "description": "A successful response" @@ -74,7 +74,7 @@ "tags": [ "exceptions:v1" ], - "operationId": "ExceptionsV1ThrowsServiceException", + "operationId": "exceptions:v1.throwsServiceException", "responses": { "204": { "description": "A successful response" @@ -87,7 +87,7 @@ "tags": [ "exceptions:v1" ], - "operationId": "ExceptionsV1ThrowsUnknownException", + "operationId": "exceptions:v1.throwsUnknownException", "responses": { "204": { "description": "A successful response" diff --git a/endpoints-framework/src/test/resources/com/google/api/server/spi/swagger/foo_endpoint.swagger b/endpoints-framework/src/test/resources/com/google/api/server/spi/swagger/foo_endpoint.swagger index 55319ad7..12ea29f8 100644 --- a/endpoints-framework/src/test/resources/com/google/api/server/spi/swagger/foo_endpoint.swagger +++ b/endpoints-framework/src/test/resources/com/google/api/server/spi/swagger/foo_endpoint.swagger @@ -31,7 +31,7 @@ "foo:v1" ], "description": "list desc", - "operationId": "FooV1ListFoos", + "operationId": "foo:v1.listFoos", "parameters": [ { "name": "n", @@ -66,7 +66,7 @@ "tags": [ "foo:v1" ], - "operationId": "FooV1Toplevel", + "operationId": "foo:v1.toplevel", "responses": { "200": { "description": "A CollectionResponse_Foo response", @@ -95,7 +95,7 @@ "foo:v1" ], "description": "get desc", - "operationId": "FooV1GetFoo", + "operationId": "foo:v1.getFoo", "parameters": [ { "name": "id", @@ -131,7 +131,7 @@ "foo:v1" ], "description": "update desc", - "operationId": "FooV1UpdateFoo", + "operationId": "foo:v1.updateFoo", "parameters": [ { "name": "id", @@ -175,7 +175,7 @@ "foo:v1" ], "description": "create desc", - "operationId": "FooV1CreateFoo", + "operationId": "foo:v1.createFoo", "parameters": [ { "name": "id", @@ -219,7 +219,7 @@ "foo:v1" ], "description": "delete desc", - "operationId": "FooV1DeleteFoo", + "operationId": "foo:v1.deleteFoo", "parameters": [ { "name": "id", diff --git a/endpoints-framework/src/test/resources/com/google/api/server/spi/swagger/foo_endpoint_api_name.swagger b/endpoints-framework/src/test/resources/com/google/api/server/spi/swagger/foo_endpoint_api_name.swagger index 5038d08d..300d057c 100644 --- a/endpoints-framework/src/test/resources/com/google/api/server/spi/swagger/foo_endpoint_api_name.swagger +++ b/endpoints-framework/src/test/resources/com/google/api/server/spi/swagger/foo_endpoint_api_name.swagger @@ -31,7 +31,7 @@ "foo:v1" ], "description": "list desc", - "operationId": "FooV1ListFoos", + "operationId": "foo:v1.listFoos", "parameters": [ { "name": "n", @@ -66,7 +66,7 @@ "tags": [ "foo:v1" ], - "operationId": "FooV1Toplevel", + "operationId": "foo:v1.toplevel", "responses": { "200": { "description": "A CollectionResponse_Foo response", @@ -95,7 +95,7 @@ "foo:v1" ], "description": "get desc", - "operationId": "FooV1GetFoo", + "operationId": "foo:v1.getFoo", "parameters": [ { "name": "id", @@ -131,7 +131,7 @@ "foo:v1" ], "description": "update desc", - "operationId": "FooV1UpdateFoo", + "operationId": "foo:v1.updateFoo", "parameters": [ { "name": "id", @@ -175,7 +175,7 @@ "foo:v1" ], "description": "create desc", - "operationId": "FooV1CreateFoo", + "operationId": "foo:v1.createFoo", "parameters": [ { "name": "id", @@ -219,7 +219,7 @@ "foo:v1" ], "description": "delete desc", - "operationId": "FooV1DeleteFoo", + "operationId": "foo:v1.deleteFoo", "parameters": [ { "name": "id", diff --git a/endpoints-framework/src/test/resources/com/google/api/server/spi/swagger/foo_endpoint_combine_all_params.swagger b/endpoints-framework/src/test/resources/com/google/api/server/spi/swagger/foo_endpoint_combine_all_params.swagger index 0be6fdef..6b1370d6 100644 --- a/endpoints-framework/src/test/resources/com/google/api/server/spi/swagger/foo_endpoint_combine_all_params.swagger +++ b/endpoints-framework/src/test/resources/com/google/api/server/spi/swagger/foo_endpoint_combine_all_params.swagger @@ -30,7 +30,7 @@ "tags": [ "foo:v1" ], - "operationId": "FooV1ListFooos", + "operationId": "foo:v1.listFooos", "parameters": [ { "$ref": "#/parameters/n_query_parameter" @@ -63,7 +63,7 @@ "tags": [ "foo:v1" ], - "operationId": "FooV1ListFooosInPath", + "operationId": "foo:v1.listFooosInPath", "responses": { "200": { "description": "A CollectionResponse_Foo response", @@ -100,7 +100,7 @@ "tags": [ "foo:v1" ], - "operationId": "FooV1ListFooosNotRequired", + "operationId": "foo:v1.listFooosNotRequired", "responses": { "200": { "description": "A CollectionResponse_Foo response", @@ -138,7 +138,7 @@ "foo:v1" ], "description": "list desc", - "operationId": "FooV1ListFoos", + "operationId": "foo:v1.listFoos", "parameters": [ { "$ref": "#/parameters/n_query_parameter" @@ -169,7 +169,7 @@ "tags": [ "foo:v1" ], - "operationId": "FooV1Toplevel", + "operationId": "foo:v1.toplevel", "responses": { "200": { "description": "A CollectionResponse_Foo response", @@ -198,7 +198,7 @@ "foo:v1" ], "description": "get desc", - "operationId": "FooV1GetFoo", + "operationId": "foo:v1.getFoo", "responses": { "200": { "description": "A Foo response", @@ -225,7 +225,7 @@ "foo:v1" ], "description": "update desc", - "operationId": "FooV1UpdateFoo", + "operationId": "foo:v1.updateFoo", "parameters": [ { "$ref": "#/parameters/Foo_body_parameter" @@ -257,7 +257,7 @@ "foo:v1" ], "description": "create desc", - "operationId": "FooV1CreateFoo", + "operationId": "foo:v1.createFoo", "parameters": [ { "$ref": "#/parameters/Foo_body_parameter" @@ -289,7 +289,7 @@ "foo:v1" ], "description": "delete desc", - "operationId": "FooV1DeleteFoo", + "operationId": "foo:v1.deleteFoo", "responses": { "200": { "description": "A Foo response", diff --git a/endpoints-framework/src/test/resources/com/google/api/server/spi/swagger/foo_endpoint_combine_params_same_path.swagger b/endpoints-framework/src/test/resources/com/google/api/server/spi/swagger/foo_endpoint_combine_params_same_path.swagger index 85c3c056..b20476f5 100644 --- a/endpoints-framework/src/test/resources/com/google/api/server/spi/swagger/foo_endpoint_combine_params_same_path.swagger +++ b/endpoints-framework/src/test/resources/com/google/api/server/spi/swagger/foo_endpoint_combine_params_same_path.swagger @@ -30,7 +30,7 @@ "tags": [ "foo:v1" ], - "operationId": "FooV1ListFooos", + "operationId": "foo:v1.listFooos", "responses": { "200": { "description": "A CollectionResponse_Foo response", @@ -67,7 +67,7 @@ "tags": [ "foo:v1" ], - "operationId": "FooV1ListFooosInPath", + "operationId": "foo:v1.listFooosInPath", "responses": { "200": { "description": "A CollectionResponse_Foo response", @@ -104,7 +104,7 @@ "tags": [ "foo:v1" ], - "operationId": "FooV1ListFooosNotRequired", + "operationId": "foo:v1.listFooosNotRequired", "responses": { "200": { "description": "A CollectionResponse_Foo response", @@ -142,7 +142,7 @@ "foo:v1" ], "description": "list desc", - "operationId": "FooV1ListFoos", + "operationId": "foo:v1.listFoos", "parameters": [ { "name": "n", @@ -177,7 +177,7 @@ "tags": [ "foo:v1" ], - "operationId": "FooV1Toplevel", + "operationId": "foo:v1.toplevel", "responses": { "200": { "description": "A CollectionResponse_Foo response", @@ -206,7 +206,7 @@ "foo:v1" ], "description": "get desc", - "operationId": "FooV1GetFoo", + "operationId": "foo:v1.getFoo", "responses": { "200": { "description": "A Foo response", @@ -233,7 +233,7 @@ "foo:v1" ], "description": "update desc", - "operationId": "FooV1UpdateFoo", + "operationId": "foo:v1.updateFoo", "parameters": [ { "in": "body", @@ -270,7 +270,7 @@ "foo:v1" ], "description": "create desc", - "operationId": "FooV1CreateFoo", + "operationId": "foo:v1.createFoo", "parameters": [ { "in": "body", @@ -307,7 +307,7 @@ "foo:v1" ], "description": "delete desc", - "operationId": "FooV1DeleteFoo", + "operationId": "foo:v1.deleteFoo", "responses": { "200": { "description": "A Foo response", diff --git a/endpoints-framework/src/test/resources/com/google/api/server/spi/swagger/foo_endpoint_custom_templates.swagger b/endpoints-framework/src/test/resources/com/google/api/server/spi/swagger/foo_endpoint_custom_templates.swagger new file mode 100644 index 00000000..63c832f7 --- /dev/null +++ b/endpoints-framework/src/test/resources/com/google/api/server/spi/swagger/foo_endpoint_custom_templates.swagger @@ -0,0 +1,307 @@ +{ + "swagger": "2.0", + "info": { + "version": "1.0.0", + "title": "myapi.appspot.com" + }, + "host": "myapi.appspot.com", + "basePath": "/_ah/api", + "tags": [ + { + "name": "FooV1", + "description": "Just Foo Things", + "externalDocs": { + "url": "https://example.com" + } + } + ], + "schemes": [ + "https" + ], + "consumes": [ + "application/json" + ], + "produces": [ + "application/json" + ], + "paths": { + "/foo/v1/foos": { + "get": { + "tags": [ + "FooV1" + ], + "description": "list desc", + "operationId": "foo-v1-listFoos", + "parameters": [ + { + "name": "n", + "in": "query", + "required": true, + "type": "integer", + "format": "int32" + } + ], + "responses": { + "200": { + "description": "A CollectionResponse_Foo response", + "schema": { + "$ref": "#/definitions/CollectionResponse_Foo" + } + } + }, + "security": [ + { + "google_id_token-3a26ea04": [ + "https://www.googleapis.com/auth/userinfo.email" + ] + }, + { + "google_id_token_legacy-3a26ea04": [ + "https://www.googleapis.com/auth/userinfo.email" + ] + } + ] + }, + "post": { + "tags": [ + "FooV1" + ], + "operationId": "foo-v1-toplevel", + "responses": { + "200": { + "description": "A CollectionResponse_Foo response", + "schema": { + "$ref": "#/definitions/CollectionResponse_Foo" + } + } + }, + "security": [ + { + "google_id_token-3a26ea04": [ + "https://www.googleapis.com/auth/userinfo.email" + ] + }, + { + "google_id_token_legacy-3a26ea04": [ + "https://www.googleapis.com/auth/userinfo.email" + ] + } + ] + } + }, + "/foo/v1/foos/{id}": { + "get": { + "tags": [ + "FooV1" + ], + "description": "get desc", + "operationId": "foo-v1-getFoo", + "parameters": [ + { + "name": "id", + "in": "path", + "description": "id desc", + "required": true, + "type": "string" + } + ], + "responses": { + "200": { + "description": "A Foo response", + "schema": { + "$ref": "#/definitions/Foo" + } + } + }, + "security": [ + { + "google_id_token-3a26ea04": [ + "https://www.googleapis.com/auth/userinfo.email" + ] + }, + { + "google_id_token_legacy-3a26ea04": [ + "https://www.googleapis.com/auth/userinfo.email" + ] + } + ] + }, + "post": { + "tags": [ + "FooV1" + ], + "description": "update desc", + "operationId": "foo-v1-updateFoo", + "parameters": [ + { + "name": "id", + "in": "path", + "description": "id desc", + "required": true, + "type": "string" + }, + { + "in": "body", + "name": "Foo", + "required": true, + "schema": { + "$ref": "#/definitions/Foo" + } + } + ], + "responses": { + "200": { + "description": "A Foo response", + "schema": { + "$ref": "#/definitions/Foo" + } + } + }, + "security": [ + { + "google_id_token-3a26ea04": [ + "https://www.googleapis.com/auth/userinfo.email" + ] + }, + { + "google_id_token_legacy-3a26ea04": [ + "https://www.googleapis.com/auth/userinfo.email" + ] + } + ] + }, + "put": { + "tags": [ + "FooV1" + ], + "description": "create desc", + "operationId": "foo-v1-createFoo", + "parameters": [ + { + "name": "id", + "in": "path", + "description": "id desc", + "required": true, + "type": "string" + }, + { + "in": "body", + "name": "Foo", + "required": true, + "schema": { + "$ref": "#/definitions/Foo" + } + } + ], + "responses": { + "200": { + "description": "A Foo response", + "schema": { + "$ref": "#/definitions/Foo" + } + } + }, + "security": [ + { + "google_id_token-3a26ea04": [ + "https://www.googleapis.com/auth/userinfo.email" + ] + }, + { + "google_id_token_legacy-3a26ea04": [ + "https://www.googleapis.com/auth/userinfo.email" + ] + } + ] + }, + "delete": { + "tags": [ + "FooV1" + ], + "description": "delete desc", + "operationId": "foo-v1-deleteFoo", + "parameters": [ + { + "name": "id", + "in": "path", + "description": "id desc", + "required": true, + "type": "string" + } + ], + "responses": { + "200": { + "description": "A Foo response", + "schema": { + "$ref": "#/definitions/Foo" + } + } + }, + "security": [ + { + "google_id_token-3a26ea04": [ + "https://www.googleapis.com/auth/userinfo.email" + ] + }, + { + "google_id_token_legacy-3a26ea04": [ + "https://www.googleapis.com/auth/userinfo.email" + ] + } + ] + } + } + }, + "securityDefinitions": { + "google_id_token-3a26ea04": { + "type": "oauth2", + "authorizationUrl": "https://accounts.google.com/o/oauth2/v2/auth", + "flow": "implicit", + "scopes": { + "https://www.googleapis.com/auth/userinfo.email": "View your email address" + }, + "x-google-issuer": "https://accounts.google.com", + "x-google-jwks_uri": "https://www.googleapis.com/oauth2/v1/certs", + "x-google-audiences": "audience" + }, + "google_id_token_legacy-3a26ea04": { + "type": "oauth2", + "authorizationUrl": "https://accounts.google.com/o/oauth2/v2/auth", + "flow": "implicit", + "scopes": { + "https://www.googleapis.com/auth/userinfo.email": "View your email address" + }, + "x-google-issuer": "accounts.google.com", + "x-google-jwks_uri": "https://www.googleapis.com/oauth2/v1/certs", + "x-google-audiences": "audience" + } + }, + "definitions": { + "CollectionResponse_Foo": { + "type": "object", + "properties": { + "items": { + "type": "array", + "items": { + "$ref": "#/definitions/Foo" + } + }, + "nextPageToken": { + "type": "string" + } + } + }, + "Foo": { + "type": "object", + "properties": { + "name": { + "type": "string" + }, + "value": { + "type": "integer", + "format": "int32" + } + } + } + } +} diff --git a/endpoints-framework/src/test/resources/com/google/api/server/spi/swagger/foo_endpoint_default_context.swagger b/endpoints-framework/src/test/resources/com/google/api/server/spi/swagger/foo_endpoint_default_context.swagger index 49c93fda..42313fac 100644 --- a/endpoints-framework/src/test/resources/com/google/api/server/spi/swagger/foo_endpoint_default_context.swagger +++ b/endpoints-framework/src/test/resources/com/google/api/server/spi/swagger/foo_endpoint_default_context.swagger @@ -31,7 +31,7 @@ "foo:v1" ], "description": "list desc", - "operationId": "FooV1ListFoos", + "operationId": "foo:v1.listFoos", "parameters": [ { "name": "n", @@ -66,7 +66,7 @@ "tags": [ "foo:v1" ], - "operationId": "FooV1Toplevel", + "operationId": "foo:v1.toplevel", "responses": { "200": { "description": "A CollectionResponse_Foo response", @@ -95,7 +95,7 @@ "foo:v1" ], "description": "get desc", - "operationId": "FooV1GetFoo", + "operationId": "foo:v1.getFoo", "parameters": [ { "name": "id", @@ -131,7 +131,7 @@ "foo:v1" ], "description": "update desc", - "operationId": "FooV1UpdateFoo", + "operationId": "foo:v1.updateFoo", "parameters": [ { "name": "id", @@ -175,7 +175,7 @@ "foo:v1" ], "description": "create desc", - "operationId": "FooV1CreateFoo", + "operationId": "foo:v1.createFoo", "parameters": [ { "name": "id", @@ -219,7 +219,7 @@ "foo:v1" ], "description": "delete desc", - "operationId": "FooV1DeleteFoo", + "operationId": "foo:v1.deleteFoo", "parameters": [ { "name": "id", diff --git a/endpoints-framework/src/test/resources/com/google/api/server/spi/swagger/foo_endpoint_extract_param_refs.swagger b/endpoints-framework/src/test/resources/com/google/api/server/spi/swagger/foo_endpoint_extract_param_refs.swagger index f3e31874..ad779877 100644 --- a/endpoints-framework/src/test/resources/com/google/api/server/spi/swagger/foo_endpoint_extract_param_refs.swagger +++ b/endpoints-framework/src/test/resources/com/google/api/server/spi/swagger/foo_endpoint_extract_param_refs.swagger @@ -30,7 +30,7 @@ "tags": [ "foo:v1" ], - "operationId": "FooV1ListFooos", + "operationId": "foo:v1.listFooos", "parameters": [ { "$ref": "#/parameters/n_query_parameter" @@ -63,7 +63,7 @@ "tags": [ "foo:v1" ], - "operationId": "FooV1ListFooosInPath", + "operationId": "foo:v1.listFooosInPath", "parameters": [ { "name": "n", @@ -100,7 +100,7 @@ "tags": [ "foo:v1" ], - "operationId": "FooV1ListFooosNotRequired", + "operationId": "foo:v1.listFooosNotRequired", "parameters": [ { "name": "n", @@ -138,7 +138,7 @@ "foo:v1" ], "description": "list desc", - "operationId": "FooV1ListFoos", + "operationId": "foo:v1.listFoos", "parameters": [ { "$ref": "#/parameters/n_query_parameter" @@ -169,7 +169,7 @@ "tags": [ "foo:v1" ], - "operationId": "FooV1Toplevel", + "operationId": "foo:v1.toplevel", "responses": { "200": { "description": "A CollectionResponse_Foo response", @@ -198,7 +198,7 @@ "foo:v1" ], "description": "get desc", - "operationId": "FooV1GetFoo", + "operationId": "foo:v1.getFoo", "parameters": [ { "$ref": "#/parameters/id_path_parameter" @@ -230,7 +230,7 @@ "foo:v1" ], "description": "update desc", - "operationId": "FooV1UpdateFoo", + "operationId": "foo:v1.updateFoo", "parameters": [ { "$ref": "#/parameters/id_path_parameter" @@ -265,7 +265,7 @@ "foo:v1" ], "description": "create desc", - "operationId": "FooV1CreateFoo", + "operationId": "foo:v1.createFoo", "parameters": [ { "$ref": "#/parameters/id_path_parameter" @@ -300,7 +300,7 @@ "foo:v1" ], "description": "delete desc", - "operationId": "FooV1DeleteFoo", + "operationId": "foo:v1.deleteFoo", "parameters": [ { "$ref": "#/parameters/id_path_parameter" diff --git a/endpoints-framework/src/test/resources/com/google/api/server/spi/swagger/foo_with_description_endpoint.swagger b/endpoints-framework/src/test/resources/com/google/api/server/spi/swagger/foo_with_description_endpoint.swagger index 968777d9..0b3eba64 100644 --- a/endpoints-framework/src/test/resources/com/google/api/server/spi/swagger/foo_with_description_endpoint.swagger +++ b/endpoints-framework/src/test/resources/com/google/api/server/spi/swagger/foo_with_description_endpoint.swagger @@ -28,7 +28,7 @@ "foo:v1" ], "description": "list desc", - "operationId": "FooV1ListFoos", + "operationId": "foo:v1.listFoos", "parameters": [ { "name": "n", @@ -74,7 +74,7 @@ "tags": [ "foo:v1" ], - "operationId": "FooV1Toplevel", + "operationId": "foo:v1.toplevel", "responses": { "200": { "description": "A CollectionResponse_FooDescription response", @@ -103,7 +103,7 @@ "foo:v1" ], "description": "get desc", - "operationId": "FooV1GetFoo", + "operationId": "foo:v1.getFoo", "parameters": [ { "name": "id", @@ -139,7 +139,7 @@ "foo:v1" ], "description": "update desc", - "operationId": "FooV1UpdateFoo", + "operationId": "foo:v1.updateFoo", "parameters": [ { "name": "id", @@ -183,7 +183,7 @@ "foo:v1" ], "description": "create desc", - "operationId": "FooV1CreateFoo", + "operationId": "foo:v1.createFoo", "parameters": [ { "name": "id", @@ -228,7 +228,7 @@ "foo:v1" ], "description": "delete desc", - "operationId": "FooV1DeleteFoo", + "operationId": "foo:v1.deleteFoo", "parameters": [ { "name": "id", diff --git a/endpoints-framework/src/test/resources/com/google/api/server/spi/swagger/google_auth.swagger b/endpoints-framework/src/test/resources/com/google/api/server/spi/swagger/google_auth.swagger index ee1c523d..27340862 100644 --- a/endpoints-framework/src/test/resources/com/google/api/server/spi/swagger/google_auth.swagger +++ b/endpoints-framework/src/test/resources/com/google/api/server/spi/swagger/google_auth.swagger @@ -26,7 +26,7 @@ "tags": [ "thirdparty:v1" ], - "operationId": "ThirdpartyV1AuthOverride", + "operationId": "thirdparty:v1.authOverride", "responses": { "204": { "description": "A successful response" @@ -44,7 +44,7 @@ "tags": [ "thirdparty:v1" ], - "operationId": "ThirdpartyV1GoogleAuth", + "operationId": "thirdparty:v1.googleAuth", "responses": { "204": { "description": "A successful response" @@ -64,7 +64,7 @@ "tags": [ "thirdparty:v1" ], - "operationId": "ThirdpartyV1NoOverride", + "operationId": "thirdparty:v1.noOverride", "responses": { "204": { "description": "A successful response" diff --git a/endpoints-framework/src/test/resources/com/google/api/server/spi/swagger/limit_metrics_endpoint.swagger b/endpoints-framework/src/test/resources/com/google/api/server/spi/swagger/limit_metrics_endpoint.swagger index a8a9e070..12b2e3f2 100644 --- a/endpoints-framework/src/test/resources/com/google/api/server/spi/swagger/limit_metrics_endpoint.swagger +++ b/endpoints-framework/src/test/resources/com/google/api/server/spi/swagger/limit_metrics_endpoint.swagger @@ -26,7 +26,7 @@ "tags": [ "limits:v1" ], - "operationId": "LimitsV1CreateFoo", + "operationId": "limits:v1.createFoo", "responses": { "200": { "description": "A Foo response", @@ -47,7 +47,7 @@ "tags": [ "limits:v1" ], - "operationId": "LimitsV1CustomFoo", + "operationId": "limits:v1.customFoo", "responses": { "204": { "description": "A successful response" @@ -80,9 +80,9 @@ "metrics": [ { "name": "read", - "displayName": "Read requests", "valueType": "INT64", - "metricKind": "GAUGE" + "metricKind": "GAUGE", + "displayName": "Read requests" }, { "name": "write", diff --git a/endpoints-framework/src/test/resources/com/google/api/server/spi/swagger/map_endpoint.swagger b/endpoints-framework/src/test/resources/com/google/api/server/spi/swagger/map_endpoint.swagger index 2084c7a1..7623dd85 100644 --- a/endpoints-framework/src/test/resources/com/google/api/server/spi/swagger/map_endpoint.swagger +++ b/endpoints-framework/src/test/resources/com/google/api/server/spi/swagger/map_endpoint.swagger @@ -26,7 +26,7 @@ "tags": [ "myapi:v1" ], - "operationId": "MyapiV1GetDateTimeKeyMap", + "operationId": "myapi:v1.getDateTimeKeyMap", "responses": { "200": { "description": "A Map_DateTime_String response", @@ -45,7 +45,7 @@ "tags": [ "myapi:v1" ], - "operationId": "MyapiV1GetMapOfStrings", + "operationId": "myapi:v1.getMapOfStrings", "responses": { "200": { "description": "A MapContainer response", @@ -61,7 +61,7 @@ "tags": [ "myapi:v1" ], - "operationId": "MyapiV1GetStringCollectionMap", + "operationId": "myapi:v1.getStringCollectionMap", "responses": { "200": { "description": "A JsonMap response", @@ -81,7 +81,7 @@ "tags": [ "myapi:v1" ], - "operationId": "MyapiV1GetBooleanKeyMap", + "operationId": "myapi:v1.getBooleanKeyMap", "responses": { "200": { "description": "A Map_Boolean_String response", @@ -100,7 +100,7 @@ "tags": [ "myapi:v1" ], - "operationId": "MyapiV1GetDateKeyMap", + "operationId": "myapi:v1.getDateKeyMap", "responses": { "200": { "description": "A Map_DateTime_String response", @@ -119,7 +119,7 @@ "tags": [ "myapi:v1" ], - "operationId": "MyapiV1GetFloatKeyMap", + "operationId": "myapi:v1.getFloatKeyMap", "responses": { "200": { "description": "A Map_Float_String response", @@ -138,7 +138,7 @@ "tags": [ "myapi:v1" ], - "operationId": "MyapiV1GetIntKeyMap", + "operationId": "myapi:v1.getIntKeyMap", "responses": { "200": { "description": "A Map_Integer_String response", @@ -157,7 +157,7 @@ "tags": [ "myapi:v1" ], - "operationId": "MyapiV1GetLongKeyMap", + "operationId": "myapi:v1.getLongKeyMap", "responses": { "200": { "description": "A Map_Long_String response", @@ -176,7 +176,7 @@ "tags": [ "myapi:v1" ], - "operationId": "MyapiV1GetBazMap", + "operationId": "myapi:v1.getBazMap", "responses": { "200": { "description": "A Map_String_Baz response", @@ -195,7 +195,7 @@ "tags": [ "myapi:v1" ], - "operationId": "MyapiV1GetFooMap", + "operationId": "myapi:v1.getFooMap", "responses": { "200": { "description": "A Map_String_Foo response", @@ -214,7 +214,7 @@ "tags": [ "myapi:v1" ], - "operationId": "MyapiV1GetIntMap", + "operationId": "myapi:v1.getIntMap", "responses": { "200": { "description": "A Map_String_Integer response", @@ -234,7 +234,7 @@ "tags": [ "myapi:v1" ], - "operationId": "MyapiV1GetFooMapMap", + "operationId": "myapi:v1.getFooMapMap", "responses": { "200": { "description": "A Map_String_Map_String_Foo response", @@ -256,7 +256,7 @@ "tags": [ "myapi:v1" ], - "operationId": "MyapiV1GetStringMap", + "operationId": "myapi:v1.getStringMap", "responses": { "200": { "description": "A Map_String_String response", @@ -275,7 +275,7 @@ "tags": [ "myapi:v1" ], - "operationId": "MyapiV1GetStringArrayMap", + "operationId": "myapi:v1.getStringArrayMap", "responses": { "200": { "description": "A JsonMap response", @@ -295,7 +295,7 @@ "tags": [ "myapi:v1" ], - "operationId": "MyapiV1GetStringValueMap", + "operationId": "myapi:v1.getStringValueMap", "responses": { "200": { "description": "A Map_String_StringValue response", @@ -314,7 +314,7 @@ "tags": [ "myapi:v1" ], - "operationId": "MyapiV1GetEnumKeyMap", + "operationId": "myapi:v1.getEnumKeyMap", "responses": { "200": { "description": "A Map_TestEnum_String response", @@ -333,7 +333,7 @@ "tags": [ "myapi:v1" ], - "operationId": "MyapiV1GetMapService", + "operationId": "myapi:v1.getMapService", "responses": { "200": { "description": "A MapEndpoint response", @@ -349,7 +349,7 @@ "tags": [ "myapi:v1" ], - "operationId": "MyapiV1GetMapSubclass", + "operationId": "myapi:v1.getMapSubclass", "responses": { "200": { "description": "A Map_Boolean_Integer response", diff --git a/endpoints-framework/src/test/resources/com/google/api/server/spi/swagger/map_endpoint_legacy.swagger b/endpoints-framework/src/test/resources/com/google/api/server/spi/swagger/map_endpoint_legacy.swagger index f548cc93..99147501 100644 --- a/endpoints-framework/src/test/resources/com/google/api/server/spi/swagger/map_endpoint_legacy.swagger +++ b/endpoints-framework/src/test/resources/com/google/api/server/spi/swagger/map_endpoint_legacy.swagger @@ -26,7 +26,7 @@ "tags": [ "myapi:v1" ], - "operationId": "MyapiV1GetDateTimeKeyMap", + "operationId": "myapi:v1.getDateTimeKeyMap", "responses": { "200": { "description": "A JsonMap response", @@ -46,7 +46,7 @@ "tags": [ "myapi:v1" ], - "operationId": "MyapiV1GetMapOfStrings", + "operationId": "myapi:v1.getMapOfStrings", "responses": { "200": { "description": "A MapContainer response", @@ -62,7 +62,7 @@ "tags": [ "myapi:v1" ], - "operationId": "MyapiV1GetStringCollectionMap", + "operationId": "myapi:v1.getStringCollectionMap", "responses": { "200": { "description": "A JsonMap response", @@ -82,7 +82,7 @@ "tags": [ "myapi:v1" ], - "operationId": "MyapiV1GetBooleanKeyMap", + "operationId": "myapi:v1.getBooleanKeyMap", "responses": { "200": { "description": "A JsonMap response", @@ -102,7 +102,7 @@ "tags": [ "myapi:v1" ], - "operationId": "MyapiV1GetDateKeyMap", + "operationId": "myapi:v1.getDateKeyMap", "responses": { "200": { "description": "A JsonMap response", @@ -122,7 +122,7 @@ "tags": [ "myapi:v1" ], - "operationId": "MyapiV1GetFloatKeyMap", + "operationId": "myapi:v1.getFloatKeyMap", "responses": { "200": { "description": "A JsonMap response", @@ -142,7 +142,7 @@ "tags": [ "myapi:v1" ], - "operationId": "MyapiV1GetIntKeyMap", + "operationId": "myapi:v1.getIntKeyMap", "responses": { "200": { "description": "A JsonMap response", @@ -162,7 +162,7 @@ "tags": [ "myapi:v1" ], - "operationId": "MyapiV1GetLongKeyMap", + "operationId": "myapi:v1.getLongKeyMap", "responses": { "200": { "description": "A JsonMap response", @@ -182,7 +182,7 @@ "tags": [ "myapi:v1" ], - "operationId": "MyapiV1GetBazMap", + "operationId": "myapi:v1.getBazMap", "responses": { "200": { "description": "A JsonMap response", @@ -202,7 +202,7 @@ "tags": [ "myapi:v1" ], - "operationId": "MyapiV1GetFooMap", + "operationId": "myapi:v1.getFooMap", "responses": { "200": { "description": "A JsonMap response", @@ -222,7 +222,7 @@ "tags": [ "myapi:v1" ], - "operationId": "MyapiV1GetIntMap", + "operationId": "myapi:v1.getIntMap", "responses": { "200": { "description": "A JsonMap response", @@ -242,7 +242,7 @@ "tags": [ "myapi:v1" ], - "operationId": "MyapiV1GetFooMapMap", + "operationId": "myapi:v1.getFooMapMap", "responses": { "200": { "description": "A JsonMap response", @@ -262,7 +262,7 @@ "tags": [ "myapi:v1" ], - "operationId": "MyapiV1GetStringMap", + "operationId": "myapi:v1.getStringMap", "responses": { "200": { "description": "A JsonMap response", @@ -282,7 +282,7 @@ "tags": [ "myapi:v1" ], - "operationId": "MyapiV1GetStringArrayMap", + "operationId": "myapi:v1.getStringArrayMap", "responses": { "200": { "description": "A JsonMap response", @@ -302,7 +302,7 @@ "tags": [ "myapi:v1" ], - "operationId": "MyapiV1GetStringValueMap", + "operationId": "myapi:v1.getStringValueMap", "responses": { "200": { "description": "A JsonMap response", @@ -322,7 +322,7 @@ "tags": [ "myapi:v1" ], - "operationId": "MyapiV1GetEnumKeyMap", + "operationId": "myapi:v1.getEnumKeyMap", "responses": { "200": { "description": "A JsonMap response", @@ -342,7 +342,7 @@ "tags": [ "myapi:v1" ], - "operationId": "MyapiV1GetMapService", + "operationId": "myapi:v1.getMapService", "responses": { "200": { "description": "A MapEndpoint response", @@ -358,7 +358,7 @@ "tags": [ "myapi:v1" ], - "operationId": "MyapiV1GetMapSubclass", + "operationId": "myapi:v1.getMapSubclass", "responses": { "200": { "description": "A JsonMap response", diff --git a/endpoints-framework/src/test/resources/com/google/api/server/spi/swagger/map_endpoint_with_array.swagger b/endpoints-framework/src/test/resources/com/google/api/server/spi/swagger/map_endpoint_with_array.swagger index df5046d9..4732533a 100644 --- a/endpoints-framework/src/test/resources/com/google/api/server/spi/swagger/map_endpoint_with_array.swagger +++ b/endpoints-framework/src/test/resources/com/google/api/server/spi/swagger/map_endpoint_with_array.swagger @@ -26,7 +26,7 @@ "tags": [ "myapi:v1" ], - "operationId": "MyapiV1GetDateTimeKeyMap", + "operationId": "myapi:v1.getDateTimeKeyMap", "responses": { "200": { "description": "A Map_DateTime_String response", @@ -45,7 +45,7 @@ "tags": [ "myapi:v1" ], - "operationId": "MyapiV1GetMapOfStrings", + "operationId": "myapi:v1.getMapOfStrings", "responses": { "200": { "description": "A MapContainer response", @@ -61,7 +61,7 @@ "tags": [ "myapi:v1" ], - "operationId": "MyapiV1GetStringCollectionMap", + "operationId": "myapi:v1.getStringCollectionMap", "responses": { "200": { "description": "A Map_String_StringCollection response", @@ -83,7 +83,7 @@ "tags": [ "myapi:v1" ], - "operationId": "MyapiV1GetBooleanKeyMap", + "operationId": "myapi:v1.getBooleanKeyMap", "responses": { "200": { "description": "A Map_Boolean_String response", @@ -102,7 +102,7 @@ "tags": [ "myapi:v1" ], - "operationId": "MyapiV1GetDateKeyMap", + "operationId": "myapi:v1.getDateKeyMap", "responses": { "200": { "description": "A Map_DateTime_String response", @@ -121,7 +121,7 @@ "tags": [ "myapi:v1" ], - "operationId": "MyapiV1GetFloatKeyMap", + "operationId": "myapi:v1.getFloatKeyMap", "responses": { "200": { "description": "A Map_Float_String response", @@ -140,7 +140,7 @@ "tags": [ "myapi:v1" ], - "operationId": "MyapiV1GetIntKeyMap", + "operationId": "myapi:v1.getIntKeyMap", "responses": { "200": { "description": "A Map_Integer_String response", @@ -159,7 +159,7 @@ "tags": [ "myapi:v1" ], - "operationId": "MyapiV1GetLongKeyMap", + "operationId": "myapi:v1.getLongKeyMap", "responses": { "200": { "description": "A Map_Long_String response", @@ -178,7 +178,7 @@ "tags": [ "myapi:v1" ], - "operationId": "MyapiV1GetBazMap", + "operationId": "myapi:v1.getBazMap", "responses": { "200": { "description": "A Map_String_Baz response", @@ -197,7 +197,7 @@ "tags": [ "myapi:v1" ], - "operationId": "MyapiV1GetFooMap", + "operationId": "myapi:v1.getFooMap", "responses": { "200": { "description": "A Map_String_Foo response", @@ -216,7 +216,7 @@ "tags": [ "myapi:v1" ], - "operationId": "MyapiV1GetIntMap", + "operationId": "myapi:v1.getIntMap", "responses": { "200": { "description": "A Map_String_Integer response", @@ -236,7 +236,7 @@ "tags": [ "myapi:v1" ], - "operationId": "MyapiV1GetFooMapMap", + "operationId": "myapi:v1.getFooMapMap", "responses": { "200": { "description": "A Map_String_Map_String_Foo response", @@ -258,7 +258,7 @@ "tags": [ "myapi:v1" ], - "operationId": "MyapiV1GetStringMap", + "operationId": "myapi:v1.getStringMap", "responses": { "200": { "description": "A Map_String_String response", @@ -277,7 +277,7 @@ "tags": [ "myapi:v1" ], - "operationId": "MyapiV1GetStringArrayMap", + "operationId": "myapi:v1.getStringArrayMap", "responses": { "200": { "description": "A Map_String_StringCollection response", @@ -299,7 +299,7 @@ "tags": [ "myapi:v1" ], - "operationId": "MyapiV1GetStringValueMap", + "operationId": "myapi:v1.getStringValueMap", "responses": { "200": { "description": "A Map_String_StringValue response", @@ -318,7 +318,7 @@ "tags": [ "myapi:v1" ], - "operationId": "MyapiV1GetEnumKeyMap", + "operationId": "myapi:v1.getEnumKeyMap", "responses": { "200": { "description": "A Map_TestEnum_String response", @@ -337,7 +337,7 @@ "tags": [ "myapi:v1" ], - "operationId": "MyapiV1GetMapService", + "operationId": "myapi:v1.getMapService", "responses": { "200": { "description": "A MapEndpoint response", @@ -353,7 +353,7 @@ "tags": [ "myapi:v1" ], - "operationId": "MyapiV1GetMapSubclass", + "operationId": "myapi:v1.getMapSubclass", "responses": { "200": { "description": "A Map_Boolean_Integer response", diff --git a/endpoints-framework/src/test/resources/com/google/api/server/spi/swagger/multi_resource_endpoint.swagger b/endpoints-framework/src/test/resources/com/google/api/server/spi/swagger/multi_resource_endpoint.swagger index 7bddea2e..cfdfaa25 100644 --- a/endpoints-framework/src/test/resources/com/google/api/server/spi/swagger/multi_resource_endpoint.swagger +++ b/endpoints-framework/src/test/resources/com/google/api/server/spi/swagger/multi_resource_endpoint.swagger @@ -32,7 +32,7 @@ "tags": [ "multiresource:v1" ], - "operationId": "MultiresourceV1Get", + "operationId": "multiresource:v1.get", "responses": { "200": { "description": "A Foo response", @@ -48,7 +48,7 @@ "tags": [ "multiresource:v1.Resource1" ], - "operationId": "MultiresourceV1Resource1Get", + "operationId": "multiresource:v1.Resource1.get", "responses": { "200": { "description": "A Foo response", @@ -64,7 +64,7 @@ "tags": [ "multiresource:v1.Resource2" ], - "operationId": "MultiresourceV1Resource2Get", + "operationId": "multiresource:v1.Resource2.get", "responses": { "200": { "description": "A Foo response", diff --git a/endpoints-framework/src/test/resources/com/google/api/server/spi/swagger/multi_version_endpoint.swagger b/endpoints-framework/src/test/resources/com/google/api/server/spi/swagger/multi_version_endpoint.swagger index f6a33068..fb59a521 100644 --- a/endpoints-framework/src/test/resources/com/google/api/server/spi/swagger/multi_version_endpoint.swagger +++ b/endpoints-framework/src/test/resources/com/google/api/server/spi/swagger/multi_version_endpoint.swagger @@ -29,7 +29,7 @@ "tags": [ "myapi:v1" ], - "operationId": "MyapiV1Get", + "operationId": "myapi:v1.get", "responses": { "200": { "description": "A Foo response", @@ -45,7 +45,7 @@ "tags": [ "myapi:v2" ], - "operationId": "MyapiV2Get", + "operationId": "myapi:v2.get", "responses": { "200": { "description": "A Foo response", diff --git a/endpoints-framework/src/test/resources/com/google/api/server/spi/swagger/multiple_scopes.swagger b/endpoints-framework/src/test/resources/com/google/api/server/spi/swagger/multiple_scopes.swagger index 138b819d..69938e1c 100644 --- a/endpoints-framework/src/test/resources/com/google/api/server/spi/swagger/multiple_scopes.swagger +++ b/endpoints-framework/src/test/resources/com/google/api/server/spi/swagger/multiple_scopes.swagger @@ -26,7 +26,7 @@ "tags": [ "multipleScopes:v1" ], - "operationId": "MultipleScopesV1NoOverride", + "operationId": "multipleScopes:v1.noOverride", "responses": { "204": { "description": "A successful response" @@ -51,7 +51,7 @@ "tags": [ "multipleScopes:v1" ], - "operationId": "MultipleScopesV1OverrideAudience", + "operationId": "multipleScopes:v1.overrideAudience", "responses": { "204": { "description": "A successful response" @@ -76,7 +76,7 @@ "tags": [ "multipleScopes:v1" ], - "operationId": "MultipleScopesV1ScopeOverride", + "operationId": "multipleScopes:v1.scopeOverride", "responses": { "204": { "description": "A successful response" @@ -101,7 +101,7 @@ "tags": [ "multipleScopes:v1" ], - "operationId": "MultipleScopesV1UnknownScope", + "operationId": "multipleScopes:v1.unknownScope", "responses": { "204": { "description": "A successful response" @@ -128,9 +128,9 @@ "authorizationUrl": "https://accounts.google.com/o/oauth2/v2/auth", "flow": "implicit", "scopes": { + "https://www.googleapis.com/auth/userinfo.email": "View your email address", "https://mail.google.com/": "Read, send, delete, and manage your email", - "unknownScope": "unknownScope", - "https://www.googleapis.com/auth/userinfo.email": "View your email address" + "unknownScope": "unknownScope" }, "x-google-issuer": "https://accounts.google.com", "x-google-jwks_uri": "https://www.googleapis.com/oauth2/v1/certs", @@ -152,9 +152,9 @@ "authorizationUrl": "https://accounts.google.com/o/oauth2/v2/auth", "flow": "implicit", "scopes": { + "https://www.googleapis.com/auth/userinfo.email": "View your email address", "https://mail.google.com/": "Read, send, delete, and manage your email", - "unknownScope": "unknownScope", - "https://www.googleapis.com/auth/userinfo.email": "View your email address" + "unknownScope": "unknownScope" }, "x-google-issuer": "accounts.google.com", "x-google-jwks_uri": "https://www.googleapis.com/oauth2/v1/certs", diff --git a/endpoints-framework/src/test/resources/com/google/api/server/spi/swagger/required_parameters_endpoint.swagger b/endpoints-framework/src/test/resources/com/google/api/server/spi/swagger/required_parameters_endpoint.swagger index c6dd0e52..3fa64dab 100644 --- a/endpoints-framework/src/test/resources/com/google/api/server/spi/swagger/required_parameters_endpoint.swagger +++ b/endpoints-framework/src/test/resources/com/google/api/server/spi/swagger/required_parameters_endpoint.swagger @@ -26,7 +26,7 @@ "tags": [ "requiredProperties:v1" ], - "operationId": "RequiredPropertiesV1GetRequiredProperties", + "operationId": "requiredProperties:v1.getRequiredProperties", "responses": { "200": { "description": "A RequiredProperties response", diff --git a/endpoints-framework/src/test/resources/com/google/api/server/spi/swagger/special_chars.swagger b/endpoints-framework/src/test/resources/com/google/api/server/spi/swagger/special_chars.swagger index 7d54bf6b..6844b429 100644 --- a/endpoints-framework/src/test/resources/com/google/api/server/spi/swagger/special_chars.swagger +++ b/endpoints-framework/src/test/resources/com/google/api/server/spi/swagger/special_chars.swagger @@ -26,7 +26,7 @@ "tags": [ "specialChars:v1" ], - "operationId": "SpecialCharsV1ParamSpecialChar1", + "operationId": "specialChars:v1.paramSpecialChar1", "parameters": [ { "$ref": "#/parameters/%C2%B5_query_parameter" @@ -55,7 +55,7 @@ "tags": [ "specialChars:v1" ], - "operationId": "SpecialCharsV1ParamSpecialChar2", + "operationId": "specialChars:v1.paramSpecialChar2", "parameters": [ { "$ref": "#/parameters/%C2%B5_query_parameter" diff --git a/endpoints-framework/src/test/resources/com/google/api/server/spi/swagger/third_party_auth.swagger b/endpoints-framework/src/test/resources/com/google/api/server/spi/swagger/third_party_auth.swagger index 03d70c39..2450b4c7 100644 --- a/endpoints-framework/src/test/resources/com/google/api/server/spi/swagger/third_party_auth.swagger +++ b/endpoints-framework/src/test/resources/com/google/api/server/spi/swagger/third_party_auth.swagger @@ -26,7 +26,7 @@ "tags": [ "thirdparty:v1" ], - "operationId": "ThirdpartyV1AuthOverride", + "operationId": "thirdparty:v1.authOverride", "responses": { "204": { "description": "A successful response" @@ -44,7 +44,7 @@ "tags": [ "thirdparty:v1" ], - "operationId": "ThirdpartyV1NoOverride", + "operationId": "thirdparty:v1.noOverride", "responses": { "204": { "description": "A successful response" From b734689a38891bfc468662ea14ff814857e15b3d Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Cl=C3=A9ment=20Denis?= Date: Tue, 24 Sep 2019 17:52:53 +0200 Subject: [PATCH 3/3] Additional test for String multiple serializers --- .../spi/config/validation/ApiConfigValidatorTest.java | 6 +++++- 1 file changed, 5 insertions(+), 1 deletion(-) diff --git a/endpoints-framework/src/test/java/com/google/api/server/spi/config/validation/ApiConfigValidatorTest.java b/endpoints-framework/src/test/java/com/google/api/server/spi/config/validation/ApiConfigValidatorTest.java index db671bb3..632e66d4 100644 --- a/endpoints-framework/src/test/java/com/google/api/server/spi/config/validation/ApiConfigValidatorTest.java +++ b/endpoints-framework/src/test/java/com/google/api/server/spi/config/validation/ApiConfigValidatorTest.java @@ -38,6 +38,7 @@ import com.google.api.server.spi.config.Transformer; import com.google.api.server.spi.config.model.ApiConfig; import com.google.api.server.spi.config.model.SchemaRepository; +import com.google.api.server.spi.config.model.Serializers; import com.google.api.server.spi.testing.DefaultValueSerializer; import com.google.api.server.spi.testing.DuplicateMethodEndpoint; import com.google.api.server.spi.testing.PassAuthenticator; @@ -238,12 +239,15 @@ final class TestSerializer extends DefaultValueSerializer {} public void testMultipleSerializersInstalled() throws Exception { // TODO: The generic component of Comparable causes validation to miss certain error // cases like this. - @SuppressWarnings("rawtypes") final class ComparableSerializer extends DefaultValueSerializer, Integer> {} final class CharSequenceSerializer extends DefaultValueSerializer {} config.getSerializationConfig().addSerializationConfig(ComparableSerializer.class); config.getSerializationConfig().addSerializationConfig(CharSequenceSerializer.class); + List>> serializerClasses = Serializers + .getSerializerClasses(TypeToken.of(String.class), config.getSerializationConfig()); + assertThat(serializerClasses.size()).isEqualTo(2); + try { validator.validate(config); fail("Expected MultipleTransformersException.");