From 5f59dc31bbf456d0c1f5f3020ce36091b7da70cd Mon Sep 17 00:00:00 2001 From: Lisa Cawley Date: Thu, 3 Oct 2024 08:17:44 -0700 Subject: [PATCH] Add @doc_tag to override default tag behaviour (#2961) MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Co-authored-by: Laurent Saint-FĂ©lix --- api-design-guidelines/naming.md | 2 ++ compiler-rs/clients_schema/src/lib.rs | 3 +++ .../clients_schema_to_openapi/src/paths.rs | 6 +++++- .../clients_schema_to_openapi/src/schemas.rs | 2 +- .../pkg/compiler_wasm_lib_bg.wasm | Bin 621769 -> 622496 bytes compiler/src/model/build-model.ts | 1 + compiler/src/model/json-spec.ts | 1 + compiler/src/model/metamodel.ts | 2 +- compiler/src/model/utils.ts | 5 ++++- docs/modeling-guide.md | 18 ++++++++++++++++++ output/openapi/elasticsearch-openapi.json | 2 +- .../elasticsearch-serverless-openapi.json | 2 +- output/schema/schema.json | 3 ++- .../IndicesCreateDataStreamRequest.ts | 1 + typescript-generator/src/metamodel.ts | 2 +- 15 files changed, 42 insertions(+), 8 deletions(-) diff --git a/api-design-guidelines/naming.md b/api-design-guidelines/naming.md index 6ebd58feb1..d503b408ac 100644 --- a/api-design-guidelines/naming.md +++ b/api-design-guidelines/naming.md @@ -100,6 +100,8 @@ Care should be given to ensure that: - All member APIs of a given namespace are logically related and form a coherent set. - Related functionality is not distributed across multiple arbitrary namespaces +NOTE: The endpoint namespaces are used to generate tags in the OpenAPI documents. The tags are ultimately used to group the endpoints in the API documentation. To override the default tag, use `@doc_tag`. + ### Use the global namespace sparingly The top-level global namespace should be treated with particular care. It is traditionally reserved for search and document endpoints only. A case should be made and a broader discussion carried out before new endpoints unrelated to these functions are added to the global namespace. diff --git a/compiler-rs/clients_schema/src/lib.rs b/compiler-rs/clients_schema/src/lib.rs index 17d8c70ed0..7df0bc82e7 100644 --- a/compiler-rs/clients_schema/src/lib.rs +++ b/compiler-rs/clients_schema/src/lib.rs @@ -815,6 +815,9 @@ pub struct Endpoint { #[serde(skip_serializing_if = "Option::is_none")] pub availability: Option, + #[serde(skip_serializing_if = "Option::is_none")] + pub doc_tag: Option, + /// If missing, there is not yet a request definition for this endpoint. #[serde(skip_serializing_if = "Option::is_none")] pub request: Option, diff --git a/compiler-rs/clients_schema_to_openapi/src/paths.rs b/compiler-rs/clients_schema_to_openapi/src/paths.rs index 7fc7f480a8..878646970a 100644 --- a/compiler-rs/clients_schema_to_openapi/src/paths.rs +++ b/compiler-rs/clients_schema_to_openapi/src/paths.rs @@ -196,7 +196,11 @@ pub fn add_endpoint( // Create the operation, it will be repeated if we have several methods let operation = openapiv3::Operation { - tags: vec![namespace.to_string()], + tags: if let Some(doc_tag) = &endpoint.doc_tag { + vec![doc_tag.clone()] + } else { + vec![namespace.to_string()] + }, summary: sum_desc.summary, description: sum_desc.description, // external_docs: tac.convert_external_docs(endpoint), diff --git a/compiler-rs/clients_schema_to_openapi/src/schemas.rs b/compiler-rs/clients_schema_to_openapi/src/schemas.rs index 256eb5d3b0..00d0c69b4f 100644 --- a/compiler-rs/clients_schema_to_openapi/src/schemas.rs +++ b/compiler-rs/clients_schema_to_openapi/src/schemas.rs @@ -38,7 +38,7 @@ const SCHEMA_PLACEHOLDER: ReferenceOr = ReferenceOr::Reference { /// Convert `schema.json` type and value definitions to OpenAPI schemas: /// /// The `convert_*` functions return a concrete schema and not a reference and do not store them in -/// the OpenAPI `components.schema`. This is the role of `for_type_name` hat creates and stores the +/// the OpenAPI `components.schema`. This is the role of `for_type_name` that creates and stores the /// schema and returns a reference. impl<'a> TypesAndComponents<'a> { /// Convert a value. Returns a schema reference and not a concrete schema, as values can diff --git a/compiler-rs/compiler-wasm-lib/pkg/compiler_wasm_lib_bg.wasm b/compiler-rs/compiler-wasm-lib/pkg/compiler_wasm_lib_bg.wasm index 9528874df406b705e4572ee03529b94622259784..6b945650939b19a5444fafbd4a3c9e6a8b2e034b 100644 GIT binary patch delta 64364 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�j{XjC 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 Hx%mG95dbKh delta 63044 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 bLv+kECMHZ6Hgzb@rJN!j9Z!0q@y`DP=1SDq diff --git a/compiler/src/model/build-model.ts b/compiler/src/model/build-model.ts index f59d1359fb..dffbde8b7c 100644 --- a/compiler/src/model/build-model.ts +++ b/compiler/src/model/build-model.ts @@ -67,6 +67,7 @@ export function compileEndpoints (): Record { name: api, description: spec.documentation.description, docUrl: spec.documentation.url, + docTag: spec.docTag, // Setting these values by default should be removed // when we no longer use rest-api-spec stubs as the // source of truth for stability/visibility. diff --git a/compiler/src/model/json-spec.ts b/compiler/src/model/json-spec.ts index 491321b5ec..ff4739b308 100644 --- a/compiler/src/model/json-spec.ts +++ b/compiler/src/model/json-spec.ts @@ -61,6 +61,7 @@ export interface JsonSpec { description: string required?: boolean } + docTag?: string } export default function buildJsonSpec (): Map { diff --git a/compiler/src/model/metamodel.ts b/compiler/src/model/metamodel.ts index 9e73372d1c..f67053936a 100644 --- a/compiler/src/model/metamodel.ts +++ b/compiler/src/model/metamodel.ts @@ -408,7 +408,7 @@ export class Endpoint { docId?: string deprecation?: Deprecation availability: Availabilities - + docTag?: string /** * If the request value is `null` it means that there is not yet a * request type definition for this endpoint. diff --git a/compiler/src/model/utils.ts b/compiler/src/model/utils.ts index e330242eef..60e8ab7f31 100644 --- a/compiler/src/model/utils.ts +++ b/compiler/src/model/utils.ts @@ -625,7 +625,7 @@ export function hoistRequestAnnotations ( request: model.Request, jsDocs: JSDoc[], mappings: Record, response: model.TypeName | null ): void { const knownRequestAnnotations = [ - 'rest_spec_name', 'behavior', 'class_serializer', 'index_privileges', 'cluster_privileges', 'doc_id', 'availability' + 'rest_spec_name', 'behavior', 'class_serializer', 'index_privileges', 'cluster_privileges', 'doc_id', 'availability', 'doc_tag' ] // in most of the cases the jsDocs comes in a single block, // but it can happen that the user defines multiple single line jsDoc. @@ -696,6 +696,9 @@ export function hoistRequestAnnotations ( for (const [availabilityName, availabilityValue] of Object.entries(availabilities)) { endpoint.availability[availabilityName] = availabilityValue } + } else if (tag === 'doc_tag') { + assert(jsDocs, value.trim() !== '', `Request ${request.name.name}'s @doc_tag cannot be empty`) + endpoint.docTag = value.trim() } else { assert(jsDocs, false, `Unhandled tag: '${tag}' with value: '${value}' on request ${request.name.name}`) } diff --git a/docs/modeling-guide.md b/docs/modeling-guide.md index 123a844acb..b34470daf5 100644 --- a/docs/modeling-guide.md +++ b/docs/modeling-guide.md @@ -631,6 +631,24 @@ class Request { foobar,/guide/en/example ``` +#### `@doc_tag` + +An OpenAPI tag that is used to group similar endpoints in the API documentation. +If it is absent, by default the tag is derived from the first part of the namespace. + +```ts +/** + * @rest_spec_name api + * @doc_tag my tag + */ +class Request { + ... +} +``` + +NOTE: In the OpenAPI specification, operations can have multiple tags. However, we currently support only a single tag. + + #### `@codegen_name` A custom name that can be used to display the property. Useful in Enums and diff --git a/output/openapi/elasticsearch-openapi.json b/output/openapi/elasticsearch-openapi.json index ff20dea4e0..89d4acf9ff 100644 --- a/output/openapi/elasticsearch-openapi.json +++ b/output/openapi/elasticsearch-openapi.json @@ -10769,7 +10769,7 @@ }, "put": { "tags": [ - "indices" + "data stream" ], "summary": "Create a data stream", "description": "Creates a data stream.\nYou must have a matching index template with data stream enabled.", diff --git a/output/openapi/elasticsearch-serverless-openapi.json b/output/openapi/elasticsearch-serverless-openapi.json index 388d5295c2..60418b1f38 100644 --- a/output/openapi/elasticsearch-serverless-openapi.json +++ b/output/openapi/elasticsearch-serverless-openapi.json @@ -6422,7 +6422,7 @@ }, "put": { "tags": [ - "indices" + "data stream" ], "summary": "Create a data stream", "description": "Creates a data stream.\nYou must have a matching index template with data stream enabled.", diff --git a/output/schema/schema.json b/output/schema/schema.json index f95c1a76da..d869bf3b2f 100644 --- a/output/schema/schema.json +++ b/output/schema/schema.json @@ -6148,6 +6148,7 @@ } }, "description": "Create a data stream.\nCreates a data stream.\nYou must have a matching index template with data stream enabled.", + "docTag": "data stream", "docUrl": "https://www.elastic.co/guide/en/elasticsearch/reference/master/data-streams.html", "name": "indices.create_data_stream", "privileges": { @@ -127917,7 +127918,7 @@ } } ], - "specLocation": "indices/create_data_stream/IndicesCreateDataStreamRequest.ts#L24-L57" + "specLocation": "indices/create_data_stream/IndicesCreateDataStreamRequest.ts#L24-L58" }, { "kind": "response", diff --git a/specification/indices/create_data_stream/IndicesCreateDataStreamRequest.ts b/specification/indices/create_data_stream/IndicesCreateDataStreamRequest.ts index c52129519a..9a22677a50 100644 --- a/specification/indices/create_data_stream/IndicesCreateDataStreamRequest.ts +++ b/specification/indices/create_data_stream/IndicesCreateDataStreamRequest.ts @@ -29,6 +29,7 @@ import { Duration } from '@_types/Time' * @availability stack since=7.9.0 stability=stable * @availability serverless stability=stable visibility=public * @index_privileges create_index + * @doc_tag data stream */ export interface Request extends RequestBase { path_parts: { diff --git a/typescript-generator/src/metamodel.ts b/typescript-generator/src/metamodel.ts index 9e73372d1c..f67053936a 100644 --- a/typescript-generator/src/metamodel.ts +++ b/typescript-generator/src/metamodel.ts @@ -408,7 +408,7 @@ export class Endpoint { docId?: string deprecation?: Deprecation availability: Availabilities - + docTag?: string /** * If the request value is `null` it means that there is not yet a * request type definition for this endpoint.