Azure Functions vs WebApi

Olá, tudo bem?

Estes dias recebi a seguinte pergunta via Twitter: “Azure Functions pode ser usado como uma alternativa ao WebApi”?

Nos posts anteriores vimos as características de Serverless Architectures e do Azure Functions. Há uma tentação em migrar WebApis para Azure Functions, principalmente pelo fator “pague por consumo”, não é mesmo? No entanto, existem alguns pontos que devem ser levados em consideração antes de iniciar esta migração.

Respondendo a pergunta e parafraseando o Elemar Jr, a resposta é Depende. Eis alguns fatores que diferenciam Azure Functions (HttpTrigger template) de WebApi:

1-Toda função no Azure Function é estática:

using System.Net;

public static async Task<HttpResponseMessage> Run(HttpRequestMessage req, TraceWriter log)
{
    log.Info("Inicio");

    // Efetua a leitura do corpo da requisição
    dynamic data = await req.Content.ReadAsAsync<object>();

    //Seta o valor via querystring / corpo da requisição
    string nome = data?.nome;

    return nome == null
        ? req.CreateResponse(HttpStatusCode.BadRequest, 
            "Envie a propriedade nome no corpo da requisição")
        : req.CreateResponse(HttpStatusCode.OK, "Ola " + nome);
}

Logo, só há acesso à membros (métodos, variáveis) estáticos.

2-O template HttpTrigger do Azure Functions recebe um HttpRequestMessage como parâmetro, e isto significa que não há model binding automático. Em outras palavras, você terá que interpretar o conteúdo da requisição (application/xml, application/json, application/x-www-form-urlencoded, etc..) e instanciar objetos manualmente.

Também não é possível acessar Cookies e variáveis de sessão via Azure Functions, logo se sua API necessita destes recursos, permaneça com WebApi.

3-Até o momento em que escrevo este post, não há um meio de injetar dependências nas suas Azure Functions se não via Service Locator (devido ao item 1). Logo, se sua API receberá muitas dependências cujo grafo é complexo, continue com WebApi.

Estes são alguns dos fatores que eu levo em consideração antes de optar por Azure Functions em relação à WebApi.

Até o proximo post pessoal!

Compartilhar