1
resposta

Alterar "example" para campo específico $ref

Estou fazendo uma documentação onde defini um modelo e estou usando como referencia para algumas requisições.

Porém, para uma chamada eu gostaria de passar o valor "null" e em outra o valor default definido no "definitions".

Isso é possível?

Exemplo:

paths:
  '/cliente':
    post:
      tags:
        - Cliente
      summary: Cadastra Cliente
      description: Cadastra um novo cliente
      operationId: cadastraCliente
      parameters:
        - in: body
          name: cliente_
          schema:
            $ref: '#/definitions/Cliente'
      responses:
        201:
          description: Cadastro efetuado com sucesso
          schema:
            $ref: '#/definitions/Cliente'
        400:
          description: Requisição inválida
        500:
          description: Erro interno no servidor>

----------------------------------------------------------------------
  Cliente:
    type: object
    properties:
      id:
        type: integer
        format: int64
        example: 234
      titular:
        type: string
        example: Janete Silva
      cpf:
        type: string
        minLength: 11
        maxLength: 11
        example: 01234567890
      senha:
        type: string
        format: password
        example: senha123
      contas:
        type: array
        items:
          $ref: '#/definitions/Conta'

no exemplo acima, o campo 'id' do cliente esta com 'example' = '234', existe uma forma de alterar o example para 'null' em algum campo desta estrutura mantendo a referencia?

schema:
    $ref: '#/definitions/Cliente'
    quero que o exempla nesse id = 'null' (e em outro seja o que esta no definition normal)

Será que ficou claro a dúvida?

1 resposta

Olá Estenio, tudo bem?

Infelizmente, o Swagger não permite que você substitua o valor de um campo específico apenas em uma chamada, mantendo a referência para o valor definido no 'definitions' em outras chamadas. O 'example' definido no 'definitions' é utilizado como um exemplo padrão para todas as chamadas que fazem referência a ele.

Uma alternativa seria criar um novo modelo no 'definitions' com o campo 'id' definido como 'null' e utilizá-lo apenas na chamada em que você deseja que o valor seja 'null'. Dessa forma, você teria duas definições para o modelo 'Cliente', uma com o 'id' definido como 'null' e outra com o 'id' definido com o valor padrão.

Por exemplo:

definitions:
  Cliente:
    type: object
    properties:
      id:
        type: integer
        format: int64
        example: 234
      titular:
        type: string
        example: Janete Silva
      cpf:
        type: string
        minLength: 11
        maxLength: 11
        example: 01234567890
      senha:
        type: string
        format: password
        example: senha123
      contas:
        type: array
        items:
          $ref: '#/definitions/Conta'
  ClienteComIdNull:
    type: object
    properties:
      id:
        type: null
      titular:
        type: string
        example: Janete Silva
      cpf:
        type: string
        minLength: 11
        maxLength: 11
        example: 01234567890
      senha:
        type: string
        format: password
        example: senha123
      contas:
        type: array
        items:
          $ref: '#/definitions/Conta'

E na chamada em que você deseja que o valor do campo 'id' seja 'null', você utiliza a referência para o modelo 'ClienteComIdNull':

paths:
  '/cliente':
    post:
      tags:
        - Cliente
      summary: Cadastra Cliente
      description: Cadastra um novo cliente
      operationId: cadastraCliente
      parameters:
        - in: body
          name: cliente_
          schema:
            $ref: '#/definitions/ClienteComIdNull'
      responses:
        201:
          description: Cadastro efetuado com sucesso
          schema:
            $ref: '#/definitions/Cliente'
        400:
          description: Requisição inválida
        500:
          description: Erro interno no servidor

Dessa forma, você terá controle sobre o valor do campo 'id' em cada chamada, mantendo a referência para o modelo padrão definido no 'definitions'.

Espero ter ajudado e bons estudos!

Quer mergulhar em tecnologia e aprendizagem?

Receba a newsletter que o nosso CEO escreve pessoalmente, com insights do mercado de trabalho, ciência e desenvolvimento de software