I controllers e i metodi che essi espongono sono generati automaticamente a seguito della definizione di una o più operation.

operations:
  - name: withdrawProducts
    type: http_post
    description: Preleva una certa quantità di un prodotto dal magazzino
    parameters:
      - name: productId
        description: L'id del prodotto da prelevare
        type: uuid
        direction: in
      - name: quantity
        description: La quantità da prelevare
        type: integer
        direction: in
      - name: success
        description: Indica se l'operazione ha avuto successo
        type: boolean
        direction: out
      - name: newQuantity
        description: La quantità aggiornata
        type: integer
        direction: out

Questa operazione genererà un metodo astratto nella classe ControllerBase che conterrà la definizione dell’operazione.

[HttpPost("withdrawProducts")]
public abstract Task<WithdrawProductsResponse> WithdrawProducts(WithdrawProductsRequest request, CancellationToken requestAborted);

Questo metodo dovrà essere implementato nella classe concreta che implementa il ControllerBase. Ciò può essere velocemente fatto su Visual Studio premendo la combinazione di tasti ‘CTRL + .’ sulla definizione della classe del controller (in corrispondenza dell’avviso di errore). Il metodo creato avrà la seguente forma:

[HttpPost("withdrawProducts")]
public override Task<WithdrawProductsResponse> WithdrawProducts(WithdrawProductsRequest request, CancellationToken requestAborted)
{
    throw new NotImplementedException();
}

A questo punto, è possibile procedere ad implementare l’operazione.

Insieme al metodo, verranno create anche le classi che modellano la richiesta e la risposta specificate nell’operation, in questo caso WithdrawProductsRequest e WithdrawProductsResponse.

public class WithdrawProductsRequest
{
    public Guid ProductId { get; set; }
    public int Quantity { get; set; }
}

public class WithdrawProductsResponse
{
    public bool Success { get; set; }
    public int NewQuantity { get; set; }
}