1
resposta

Assinatura de API Restfull X Métodos das classes

Professor, estou com dúvida em como tratar os métodos na API, o CRUD é amplamente discutido, mas e as operações das classes de domínio, como deve ficar a ASSINATURAS da API? Exemplo: Digamos que eu tenha a seguinte classe de negócio?

class Conta
{
  public int numero;
  public double saldo;

  public Cliente titular;

  public void Transfere(double valor, Conta destino)
  {
    if(this.Saca(valor))
    {
        destino.Deposita(valor);
    }
  }

  public bool Saca(double valor)
  {
    if(this.saldo >= valor)
    {
        this.saldo -= valor;
        return true;
    }
    return false;
  }

  public void Deposita(double valor)
  {
    this.saldo += valor;
  }
}

Como deveriam ser declaradas as assinaturas de ContasController para efetar as operações "Deposita", "Saca" e "Transfere" em uma API Restfull?

1 resposta

Fala, Eduardo, bom dia.

Essa é uma discussão interessante de design de API. Geralmente onde temos o hábito de modelar nossa API usando as entidades do modelo; nesse exemplo Conta.

Pergunto: e se não modelássemos apenas com as entidades? Lembre-se que uma API Rest precisa modelar recursos. Como eles irão ser mapeados para entidades é uma questão interna de sua aplicação. Os consumidores da API não precisam saber disso.

O que poderia ser um recurso de sua API nesse exemplo? Talvez uma movimentação bancária. Seguindo essa abordagem eu poderia criar um endpoint que atendesse a seguinte requisição:

POST /movimentacoes

E com ela eu poderia incluir movimentações de saque, depósito e transferência. Veja exemplos de payloads para cada tipo de movimentação:

Saque

POST /movimentacoes
{ 
    conta: 1282, 
    tipo: 'saque', 
    valor: 200 
}

Depósito

POST /movimentacoes
{ 
    conta: 1282, 
    tipo: 'deposito', 
    valor: 200 
}

Transferência

POST /movimentacoes
{ 
    conta: 1282, 
    destino: 398,
    tipo: 'transferencia', 
    valor: 200 
}

O que acha dessa abordagem?

Tô na correria aqui. Quando tiver mais um tempinho coloco algumas referências pra você aprofundar esse assunto, ok?