O estado Fail encerra um fluxo com um erro personalizado, semelhante ao raise em Python ou ao throw em Java. Quando um fluxo atinge um estado Fail, todos os estados no escopo atual param de ser executados e o fluxo termina.
Em uma definição de fluxo típica, cada estado transita para o próximo após a conclusão. Um estado Fail interrompe esse padrão: nenhum estado subsequente é executado.
Diferentemente de um estado
, que aguarda a conclusão do escopo atual antes de encerrar o fluxo, um estado
Fail
termina o fluxo com um erro.
Atributos
|
Atributo |
Tipo |
Obrigatório |
Descrição |
Exemplo |
|
|
string |
Sim |
Nome do estado. |
my state |
|
|
string |
Não |
Descrição do estado. |
describe it here |
|
|
string |
Sim |
Deve ser |
Fail |
|
|
map[string]any |
Não |
Construtor de entrada. Consulte InputConstructor. |
-- |
|
|
map[string]any |
Não |
Construtor de saída. Consulte OutputConstructor. |
-- |
|
|
string |
Não |
Código de erro para identificação programática. Use |
customBizCode |
|
|
string |
Sim |
Descrição do erro legível por humanos. |
my custom error |
Todo estado Fail exige um valor Detail que descreva o erro. O campo Code é opcional, mas recomendado, pois fornece um identificador legível por máquina que facilita o diagnóstico de falhas.
Dica:
Evite expor detalhes internos do sistema ou informações sensíveis nos valores de
Code
ou
Detail
, pois esses valores podem ficar visíveis nas saídas de erro.
Relação com o estado Pass
Um estado Fail comporta-se como um estado Pass com End: true, mas também retorna um erro. Ambos encerram o fluxo no ponto atual; contudo, o estado Fail devolve adicionalmente um erro especificado por Code e Detail.
Exemplos
Encerrar um fluxo com base em uma condição
Este fluxo usa um estado Choice para avaliar uma condição de entrada. Se $Input.status for igual a "true", o fluxo prossegue para Pass1 e conclui normalmente. Caso contrário, segue para a ramificação padrão e termina com um estado Fail.
Type: StateMachine
Name: my-workflow
SpecVersion: v1
Description: " "
StartAt: Choice1
States:
- Type: Choice
Name: Choice1
Branches:
- Condition: $Input.status == "true"
Next: Pass1
Default: Fail1
- Type: Fail
Name: Fail1
Code: "customBizCode"
End: true
- Type: Pass
Name: Pass1
End: true
Quando Choice1 avalia a condição e nenhuma ramificação corresponde, o fluxo transita para Fail1. Todo o fluxo termina com o código de erro customBizCode.
Retornar um erro estático
Em sua forma mais simples, um estado Fail requer um valor Detail e, opcionalmente, um Code:
- Type: Fail
Name: ValidationError
Code: "INVALID_INPUT"
Detail: "Required field 'orderId' is missing"
End: true
Usar códigos de erro descritivos
Escolha códigos de erro que identifiquem claramente a categoria da falha:
# Payment processing failure
- Type: Fail
Name: PaymentFailed
Code: "PAYMENT_DECLINED"
Detail: "Payment gateway returned a decline response"
End: true
# Resource not found
- Type: Fail
Name: NotFound
Code: "RESOURCE_NOT_FOUND"
Detail: "The specified order does not exist"
End: true