Skip to content

Étape 4 WebApi

Adrien Clerbois edited this page Jan 26, 2019 · 5 revisions

Dans le projet, ajoutez une nouvelle classe appelée RecipesController, insérez-ci le code suivant :

using System;
using System.Collections.Generic;
using System.Linq;
using System.Threading.Tasks;
using Mic.CookBook.Web.Database;
using Mic.CookBook.Web.Models;
using Microsoft.AspNetCore.Http;
using Microsoft.AspNetCore.Mvc;

namespace Mic.CookBook.Web.Controllers
{
    [Route("api/[controller]")]
    [ApiController]
    public class RecipesController : ControllerBase
    {
        private readonly CookBookContext cookBookContext;

        public RecipesController(CookBookContext cookBookContext)
        {
            this.cookBookContext = cookBookContext;
        }

        [HttpGet]
        public ActionResult<IEnumerable<Recipe>> Get()
        {
            var recipes = cookBookContext.Recipes.ToList();
            if (recipes.Count == 0)
                return NotFound();
            return Ok(recipes);
        }

        [HttpGet("{id}")]
        public ActionResult<Recipe> Get(int id)
        {
            var recipe = cookBookContext.Recipes.FirstOrDefault(r => r.Id == id);
            if (recipe == null)
                return NotFound();
            return Ok(recipe);
        }
    }
}

Documentez son code à l'aide de Swagger

Swagger est basé sur les principes de l'OpenApi. Ajoutez le NuGet paquet NSwag.AspNetCore et ajoutez dans le fichier startup.cs les lignes suivantes :

// Section using 
using NJsonSchema;
using NSwag.AspNetCore;

public void ConfigureServices(IServiceCollection services)
{
    // ...

    // Register the Swagger services
    services.AddSwaggerDocument();
}


public void Configure(IApplicationBuilder app)
{
    // Register the Swagger generator and the Swagger UI middlewares
    app.UseSwagger();
    app.UseSwaggerUi3();
}

Lancez l'application (F5) et rendez-vous sur les pages : http://localhost:44394/swagger pour voir le Swagger UI. http://localhost:44394/swagger/v1/swagger.json pour voir le fichier de spécification Swagger.

Améliorer la documentation.

Avez-vous remarqué que la documentation SwaggerUI ne présente pas les cas où nous renvoyons un 404 (not found). Nous pouvons décorer nos méthodes api afin de pouvoir ajouter des informations liées à cela :

[HttpGet]
[ProducesResponseType(200, Type = typeof(IEnumerable<Recipe>))]
[ProducesResponseType(404)]
public ActionResult<IEnumerable<Recipe>> Get()
{
    ...
}

[HttpGet("{id}")]
[ProducesResponseType(200, Type = typeof(Recipe))]
[ProducesResponseType(404)]
public ActionResult<Recipe> Get(int id) {

Lancez à nouveau le site, et rendez-vous sur la page de SwaggerUI. Observez la documentation. Précédent Suivant