Um contrato é a expectativa do consumidor sobre a resposta do provedor. Quando o provedor se desvia (um campo some, um tipo muda, uma chave é renomeada), o consumidor quebra. O teste de contrato dirigido pelo consumidor pega isso antes de ir ao ar.
Percorra cada divergência abaixo: compare o que o consumidor espera com o que o provedor envia, depois alinhe o provedor e veja a contagem de mudanças que quebram cair a zero. Nem toda mudança quebra: veja como campos aditivos e novos valores de enum são tratados. Há mais padrões nas receitas.
user.emailO consumidor precisa de "email" para enviar notificações, mas o provedor parou de incluí-lo. Campos obrigatórios que somem quebram todo consumidor que os lê.
O consumidor espera
email: string (required)O provedor envia
{ "id": 1, "name": "Ada" }Alinhado
{ "id": 1, "name": "Ada", "email": "ada@example.com" }user.idO consumidor lê "id" como número. O provedor agora o devolve como texto, e a aritmética e a igualdade estrita quebram em silêncio.
O consumidor espera
id: number (required)O provedor envia
{ "id": "1" }Alinhado
{ "id": 1 }user.fullNameO provedor renomeou "fullName" para "name". O consumidor continua lendo "fullName" e agora recebe undefined: renomear é remover e acrescentar.
O consumidor espera
fullName: string (required)O provedor envia
{ "name": "Ada Lovelace" }Alinhado
{ "fullName": "Ada Lovelace" }user.createdAtO consumidor espera que "createdAt" seja sempre um texto de data e chama .slice() nele. O provedor agora envia null, e isso lança erro em execução.
O consumidor espera
createdAt: string (required, non-null)O provedor envia
{ "createdAt": null }Alinhado
{ "createdAt": "2026-06-25T10:00:00Z" }user.statusO consumidor só trata "active" | "suspended". O provedor acrescentou "archived". Consumidores tolerantes se viram, mas um switch estrito deixaria passar: trate o caso padrão.
O consumidor espera
status: 'active' | 'suspended'O provedor envia
{ "status": "archived" }Alinhado
// O consumidor acrescenta um ramo padrão ou combina estender o enumuser.lastLoginO provedor acrescentou "lastLogin", que o consumidor não lê. Mudanças aditivas são retrocompatíveis: não pedem ação, só reconhecimento.
O consumidor espera
(não faz parte do contrato)O provedor envia
{ "lastLogin": "2026-06-24T22:00:00Z" }Alinhado
// Seguro: o consumidor ignora campos desconhecidos