Apidog Docs
🇧🇷 Português (Brasil)
  • 🇺🇸 English
  • 🇯🇵 日本語
  • 🇪🇸 Español
  • 🇰🇷 한국인
  • 🇨🇳 简体中文
  • 🇵🇹 Português (Portugal)
  • 🇮🇩 Bahasa Indonesia
  • 🇧🇷 Português (Brasil)
  • 🇻🇳 Tiếng Việt
  • 🇨🇳 繁體中文
🇧🇷 Português (Brasil)
  • 🇺🇸 English
  • 🇯🇵 日本語
  • 🇪🇸 Español
  • 🇰🇷 한국인
  • 🇨🇳 简体中文
  • 🇵🇹 Português (Portugal)
  • 🇮🇩 Bahasa Indonesia
  • 🇧🇷 Português (Brasil)
  • 🇻🇳 Tiếng Việt
  • 🇨🇳 繁體中文
🇧🇷 Português (Brasil)
  • 🇺🇸 English
  • 🇯🇵 日本語
  • 🇪🇸 Español
  • 🇰🇷 한국인
  • 🇨🇳 简体中文
  • 🇵🇹 Português (Portugal)
  • 🇮🇩 Bahasa Indonesia
  • 🇧🇷 Português (Brasil)
  • 🇻🇳 Tiếng Việt
  • 🇨🇳 繁體中文
Learning Center
HomeSupport CenterAPI ReferencesDownloadChangelog
Learning Center
HomeSupport CenterAPI ReferencesDownloadChangelog
  1. Schemas
  • Centro de Aprendizado da Apidog
  • Primeiros passos
    • Introdução ao Apidog
    • Conceitos básicos no Apidog
    • Navegando pelo Apidog
    • Início rápido
      • Visão geral
      • Criando um Endpoint
      • Fazendo uma Requisição
      • Adicionando uma assertiva
      • Criação de Cenários de Teste
      • Compartilhamento da documentação da API
      • Explore Mais
    • Migração para o Apidog
      • Visão geral
      • Importação Manual
      • Importação Agendada (Vincular Fontes de Dados)
      • Opções de importação
      • Exportar Dados
      • Importar de
        • Importar do Postman
        • Importar especificação OpenAPI
        • Importar cURL
        • Importar Markdowns
        • Importar do Insomnia
        • Importar do apiDoc
        • Importar arquivo .har
        • Importar WSDL
  • Dados de API mock
    • Visão geral
    • Smart Mock
    • Mock personalizado
    • Sequência de Prioridade do Mock
    • Scripts de Mock
    • Mock na Nuvem
    • Mock do Runner Auto-hospedado
    • Idioma do Mock (Locales)
  • Conta e preferências
    • Configurações da Conta
    • Geração de Token de Acesso OpenAPI
    • Notificação
    • Configurações de idioma
    • Teclas de Atalho
    • Configuração de Proxy de Rede
    • Backup de Dados
    • Atualizando o Apidog
    • Exclusão da conta
    • Recursos Experimentais
  • Enviar requisições
    • Visão geral
    • Depuração de SSE
    • Cliente MCP
    • Socket.IO
    • WebSocket
    • Webhook
    • SOAP ou WebService
    • GraphQL
    • gRPC
    • Use Agentes de Proxy de Requisição para Depuração
    • Criar requisições
      • Histórico de Requisições
      • Conceitos Básicos de Requisições
      • Parâmetros e Corpo
      • Cabeçalhos da Requisição
      • Configurações da Requisição
      • Depurar Requisições
      • Salvando Requisições como Endpoints
      • HTTP/2
    • Autenticação e autorização
      • Visão geral
      • Certificados de CA e de Cliente
      • Tipos de autorização
      • Digest Auth
      • OAuth 1.0
      • OAuth 2.0
      • Autenticação Hawk
      • Kerberos
      • NTLM
      • Akamai EdgeGrid
    • Resposta e cookies
      • Visualização de respostas de API
      • Gerenciamento de Cookies
      • Visão geral
  • Desenvolver e depurar APIs
    • Visão geral
    • Gerando Requisições
    • Envio de Requisições
    • Casos de Depuração
    • Casos de teste
    • Valores Dinâmicos
    • Validação de Respostas
    • Design-First vs Request-First
    • Geração de Código
    • Ambientes e variáveis
      • Visão geral
      • Usando variáveis
      • Gerenciamento de Ambientes
    • Segredos do cofre
      • Visão geral
      • HashiCorp Vault
      • Azure Key Vault
      • AWS Secrets Manager
    • Módulos de valores dinâmicos
      • Airline
      • Animal
      • Cor
      • Comércio
      • Empresa
      • Banco de Dados
      • Tipo de dados
      • Data
      • Finanças
      • Comida
      • Git
      • Hacker
      • Helpers
      • Imagem
      • Internet
      • Localização
      • Lorem
      • Música
      • Número
      • Pessoa
      • Telefone
      • Ciência
      • String
      • Sistema
      • Veículo
      • Palavra
    • Pré e pós-processadores
      • Visão geral
      • Assertiva
      • Extrair Variável
      • Espera
      • Segurança
      • Operações de banco de dados
        • Visão geral
        • MySQL
        • MongoDB
        • Redis
        • Cliente Oracle
      • Uso de scripts
        • Visão geral
        • Scripts de Pré-processador
        • Scripts de Pós-processamento
        • Scripts Públicos
        • Referência de Scripts do Postman
        • Chamando Outras Linguagens de Programação
        • Usando bibliotecas JS
        • Visualização de Respostas
        • Exemplos de scripts
          • Scripts de assertiva
          • Usando Variáveis
          • Modificando Requisições
          • Outros exemplos
    • Depuração de APIs
      • AI Agent Debugger
      • A2A Debugger
  • Projetar APIs
    • Visão geral
    • Criar um Novo Projeto de API
    • Conceitos Básicos de Endpoint
    • Diretrizes de Design de API
    • Módulo
    • Configurar vários exemplos de corpo da requisição
    • Componentes
    • Campos Comuns
    • Parâmetros Globais
    • Histórico de Alterações do Endpoint
    • Comentários
    • Gerenciamento de Endpoints em Lote
    • API de Protocolo Personalizado
    • Modo Spec-first (Beta)
    • Esquemas de segurança
      • Visão geral
      • Criar um esquema de segurança
      • Usar o Security Scheme
      • Esquema de segurança na documentação online
    • Recursos avançados
      • Campos de Endpoint Personalizados
      • Cenários de Teste Associados
      • Status do endpoint
      • Aparência das Listas de Parâmetros
      • Identificação Única de Endpoint
    • Schemas
      • Visão geral
      • Criar um Novo Schema
      • Criar um Schema
      • Gerar schemas a partir de JSON etc.
      • oneOf, allOf, anyOf
      • Usando Discriminator
  • Branches
    • Visão geral
    • Criando uma Branch de Sprint
    • Testando APIs em uma Branch
    • Projetando APIs em uma branch
    • Mesclando branches de sprint
    • Gerenciando Branches de Sprint
    • AI Branch (Beta)
  • Testes de API
    • Visão geral
    • Cenários de teste
      • Criar um cenário de teste
      • Passar Dados Entre Requisições
      • Condições de Controle de Fluxo
      • Sincronizar dados de endpoints e casos de endpoint
      • Importar Endpoints e Casos de Endpoint de Outros Projetos
      • Exportar Cenários de Teste
    • Relatórios de teste
      • Relatórios de teste
    • Executar cenários de teste
      • Executar um cenário de teste
      • Executar cenários de teste em lote
      • Testes Orientados por Dados
      • Dados de Teste Compartilhados
      • Tarefas agendadas
      • Gerenciar o ambiente de execução de APIs de outros projetos
    • Suíte de testes
      • Visão geral
      • Criar Uma Suíte de Testes
      • Orquestrar Suite de Testes
      • Executar Suítes de Teste Localmente
      • Executar Suítes de Teste Via CLI
      • Tarefas agendadas
    • Testar APIs
      • Teste de integração
      • Teste de desempenho
      • Testes de Ponta a Ponta
      • Teste de regressão
      • Teste de Contrato
    • Apidog CLI
      • Visão geral
      • Instalando e executando o Apidog CLI
      • Opções da CLI do Apidog
    • CI/CD
      • Visão geral
      • Integrar com Github Actions
      • Integre com o Gitlab
      • Integrar com o Jenkins
      • Acionar teste por commit do Git
  • Publicar documentação de API
    • Visão geral
    • Tecnologias de API Suportadas
    • Compartilhamento rápido
    • Visualização da documentação da API
    • Documentação em Markdown
    • Publicação de sites de documentação
    • Página de login personalizada
    • Layouts Personalizados
    • CSS, JavaScript e HTML personalizados
    • Domínio Personalizado
    • Recursos de IA
    • Configurações de SEO
    • Configurações avançadas
      • Pesquisa na documentação
      • Proxy CORS
      • Integração com o Google Analytics
      • Configurações da Árvore de Pastas
      • Configurações de Visibilidade
      • Incorporação de valores em URLs de documentação
    • Versões da API
      • Visão geral
      • Criando versões de API
      • Publicação de Versões da API
      • Compartilhamento de Endpoints com Versões da API
  • Recursos de IA
    • Visão geral
    • Habilitando recursos de IA
    • Geração de Casos de Teste
    • Modificando esquemas com IA
    • Verificação de conformidade de endpoint
    • Verificação de Completude da Documentação da API
    • Nomeação de Campos com IA
    • Perguntas frequentes
  • Servidor MCP do Apidog
    • Visão geral
    • Conectar projeto Apidog à IA
    • Conectar documentação publicada à IA
    • Conectar Arquivos OpenAPI à IA
  • Boas práticas
    • Como lidar com assinaturas de API
    • Acessando APIs protegidas por OAuth 2.0
    • Fluxo de Trabalho de Colaboração
    • Gerenciamento do Estado de Autenticação
  • Espaço offline
    • Visão geral
  • Administração
    • Gerenciamento de projetos
      • Gerenciamento de Projetos
      • Configurações de notificação
      • Gerenciamento de membros do projeto
      • Recursos do projeto
        • Conexão com Banco de Dados
        • Conexão Git
    • Gerenciamento de equipes
      • Gerenciando equipes
      • Gerenciando membros da equipe
      • Atividades da Equipe
      • Funções e permissões da equipe
      • Recursos da equipe
        • General Runner
        • Variáveis de Equipe
        • Agente de Proxy de Requisições
      • Colaborações em tempo real
        • Colaboração em Equipe
    • Checklist de integração
      • Conceitos Básicos
      • Guia de Onboarding
    • Gerenciamento da organização
      • Gerenciamento de Organização
      • Funções e permissões da organização
      • Gerenciamento de planos
        • Gerentes de cobrança em organizações
      • Single Sign-On (SSO)
        • Visão geral do SSO
        • Configurando o Microsoft Entra ID
        • Configurando o Okta
        • Configurando SSO para uma organização
        • Gerenciamento de contas de usuário
        • Mapeamento de Grupos para Equipes
      • Provisionamento SCIM
        • Introdução ao provisionamento SCIM
        • Microsoft Entra ID
        • Okta
      • Recursos da organização
        • Runner Auto-Hospedado
  • Apidog Europe
    • Apidog Europe
  • Cobrança
    • Visão geral
    • Créditos
    • Atualizando seu plano
    • Métodos de Pagamento Alternativos
    • Gerenciamento de assinaturas
    • Movendo equipes pagas para organizações
  • Complementos
    • Hub de APIs
    • Plugin Apidog Intellij IDEA
    • Extensão do navegador
      • Chrome
      • Microsoft Edge
    • Proxy de requisições
      • Proxy de Requisição na Web
      • Proxy de Requisição em Documentação Compartilhada
      • Proxy de Requisição no Cliente
  • Dados e segurança
    • Armazenamento e Segurança de Dados
    • Privacidade e Segurança dos Dados do Usuário
    • Roteamento de Requisições e Segurança de Dados
  • Referências
    • Abordagem API Design-First
    • Extensões da especificação OpenAPI do Apidog
    • JSONPath
    • XPath
    • Expressões Regulares
    • JSON Schema
    • Formato de Arquivo CSV
    • Instalando o ambiente Java
    • Ambiente de Implantação do Runner
    • Sintaxe Markdown do Apidog
    • Extensões Swagger do Apidog
      • Visão geral
      • x-apidog-folder
      • x-apidog-status
      • x-apidog-name
      • x-apidog-maintainer
    • Extensões JSON Schema do Apidog
      • Visão geral
      • x-apidog-mock
      • x-apidog-orders
      • x-apidog-enum
  • Central de suporte
  1. Schemas

oneOf, allOf, anyOf

oneOf, anyOf e allOf são palavras-chave na especificação JSON Schema usadas para definir estruturas de dados compostas. Elas são essencialmente operadores lógicos aplicados à validação de dados. O Apidog oferece suporte completo a esses recursos do JSON Schema, ajudando você a criar documentação de API e regras de validação de dados mais precisas.

Conceitos básicos#

allOf
allOf significa que os dados devem satisfazer simultaneamente todas as condições dos subesquemas, equivalente à operação AND em operações lógicas. Assim como a expressão "tanto... quanto..." na linguagem cotidiana, todas as condições devem ser atendidas simultaneamente para que a validação seja aprovada.
anyOf
oneOf

Tabela de comparação lógica#

Palavra-chaveOperação lógicaRequisito da condiçãoCaso de uso típico
allOfANDDeve satisfazer todas as condições simultaneamenteHerança, extensão
anyOfORDeve satisfazer pelo menos uma condiçãoCombinações opcionais
oneOfXORDeve satisfazer exatamente uma condiçãoEscolhas mutuamente exclusivas

Uso no Apidog#

1. Usando o editor visual#

1
Etapa 1: Criar esquemas de dados
No seu projeto, clique em "Schemas" e, em seguida, em "New Schema".
Criando um novo esquema
2
Etapa 2: Adicionar composição de esquema
No painel de edição do esquema de dados, ao selecionar o tipo, clique em "Schema Composition" e escolha oneOf, anyOf ou allOf. Defina estruturas de dados específicas para cada subesquema.
Adicionando composição de esquema

2. Usando o editor de código JSON Schema#

Você também pode editar diretamente o código JSON Schema no painel de edição do esquema de dados para definir esses padrões de composição lógica.
Editor de código JSON Schema

Aplicação na documentação de API#

Definição de parâmetros da requisição#

Ao definir parâmetros de requisição do endpoint, você pode usar esses padrões de composição para descrever estruturas de parâmetros complexas:
1
Acesse a página de edição da API.
2
Na seção "Request Parameters", selecione Body e escolha o tipo JSON.
3
Na estrutura de dados, clique em "Reference Schema", ou selecione a "Schema Composition" apropriada com base na lógica de negócios, ou defina um JSON Schema personalizado.
Composição de esquema de parâmetros da requisição

Definição de dados da resposta#

Da mesma forma, você pode usar essa composição de esquema nos dados da resposta:
1
Na seção "Response", adicione exemplos de resposta.
2
Use a composição de esquema para descrever diferentes formatos de resposta.
Composição de esquema da resposta

Exemplos práticos de uso#

Exemplo de allOf (operação AND)#

Usar allOf permite combinar vários esquemas de dados, exigindo que os dados satisfaçam todas as condições simultaneamente. É como dizer "as informações do usuário devem incluir informações básicas AND informações de contato":
{
  "allOf": [
    {
      "description": "Basic user information",
      "type": "object",
      "properties": {
        "id": { "type": "integer" },
        "name": { "type": "string" }
      },
      "required": ["id", "name"]
    },
    {
      "description": "Contact information", 
      "type": "object",
      "properties": {
        "email": { "type": "string", "format": "email" },
        "phone": { "type": "string" }
      },
      "required": ["email"]
    }
  ]
}
Resultado: Os dados finais devem conter os campos id, name e email, sendo phone opcional. Todas as restrições dos subesquemas são mescladas e executadas, conforme mostrado abaixo:
Resultado do exemplo de allOf

Exemplo de anyOf (operação OR)#

Usar anyOf fornece vários caminhos de validação opcionais — os usuários podem escolher um ou vários métodos. É como dizer "os usuários podem fazer login com nome de usuário/senha OR email/senha OR telefone/código de verificação":
{
  "type": "object",
  "properties": {
    "login": {
      "anyOf": [
        {
          "description": "Username/password login",
          "properties": {
            "username": { "type": "string" },
            "password": { "type": "string" }
          },
          "required": ["username", "password"]
        },
        {
          "description": "Email/password login",
          "properties": {
            "email": { "type": "string", "format": "email" },
            "password": { "type": "string" }
          },
          "required": ["email", "password"]
        },
        {
          "description": "Phone/verification code login",
          "properties": {
            "phone": { "type": "string" },
            "verifyCode": { "type": "string" }
          },
          "required": ["phone", "verifyCode"]
        }
      ]
    }
  }
}
Resultado: Os usuários podem fornecer informações para um ou vários métodos de login, desde que pelo menos um método satisfaça os requisitos de validação, conforme mostrado abaixo:
Resultado do exemplo de anyOf

Exemplo de oneOf (operação XOR)#

Usar oneOf garante que os usuários possam escolher apenas um método de pagamento e não possam fornecer vários métodos simultaneamente. É como dizer "o método de pagamento deve ser cartão de crédito XOR PayPal XOR transferência bancária — exatamente uma dessas opções":
{
  "type": "object", 
  "properties": {
    "payment": {
      "oneOf": [
        {
          "description": "Credit card payment",
          "type": "object",
          "properties": {
            "type": { "const": "credit_card" },
            "cardNumber": { "type": "string" },
            "expiryDate": { "type": "string" }
          },
          "required": ["type", "cardNumber", "expiryDate"],
          "additionalProperties": false
        },
        {
          "description": "PayPal payment", 
          "type": "object",
          "properties": {
            "type": { "const": "paypal" },
            "email": { "type": "string", "format": "email" }
          },
          "required": ["type", "email"],
          "additionalProperties": false
        },
        {
          "description": "Bank transfer",
          "type": "object", 
          "properties": {
            "type": { "const": "bank_transfer" },
            "accountNumber": { "type": "string" },
            "routingNumber": { "type": "string" }
          },
          "required": ["type", "accountNumber", "routingNumber"],
          "additionalProperties": false
        }
      ]
    }
  }
}
Resultado: Os usuários devem escolher exatamente um método de pagamento — eles não podem fornecer vários métodos simultaneamente, nem deixar de fornecer todos, conforme mostrado abaixo:
Resultado do exemplo de oneOf

Melhores práticas#

Ao escolher padrões de composição, primeiro esclareça sua lógica de negócios:
Precisa combinar/herdar vários esquemas → Use allOf (operação AND)
Precisa de combinações opcionais flexíveis → Use anyOf (operação OR)
Precisa de escolhas estritamente mutuamente exclusivas → Use oneOf (operação XOR)
Modified at 2026-06-11 10:21:25
Previous
Gerar schemas a partir de JSON etc.
Next
Usando Discriminator
Built with