Contratos e compatibilidade
Um contrato regista a estrutura que uma operação de API promete. O Echo reúne o método, o caminho, o documento e as versões publicadas. Um mock pode gerar dados a partir de um contrato e uma aplicação pode associar-se a uma versão para declarar uma dependência. Publicar um contrato não implementa nem testa uma API em execução.
Crie e publique
Abra Contratos no Maestro, crie o contrato e abra Publicar versão. Cole um documento de contrato Echo e reveja-o antes de publicar. Este campo espera JSON de um documento Echo, não uma resposta de exemplo nem um JSON Schema por converter. A conversão de esquemas está disponível no editor de rotas de mocks.
As versões publicadas são retratos numerados. A associação de uma aplicação regista a versão acordada. O diff na web mostra caminhos alterados, motivos e veredictos separados para consumidores e fornecedores. Reutilizar conteúdo já publicado pode devolver uma versão anterior existente em vez de criar outra.
Leia a direção certa
A associação Consumes indica que a aplicação chama a operação. Provides indica que a fornece. A comparação distingue alterações de pedido e de resposta e avalia cada lado.
| Alteração | Consumidor | Fornecedor |
|---|---|---|
| Adicionar campo opcional ao pedido | Seguro | Seguro |
| Adicionar campo obrigatório ao pedido | Incompatível | Incompatível |
| Adicionar campo obrigatório à resposta | Seguro | Incompatível |
| Remover campo da resposta ou alterar o tipo | Incompatível | Incompatível |
| Adicionar campo opcional à resposta | Condicional | Seguro |
Estes são os veredictos do classificador atual. Um campo opcional extra na resposta é condicional porque JsonUnmappedMemberHandling.Disallow rejeita campos desconhecidos. Leia a condição e o motivo no diff. Safe significa que não foi encontrada incompatibilidade para esse lado; Warning pede revisão; Breaking identifica incompatibilidade; ConditionalBreaking depende da condição indicada. Um veredicto desconhecido não é aprovação.
Reveja antes de aceitar
Criar, publicar e comparar contratos no Maestro está incluído em todos os planos do Echo, incluindo o Free. Publicar a partir do seu próprio código precisa de uma chave de aplicação, e emitir chaves faz parte do Echo Pro e Pro AI e requer Echo/ManageHosting, permissão atribuída por omissão ao administrador da organização num plano pago. Um fornecedor pode publicar através de EchoContractPublicationClient, do Gapfy.Echo.Contracts. Crie primeiro o contrato e a associação Provides, depois use uma chave com PublishOwnedContracts. O cliente publica uma versão de um contrato próprio; não cria contratos nem assume propriedade.
A publicação termina antes de devolver os resultados de compatibilidade. Um veredicto incompatível não anula a publicação. Reveja as diferenças antes de alterar um consumidor ou aceitar uma nova referência.
O Gapfy.Echo.Testing compara contratos consumidos com retratos revistos no seu repositório. Pode fazer falhar o CI quando uma mudança quebra esse consumidor. Não testa a API em execução nem valida os contratos que a aplicação fornece.
Construa um contrato de resposta no desktop
Abra uma rota de mock e escolha o modo de resposta Contrato. Comece por um exemplo JSON, examine a estrutura inferida e reveja as ambiguidades antes de guardar. Selecione um campo para escolher um gerador compatível e confira as pré-visualizações com um caminho de pedido representativo. Um exemplo guardado é um ponto de partida; não descreve automaticamente todas as respostas possíveis.
Adicione cenários com nome para situações como resultado vazio ou operação recusada. Dê um exemplo a cada cenário e selecione-o para examinar a resposta gerada. Envie X-Echo-Scenario: empty para pedir um cenário chamado empty; omita o cabeçalho para usar a resposta predefinida. X-Echo-Seed permite repetir a geração aleatória. Uma seed fixa não congela geradores que usam a data atual. Uma rota fixada numa versão publicada não pode editar essa versão diretamente.
Importe modelos sem os reescrever
Com uma conta autenticada e ligação à rede, abra Importar e exportar modelos no editor de contratos do desktop.
- Escolha C#, TypeScript, JavaScript, Java, Python ou JSON Schema.
- Cole o código ou abra os ficheiros relacionados em conjunto. Inclua os tipos referenciados e indique o tipo raiz quando houver vários.
- Em C#, escolha se os nomes das propriedades devem usar camelCase. Os nomes JSON explícitos têm prioridade.
- Confira a pré-visualização da conversão. Leia o documento, o schema e os diagnósticos antes de aplicar.
- Aplique a pré-visualização concluída à rota. Fechar o diálogo ou uma conversão falhada mantém a rota intacta. Alterar a entrada exige uma nova pré-visualização.
Use o exemplo da linguagem selecionada para conferir a estrutura esperada antes de importar o seu modelo.
| Formato | O que fornecer |
|---|---|
| C# | DTOs e os tipos que referenciam |
| TypeScript | Interfaces, aliases de tipos ou campos públicos tipados |
| JavaScript | Metadados de schema estático literal ou declarações TypeScript .d.ts associadas |
| Java | DTOs com campos públicos ou records |
| Python | Dataclasses com anotações de tipo |
| JSON Schema | Schema explícito que use a estrutura de contrato suportada |
A conversão lê o código sem o executar. Dependências em falta e construções incompatíveis produzem diagnósticos. Valores JavaScript em execução não bastam para deduzir um modelo completo. Serializadores próprios, polimorfismo e estruturas recursivas podem exigir um schema explícito compatível. Os schemas importados continuam associados ao contrato quando edita o exemplo ou o caminho da rota; atualize a estrutura pela importação, em vez de substituir geradores individuais.
Exporte modelos para outra aplicação
Escolha a linguagem de saída e exporte o contrato atual. Examine os ficheiros gerados, copie um ou guarde o ZIP completo, que inclui contract.schema.json. Os mesmos seis formatos estão disponíveis para exportação. Exportar lê o documento atual e não publica outra versão.
Reveja os diagnósticos sobre precisão numérica e diferenças entre campos ausentes e nulos. Os tipos gerados não impõem, por si só, todas as regras de intervalos, enums ou propriedades adicionais; mantenha a validação de schema onde a sua aplicação precisar dessas garantias. A exportação Python inclui from_dict e to_dict; os valores Decimal precisam de um codificador JSON apropriado.
Próximos passos
Ligue a sua aplicação com aplicações e chaves ou use o documento para servir mocks na hospedagem pública.