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
- Dans
app/http/middleware/cle_coursier.go, complétezHandle: sans l'en-têteX-Cle-Coursierà la bonne valeur (la constantecle), répondez 401 avec{"erreur": "clé de coursier manquante"}, et arrêtez la requête là. - Avec la bonne clé, laissez passer la requête jusqu'au contrôleur.
- Dans
routes/web.go, placez le middleware sur le groupe/api./ping,/coursierset/tableaurestent 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(…).