API Rest simples com Asp.Net Core

API Rest simples para retornar dados



1. 크리안도 컨트롤러



Para o controller, é criado uma classe que herda de ControllerBase . Existe também a herança de Controller , porém ela é utilizada somente em projetos com manipulação de páginas da Web, não para solicitações de API WEB.

A classe recebe a anotação [ApiController] , que fornece algumas funcionalidades como binding sources, validações com [Required] , fazendo com que seja disparado o valid Request erro 400 Além disso, resultados de erro (código de status 400 ou superior) irão retornar uma resposta em JSON que segue a RFC 7807.

{
  type: "https://tools.ietf.org/html/rfc7231#section-6.5.4",
  title: "Not Found",
  status: 404,
  traceId: "0HLHLV31KRN83:00000001"
}


Em seguida, a classe recebe uma anotação [Route("api/[controller]") . O 인수 [controller] faz com que a rota receba o nome da classe, Tirendo o sufixo Controller. 예를 들어, uma classe chamada Palavras*Controller* terá, nesse caso, a rota api/Palavras.

2. Criando uma rota GET



As rotas seguem uma estrutura de 파스타.

api/Palavras
    GetDefinicao   


No caso de uma classe que está recebendo a rota api/Palavras. Caso seja criado um metodo, por exemplo, em uma rota customizada chamada GetDefinicao, a URI da rota será de API/Palavras/GetDefinicao.

HTTP(GET, POST, PUT, PATCH, DELETE ETC)를 사용할 수 있습니다. No caso de uma rota para busca de recursos, utiliza-se [HttpGet] .

Uma rota GET de recursos geralmente busca os recursos utilizando um repositório, guardando o resultado em uma variável. Em seguida, é retornado os valores para o cliente, que serão automaticamente mapeados para JSON.

레토르노스



ASP.NET Core는 레토르나 상태 코드에 대한 메토도스(como BadRequest() e NotFound())가 없습니다. Esses metodos estão disponíveis ao definir o tipo de retorno da rota como ActionResult ou IActionResult . Nesse caso, utilizaremos o método para retornar Ok junto do conteúdo, que é passado como argumento. É interessante semper retornar esses status code, ao invés de lançar uma exceção para que o cliente receba a resposta em JSON e aaplicação não pare.

Para retornar um objeto ou lista de objetos, é passado o tipo dentro de ActionResult . No caso de uma lista de objetos da classe Command, é retornado .

ActionResult<IEnumerable<Palavra>>
// ou
ActionResult<IList<Palavra>>

ActionResult<T> ou utilizar IActionResult sem passar um tipo é a de que, no Primeiro caso, será retornado automaticamentespec um Ok() se Caso contrário, será retornado um 상태 코드 오류
ObjectResult é útil quando o retorno pode ser de diversos tipos.

Para rotas que utilizam repositórios async, é passado a assinatura async com o retorno Task, como IActionResult , lembrando de passar a assinatura await no metodo assíncrono. Métodos async são úteis quando se espera uma Operação externa, como por exemplo esperar o banco retornar os dados requisitados. Dessa maneira, aplicação não é bloqueada enquanto aguarda esse retorno, podendo fazer outras requisições com outros clientes. 예

var results = await _repository.GetAllPalavras(includeTalks);


코디고 컴플리토

[HttpGet]        
public async Task<IActionResult> Get()
{
    try
    {
        // Por ser async, é necessario await
        // Caso contrário, será retornado o OK mesmo sem atribuir o results.
        var palavras = await _repository.GetAllPalavras();
        var retorno = new
        {
            Count = results.Count(),
            Results = palavras
        };        
        return Ok(retorno);
    }
    catch (Exception)
    {        
        return this.StatusCode(StatusCodes.Status500InternalServerError, "Database failure");
    }
}


O código acima retorna os registros no banco para o cliente. Se acontecer algum erro, é thinkado como uma falha do servidor, retornando o codigo 500. Isso pois esse método get não recebe argumentos, como por exemplo o Id de uma entidade, 6 o 1044aria Por conta disso, caso ocorra algum erro, é por parte do servidor. 내부 서버 오류, Task<IActionResult> 활용.

Caso o retorno fosse ActionResult, bastaria retornar com a linha NotFound(), que seria convertido automaticamente para um StatusCodes .

O método acima retorna um objeto anônimo contendo a quantidade de registros no banco e a lista com os registros. Caso queiramos uma rota que apenas retorna a lista, utilizamos do return result;
[HttpGet]        
public async Task<ActionResult<List<Palavra>>> Get()
{
    try
    {  
        var palavras = await _repository.GetAllPalavras();
        // Pelo retorno ser explícito, é retornado o Ok() automaticamente.
        // Caso o retorno não seja igual ao especificado, é retornado um erro.
        return retorno;
    }
    catch (Exception)
    {        
        return this.StatusCode(StatusCodes.Status500InternalServerError, "Database failure");
    }
}

좋은 웹페이지 즐겨찾기