Aller au contenu principal

3-2 Routes de type REST

Peut-être vous souvenez-vous qu'en Web III, nous utilisions des routes de type REST, c'est-à-dire au format suivant:

Verbe HTTPCheminController#Action
GET/evenementsEvenements#Index
GET/evenements/newEvenements#New
POST/evenementsEvenements#Create
GET/evenements/{id}Evenements#Show
GET/evenements/{id}/editEvenements#Edit
PATCH/PUT/evenements/{id}Evenements#Update
DELETE/evenements/{id}Evenements#Delete

Le format général d'un chemin d'accès vers une page était:

  • /ressource/{id} ou /ressource/{id}/action dans le cas où un paramètre est présent
  • /ressource ou /ressource/action sans paramètre

Or, le chemin standard proposé par .NET MVC ne correspond pas tout à fait à ce format. On a plutôt

  • /ressource/action/{id} (paramètre à la fin plutôt qu'entre ressource et action)

Suivant la convention REST, dans le cas de Show(), on devrait simplement être en mesure d'accéder à:

  • /evenements/{id}

Pas besoin de préciser Show dans l'URL.

Heureusement, il est possible de préciser, pour une route, le format désiré.

Préciser le format de route pour une action

Modifions la route associée à Show pour qu'elle se conforme au standard REST.

  1. Préciser le format. Modifiez l'action pour y ajouter la ligne [HttpGet("evenements/{id:int}")]:

    Snowfall.Web.Mvc/Controllers/EvenementsController.cs
    [HttpGet("evenements/{id:int}")]
    public IActionResult Show(int id)
    {
    return Content("Vue Show de EvenementsController, id: " + id);
    }
    info

    En C#, ce que vous voyez entre crochets ([]) est appelé un attribut (https://learn.microsoft.com/en-us/dotnet/csharp/advanced-topics/reflection-and-attributes/) et permet d'associer des métadonnées à une classe ou une fonction. Les données passées via ses attributs peuvent ensuite être utilisées par l'application pour modifier le comportement de cette dernière. Ici on s'en sert pour donner plus d'information sur la route associée à l'action.

    astuce

    .NET Core MVC nous permet de définir des routes associées à nos actions en utilisant les verbes HTTP GET/POST/etc. Il est possible d'utiliser:

    [HttpGet]
    [HttpPost]
    [HttpPut]
    [HttpDelete]
    [HttpHead]
    [HttpPatch]

    Ensuite, on passe en paramètre le template de la route (gabarit identifiant son chemin d'accès.)

  2. Lancez l'application et dirigez-vous vers le chemin d'accès /evenements/1.

    Vous devriez voir ceci:

    http://localhost:5155/evenements/1

    Vue Show de EvenementsController, id: 1

    Beaucoup plus élégant et conforme à REST!

Interpolation de string en C#

À noter que plutôt que de concaténer les chaines de caractère à l'aide du "+", il est possible d'utiliser l'interpolation de string, de la même façon qu'en TypeScript. La même personne a designé les deux langages! ;)

Snowfall.Web.Mvc/Controllers/EvenementsController.cs
[HttpGet("evenements/{id:int}")]
public IActionResult Show(int id)
{
return Content($"Vue Show de EvenementsController, id: {id}");
}