Разделите OperationId между двумя разными путями в openapi

#openapi #openapi-generator

#openapi #openapi-генератор

Вопрос:

прежде всего, я хочу извиниться за свой английский. Это не моя вина, а испанская система образования: D.

Я только начал с миграции openapi, и мне нужна ваша помощь. Мне нравится использовать разные пути, которые ссылаются на один и тот же OperationId. Я объяснил это на примере:

 paths:
  "/my-path/my-resource":
    get:
      tags:
        - my-api
      operationId: getMyResource
      responses:
         ...
         [omitted]
         ...
  "/another-path/another-resource":
    get:
      tags:
        - my-api
      operationId: getMyResource
      responses:
         ...
         [omitted]
         ...
  

Возможно ли это?

Большое спасибо за ваше время.

Ответ №1:

Ваш вопрос помечен openapi-generator , но, похоже, это общий вопрос о спецификации OpenAPI.

Идентификаторы операций должны быть уникальными для каждой операции. Раздел Operation object спецификации определяет OperationId как:

Уникальная строка, используемая для идентификации операции. Идентификатор ДОЛЖЕН быть уникальным среди всех операций, описанных в API. Значение OperationId чувствительно к регистру. Инструменты и библиотеки МОГУТ использовать OperationId для уникальной идентификации операции, поэтому рекомендуется следовать общим соглашениям об именовании в программировании.

Выделенное жирным шрифтом «с учетом регистра» взято непосредственно из спецификации, но подчеркивает отличный момент в передаче этих спецификаций через инструментарий (именно поэтому они должны быть уникальными). В openapi-generator мы используем OperationId для определения имен методов или функций в сгенерированных выходных данных. Многие языки не поддерживают перегруженные методы, а некоторые даже не поддерживают нестандартный корпус (например, Go). Наш инструментарий преобразует OperationId в соответствии с языком вывода и, следовательно, в данном случае более строгий, чем спецификация. Вы можете создать пользовательский генератор и расширить логику, которая обрабатывает операции, если вам абсолютно необходимы повторяющиеся имена методов и если ваш целевой вывод поддерживает его.

Комментарии:

1. Соответствующая часть здесь не учитывает регистр, но «Идентификатор ДОЛЖЕН быть уникальным среди всех операций, описанных в API». Таким образом, ответ на вопрос OP — нет.

2. @Helen спасибо, я забыл, отвечая, что OP не является носителем языка. Я обновил свой ответ, чтобы более четко указать требование уникальности заранее, и что объяснение, которое я предоставил после цитаты из спецификации, описывает, почему это так.