API Rest simples com Asp.Net Core
9630 단어 braziliandevsrestapiaspnetcore
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");
}
}
Reference
이 문제에 관하여(API Rest simples com Asp.Net Core), 우리는 이곳에서 더 많은 자료를 발견하고 링크를 클릭하여 보았다
https://dev.to/robertohigor/api-rest-simples-com-asp-net-core-5513
텍스트를 자유롭게 공유하거나 복사할 수 있습니다.하지만 이 문서의 URL은 참조 URL로 남겨 두십시오.
우수한 개발자 콘텐츠 발견에 전념
(Collection and Share based on the CC Protocol.)
{
type: "https://tools.ietf.org/html/rfc7231#section-6.5.4",
title: "Not Found",
status: 404,
traceId: "0HLHLV31KRN83:00000001"
}
api/Palavras
GetDefinicao
ActionResult<IEnumerable<Palavra>>
// ou
ActionResult<IList<Palavra>>
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");
}
}
[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");
}
}
Reference
이 문제에 관하여(API Rest simples com Asp.Net Core), 우리는 이곳에서 더 많은 자료를 발견하고 링크를 클릭하여 보았다 https://dev.to/robertohigor/api-rest-simples-com-asp-net-core-5513텍스트를 자유롭게 공유하거나 복사할 수 있습니다.하지만 이 문서의 URL은 참조 URL로 남겨 두십시오.
우수한 개발자 콘텐츠 발견에 전념 (Collection and Share based on the CC Protocol.)