google / gnostic

A compiler for APIs described by the OpenAPI Specification with plugins for code generation and other API support tasks.
Apache License 2.0
2.03k stars 241 forks source link

[bug] OpenAPI 3: schema items - Value MUST be an object and not an array #433

Open zaakn opened 3 months ago

zaakn commented 3 months ago

Related to https://github.com/google/gnostic/issues/83, https://github.com/google/gnostic/pull/84

After the PR was merged, it was rolled back in this commit: https://github.com/google/gnostic/commit/540b24903cf26557fb13493cb9a43804da98461a#diff-38bb6d02d3442ac95d8613ef4fed0b1cb70f7bc2001d1abe71bafbede04a0dd1

 - SchemaOrReference items = 30;
 + ItemsItem items = 30;

As the comments in the latest code say, I also agree that the wrong model is being used. https://github.com/google/gnostic/blob/ad271d568b713ad381ad6751cd8b950eade78d98/surface/model_openapiv3.go#L386-L397

Using the protoc-gen-openapi:

message Foobar {
    repeated string domains = 1 [
        (openapi.v3.property).items.schema_or_reference = {
            schema: {
                format: "hostname";
            }
        }
    ];
}

output OpenAPI yaml:

Foobar:
    type: object
    properties:
        domains:
            type: array
            items:
                - type: string
                - format: hostname

Expected:

Foobar:
    type: object
    properties:
        domains:
            type: array
            items:
                type: string
                format: hostname