Skip to content

[GetCollectionResponseSchema] Does not disambiguate paths that share the same "/providers" suffix #750

Open
@mikeharder

Description

@mikeharder

Overview

In the following PR, rule GetCollectionResponseSchema raised an error that appears to be a false positive, caused by two paths that share the same "/providers..." suffix.

Azure/azure-rest-api-specs#30656 (comment)

My first question is whether this scenario, where two paths in a spec only vary by a /subscriptions/{subscriptionId} prefix, but return different data types, should even be allowed?

@bdefoy, @rkmanda: What do you think?

If not, then the rule is technically correct to raise an error here, but the error message is misleading.

If so, then the rule will need to be updated to allow it. Inspecting the code, I believe the root cause is around here, since it only considers the path after the last index of "/providers". This code would need to be updated, to consider the prefix before this as well.

const matchedPaths = allPathKeys.filter(
/**
* path may end with "/", so here we remove it
*/
(p) =>
p
.substr(p.lastIndexOf("/providers"))
.replace(/{[^/]+}/gi, "{}")
.replace(/\/$/gi, "") === possibleCollectionApiPath.replace(/{[^/]+}/gi, "{}"),

V1 APIs

/subscriptions/{subscriptionId}/providers/Microsoft.HybridCompute/locations/{location}/publishers/{publisher}/extensionTypes/{extensionType}/versions/{version}
operationId: ExtensionMetadata_Get
Response: #/definitions/ExtensionValue

/subscriptions/{subscriptionId}/providers/Microsoft.HybridCompute/locations/{location}/publishers/{publisher}/extensionTypes/{extensionType}/versions
operationId: ExtensionMetadata_List
Response: #/definitions/ExtensionValueListResult

    "ExtensionValueListResult": {
      "type": "object",
      "properties": {
        "value": {
          "type": "array",
          "readOnly": true,
          "items": {
            "$ref": "#/definitions/ExtensionValue"
          },

V2 APIs

/providers/Microsoft.HybridCompute/locations/{location}/publishers/{publisher}/extensionTypes/{extensionType}/versions/{version}
operationId: ExtensionMetadataV2_Get
Response: #/definitions/ExtensionValueV2

/providers/Microsoft.HybridCompute/locations/{location}/publishers/{publisher}/extensionTypes/{extensionType}/versions
operationId: ExtensionMetadataV2_List
Response: #/definitions/ExtensionValueListResultV2

    "ExtensionValueListResultV2": {
      "type": "object",
      "properties": {
        "value": {
          "type": "array",
          "readOnly": true,
          "items": {
            "$ref": "#/definitions/ExtensionValueV2"
          },

Metadata

Metadata

Assignees

Labels

No labels
No labels

Type

No type

Projects

No projects

Milestone

No milestone

Relationships

None yet

Development

No branches or pull requests

Issue actions