Použití konvencí webového rozhraní API
Dokumentace k rozhraní API se dá extrahovat a použít u více akcí, kontrolerů nebo všech kontrolerů v rámci sestavení. Konvence webového rozhraní API jsou náhradou za dekódování jednotlivých akcí pomocí [ProducesResponseType]
.
Konvence umožňuje:
- Definujte nejběžnější návratové typy a stavové kódy vrácené z konkrétního typu akce.
- Identifikujte akce, které se odchylují od definovaného standardu.
Výchozí konvence jsou k dispozici na webu Microsoft.AspNetCore.Mvc.DefaultApiConventions. Konvence jsou demonstrována s přidanou ValuesController.cs
šablonou projektu rozhraní API :
using Microsoft.AspNetCore.Mvc;
using System.Collections.Generic;
namespace WebApp1.Controllers
{
[Route("api/[controller]")]
[ApiController]
public class ValuesController : ControllerBase
{
// GET api/values
[HttpGet]
public ActionResult<IEnumerable<string>> Get()
{
return new string[] { "value1", "value2" };
}
// GET api/values/5
[HttpGet("{id}")]
public ActionResult<string> Get(int id)
{
return "value";
}
// POST api/values
[HttpPost]
public void Post([FromBody] string value)
{
}
// PUT api/values/5
[HttpPut("{id}")]
public void Put(int id, [FromBody] string value)
{
}
// DELETE api/values/5
[HttpDelete("{id}")]
public void Delete(int id)
{
}
}
}
Akce, které se řídí vzory v ValuesController.cs
práci s výchozími konvencemi Pokud výchozí konvence nevyhovují vašim potřebám, přečtěte si téma Vytváření konvencí webového rozhraní API.
Za běhu Microsoft.AspNetCore.Mvc.ApiExplorer rozumí konvencím. ApiExplorer
je abstrakce MVC pro komunikaci s generátory dokumentů OpenAPI (označovanými také jako Swagger). Atributy z použité konvence jsou přidružené k akci a jsou zahrnuty do dokumentace k OpenAPI akce. Analyzátory rozhraní API také rozumí konvencím. Pokud je vaše akce nekonvenční (například vrátí stavový kód, který není zdokumentovaný použitou konvencí), upozornění vás vyzývá k dokumentaci stavového kódu.
Zobrazení nebo stažení ukázkového kódu (postup stažení)
Použití konvencí webového rozhraní API
Konvence se nevykládají; každá akce může být přidružená přesně k jedné konvenci. Konkrétnější konvence mají přednost před méně specifickými konvencemi. Výběr není deterministický, pokud se na akci vztahují dvě nebo více konvencí stejné priority. Existují následující možnosti, které použijí konvenci na akci, od nejvýraznějšího po nejméně konkrétní:
Microsoft.AspNetCore.Mvc.ApiConventionMethodAttribute
— Vztahuje se na jednotlivé akce a určuje typ konvence a metodu konvence, která se vztahuje.V následujícím příkladu se na akci použije
Update
metoda konvence výchozího typuMicrosoft.AspNetCore.Mvc.DefaultApiConventions.Put
konvence:// PUT api/contactsconvention/{guid} [HttpPut("{id}")] [ApiConventionMethod(typeof(DefaultApiConventions), nameof(DefaultApiConventions.Put))] public IActionResult Update(string id, Contact contact) { var contactToUpdate = _contacts.Get(id); if (contactToUpdate == null) { return NotFound(); } _contacts.Update(contact); return NoContent(); }
Metoda
Microsoft.AspNetCore.Mvc.DefaultApiConventions.Put
konvence aplikuje na akci následující atributy:[ProducesDefaultResponseType] [ProducesResponseType(StatusCodes.Status204NoContent)] [ProducesResponseType(StatusCodes.Status404NotFound)] [ProducesResponseType(StatusCodes.Status400BadRequest)]
Další informace najdete
[ProducesDefaultResponseType]
v tématu Výchozí odpověď.Microsoft.AspNetCore.Mvc.ApiConventionTypeAttribute
u kontroleru – použije zadaný typ konvence na všechny akce na kontroleru. Metoda konvence je označena radami, které určují akce, na které se metoda konvence vztahuje. Další informace o tipech najdete v tématu Vytváření konvencí webového rozhraní API).V následujícím příkladu je výchozí sada konvencí použita pro všechny akce v ContactsConventionController:
[ApiController] [ApiConventionType(typeof(DefaultApiConventions))] [Route("api/[controller]")] public class ContactsConventionController : ControllerBase {
Microsoft.AspNetCore.Mvc.ApiConventionTypeAttribute
použité na sestavení — Použije zadaný typ konvence pro všechny kontrolery v aktuálním sestavení. Jako doporučení použijte vStartup.cs
souboru atributy na úrovni sestavení.V následujícím příkladu se výchozí sada konvencí použije na všechny kontrolery v sestavení:
[assembly: ApiConventionType(typeof(DefaultApiConventions))] namespace ApiConventions { public class Startup {
Vytváření konvencí webového rozhraní API
Pokud výchozí konvence rozhraní API nevyhovují vašim potřebám, vytvořte vlastní konvence. Konvence je:
Typy odpovědí
Tyto metody jsou opatřeny poznámkami [ProducesResponseType]
nebo [ProducesDefaultResponseType]
atributy. Příklad:
public static class MyAppConventions
{
[ProducesResponseType(StatusCodes.Status200OK)]
[ProducesResponseType(StatusCodes.Status404NotFound)]
public static void Find(int id)
{
}
}
Pokud chybí konkrétnější atributy metadat, použití této konvence na sestavení vynutí, že:
- Metoda konvence se vztahuje na jakoukoli akci s názvem
Find
. - V akci se nachází
Find
parametr s názvemid
.
Požadavky na pojmenování
[ApiConventionTypeMatch]
U [ApiConventionNameMatch]
metody konvence lze použít atributy, které určují akce, na které se vztahují. Příklad:
[ProducesResponseType(StatusCodes.Status200OK)]
[ProducesResponseType(StatusCodes.Status404NotFound)]
[ApiConventionNameMatch(ApiConventionNameMatchBehavior.Prefix)]
public static void Find(
[ApiConventionNameMatch(ApiConventionNameMatchBehavior.Suffix)]
int id)
{ }
V předchozím příkladu:
- Možnost
Microsoft.AspNetCore.Mvc.ApiExplorer.ApiConventionNameMatchBehavior.Prefix
použitá u metody označuje, že konvence odpovídá jakékoli akci s předponou "Najít". Mezi příklady odpovídajících akcí patříFind
,FindPet
aFindById
. - Použité
Microsoft.AspNetCore.Mvc.ApiExplorer.ApiConventionNameMatchBehavior.Suffix
na parametr označuje, že konvence odpovídá metodám s přesně jedním parametrem končícím identifikátorem přípony. Příklady zahrnují parametry, napříkladid
nebopetId
.ApiConventionTypeMatch
lze podobně použít u typů pro omezení typu parametru. Argumentparams[]
označuje zbývající parametry, které se nemusí explicitně shodovat.