La clé du local

Exercice 2 sur 2 du chapitre 3 · 100 XP · 3 objectifs vérifiés par des tests

Notions abordées : MiddlewareEn-tête HTTPInterface

Le fils du voisin a trouvé l'adresse de l'API, et il s'amuse à commander des courses pour son chat. Margot a donné à l'application des coursiers une clé, qu'elle envoie dans l'en-tête X-Cle-Coursier de chaque requête. L'API doit la vérifier.

Votre mission

  1. Dans app/http/middleware/cle_coursier.go, complétez Handle : sans l'en-tête X-Cle-Coursier à la bonne valeur (la constante cle), répondez 401 avec {"erreur": "clé de coursier manquante"}, et arrêtez la requête là.
  2. Avec la bonne clé, laissez passer la requête jusqu'au contrôleur.
  3. Dans routes/web.go, placez le middleware sur le groupe /api. /ping, /coursiers et /tableau restent ouverts.

L'onglet « Requêtes » envoie une requête avec la clé, et une sans.

Rappel

Un middleware s'exécute avant le contrôleur, comme dans Laravel. Pour Goravel, c'est une valeur qui a deux méthodes, Handle(ctx http.Context) et Signature() string : elle satisfait alors l'interface http.Middleware. En Go, on ne déclare pas qu'un type implémente une interface (pas de implements) : avoir les bonnes méthodes suffit.

Dans Handle, ctx.Request().Next() passe la main à la suite, le $next($request) de Laravel. AbortWithStatusJson répond tout de suite ; faites-le suivre d'un return, pour que Next() ne soit pas appelé derrière.

const cle = "gopher-volant" déclare une constante, comme const en PHP : son type est déduit, et elle ne change plus.

Le constructeur CleCoursier() renvoie le middleware prêt à l'emploi : c'est lui qu'on passe à Middleware(…).