Solution com trés APIs:
- Lança Exceptions (
Mpc.ExceptionsExample.WithExceptions.Api
) - Não lança Exceptions (
Mpc.ExceptionsExample.NoExceptions.Api
) - Em DotNetCore 1.1 (
Mpc.ExceptionsExample.NoExceptions.Core11.Api
)
Cada api tem apenas o endpoint:
- POST api/values
O endpoint recebe um array de int
e devolve a soma de todos os elementos.
Exemplo:
POST /api/values HTTP/1.1
Host: localhost:8103
Content-Type: application/json
[1,2,3,4,5,6,7,8,9,10,11,12,13,14,15,16,16,18,19,20]
A grande diferença entre as API é o caso de a lista ser vazia.
Na API WithExceptions
é devolvido um BadRequest através do lançamento de uma Exception
no
serviço responsável por fazer o cálculo.
Exemplo da API WithExceptions
:
public IActionResult Post([FromBody] IEnumerable<int> values)
{
try
{
var serviceResult = _valuesService.ProcessValues(values);
return Ok(serviceResult);
}
catch (ArgumentException ex)
{
return BadRequest(ex.Message);
}
}
Enquanto que na API NoExceptions
é feita a verificação se o array tem ou não elementos.
Exemplo da API NoExceptions
:
public IActionResult Post([FromBody] IEnumerable<int> values)
{
var serviceResult = _valuesService.ProcessValues(values);
if (!serviceResult.Success)
{
return BadRequest(serviceResult.Messages);
}
return Ok(serviceResult.Result);
}
O objetivo é fazer pedidos às APIs com a lista vazia, ou seja, é BadRequest
.
Utilizando a ferramente vegeta, fizemos pedidos durante 30seg com rate=100.
Através dos resultados óbtidos, podemos dizer que a API que lança Exceptions
demora em média mais tempo a responder.
O objetivo é comparar duas APIs que fazem exatamente o mesmo mas estão em versões .Net Core diferentes.
O pedido consiste em enviar uma array de inteiros (ficheiro input) e a resposta é a soma dos elementos do array.
Através dos resultado obtidos, podemos dizer que surpreendemente a API em .Net Core 1.1 tem um tempo de resposta médio (2.893328ms) inferior à API em .Net Core 2.0 (4.225719ms).
Postman
: ficheiros para importar no Postman de forma a simular os pedidosvegeta
: permitir simular vários request em simultâneo. Utilizar os ficheiros.bat
.