Тело запроса не отображается в примере curl с OpenApi3 + widdershins + shins

Я создаю документацию по API для наших конечных точек Java. Я использую widdershins для преобразования нашего yaml-файла openAPI3.0 в уценку. Затем я использую shins для преобразования файла уценки в HTML. Тело запроса для всех наших конечных точек не отображается в сгенерированных примерах cURL. Почему это? Это противоречит цели наличия примеров cURL, потому что копирование и вставка примера cURL без требуемого тела не будет работать. Может ли кто-нибудь порекомендовать обходной путь или альтернативный инструмент, который генерирует хорошую документацию с полными примерами cURL?

Пример конечной точки из нашего файла openAPI.yaml...

post:
  tags:
  - Tools
  description: Installs a tool on a user's account
  operationId: Install Tool
  requestBody:
    description: UserTool object that needs to be installed on the user's account
    content:
      application/json:
        schema:
          $ref: '#/components/schemas/UserTool'
    required: true
  parameters:
  responses:
    default:
      description: default response
      content:
        application/json:
          schema:
            $ref: '#/components/schemas/Message'

Это документация, которую наша инструментальная цепочка генерирует из этого файла yaml... Мы хотели бы добавить строку, подобную приведенной ниже (выделено серым цветом), в наши примеры cURL. Это фрагмент файла уценки, который Виддершинс создает из нашего yaml-файла openAPI. Я вручную добавил - “d

Этот вопрос / ответ о переполнении стека подсказывает ответ: невозможно включить параметр body в пример кода с помощью swagger или openAPI. Это правильно? Если да, то почему? Что за рассуждение?

Ура, Гидеон

2 ответа

У меня тоже была такая же проблема. В результате проб и ошибок было обнаружено, что поведение, отображаемое на curl, зависит от значения in.

Пожалуйста, посмотрите на перечисление ParameterIn.

      public enum ParameterIn {
    DEFAULT(""),
    HEADER("header"),
    QUERY("query"),
    PATH("path"),
    COOKIE("cookie");

В первый раз я попробовал, как показано ниже:

      new Parameter().name("foo").in(ParameterIn.HEADER.name())

Но имя возвращается как «ЗАГОЛОВОК», поэтому чванство (или OpenAPI) распознается в заголовке. После перечисления ParameterIn должен быть нижний символ, например «заголовок».

Итак, вы можете исправить это так

      new Parameter().name("foo").in(ParameterIn.HEADER.toString())

или

      new Parameter().name("foo").in("header")

Я также столкнулся с той же проблемой, и я немного покопался. Оказывается, мне пришлось установить для опции options.httpSnippet в widdershins значение true, чтобы отображались параметры requestBody. Однако установка значения true показывает параметры только в том случае, если тип содержимого имеет значение application/json. Для multipart-form-data вам также необходимо установить для options.experimental значение true.

К сожалению, в widdershins есть ошибка для обработки application/x-www-form-urlencoded content-type. Я создал для него PR, который вы, вероятно, можете вручную исправить в пакете widdershins. PR-ссылка: https://github.com/Mermade/widdershins/pull/492/files

Другие вопросы по тегам