pour installer iris
<span style="font-size: 14px;">go get github.com/kataras/iris<br></span>
instance
Enregistrer une route vers l'API
<span style="font-size: 14px;">app := iris.New()<br><br>app.Handle("GET", "/ping", func(ctx iris.Context) {<br> ctx.JSON(iris.Map{"message": "pong"})<br>})<br><br>app.Run(iris.Addr(":8080"))<br></span>
It peut être réalisé avec quelques lignes de code , accédez à http via le navigateur ://localhost:8080/ping renverra {"message": "pong"}
Utilisez la fonction Handle pour enregistrer les méthodes, les chemins et les fonctions de traitement correspondantes
Ajouter un middleware
Si nous voulons enregistrer Téléchargez les informations du journal de toutes les demandes et espérons confirmer si l'UA demandé est autorisé par nous lors de l'appel de la route correspondante, vous pouvez ajouter le middleware correspondant via la fonction Utiliser
<span style="font-size: 14px;">package main<br/><br/>import (<br/> "github.com/kataras/iris"<br/> "github.com/kataras/iris/middleware/logger"<br/>)<br/><br/>func main() {<br/> app := iris.New()<br/><br/> app.Use(logger.New())<br/> app.Use(checkAgentMiddleware)<br/><br/> app.Handle("GET", "/ping", func(ctx iris.Context) {<br/> ctx.JSON(iris.Map{"message": "pong"})<br/> })<br/><br/> app.Run(iris.Addr(":8080"))<br/>}<br/><br/>func checkAgentMiddleware(ctx iris.Context) {<br/> ctx.Application().Logger().Infof("Runs before %s", ctx.Path())<br/> user_agent := ctx.GetHeader("User-Agent")<br/><br/> if user_agent != "pingAuthorized" {<br/> ctx.JSON("No authorized for ping")<br/> return<br/> }<br/> ctx.Next()<br/>}<br/></span>
Utiliser. L'accès du facteur pour ajouter l'agent utilisateur dans l'en-tête Accès /ping peut renvoyer des résultats normalement. Si l'agent utilisateur est supprimé, il renverra le "Non autorisé pour le ping" que nous avons défini. Parce que nous avons ajouté le middleware de journal d'iris, les informations de journal correspondantes seront affichées sur le terminal lors de l'accès.
<span style="font-size: 14px;"><html><br/> <head>Book information</head><br/> <body><br/> <h2>{{ .bookName }}</h2><br/> <h1>{{ .bookID }}</h1><br/> <h1>{{ .author }}</h1><br/> <h1>{{ .chapterCount }}</h1><br/> </body><br/></html><br/></span>
Obtenir les paramètres dans la requête<span style="font-size: 14px;">package main<br/><br/>import "github.com/kataras/iris"<br/><br/>func main() {<br/> app := iris.New()<br/><br/> app.RegisterView(iris.HTML("./views", ".html"))<br/><br/> app.Handle("GET", "/bookinfo/{bookid:string}", func(ctx iris.Context) {<br/> bookID := ctx.Params().GetString("bookid")<br/><br/> ctx.ViewData("bookName", "Master iris")<br/> ctx.ViewData("bookID", bookID)<br/> ctx.ViewData("author", "Iris expert")<br/> ctx.ViewData("chapterCount", "40")<br/><br/> ctx.View("bookinfo.html")<br/> })<br/><br/> app.Run(iris.Addr(":8080"))<br/>}<br/></span>
Définir la valeur de la variable en HTMLctx.Params().GetString("bookid")route autorise et interdit l'accès externe
En utilisation réelle, parfois certaines routes ne peuvent être utilisées qu'en interne et n'est pas accessible depuis l'extérieur.
Peut être mis hors ligne en utilisantctx.ViewData(key, value)
itinéraire de regroupement Dans les applications réelles, les itinéraires seront classés en fonction de fonctions réelles, telles que les utilisateurs, les livres, la communauté, etc.
<span style="font-size: 14px;">package main<br/><br/>import "github.com/kataras/iris"<br/><br/>import "strings"<br/><br/>func main() {<br/> app := iris.New()<br/><br/> magicAPI := app.Handle("NONE", "/magicapi", func(ctx iris.Context) {<br/> if ctx.GetCurrentRoute().IsOnline() {<br/> ctx.Writef("I'm back!")<br/> } else {<br/> ctx.Writef("I'll be back")<br/> }<br/> })<br/><br/> app.Handle("GET", "/onoffhandler/{method:string}/{state:string}", func(ctx iris.Context) {<br/> changeMethod := ctx.Params().GetString("method")<br/> state := ctx.Params().GetString("state")<br/><br/> if changeMethod == "" || state == "" {<br/> return<br/> }<br/><br/> if strings.Index(magicAPI.Path, changeMethod) == 1 {<br/> settingState := strings.ToLower(state)<br/> if settingState == "on" || settingState == "off" {<br/> if strings.ToLower(state) == "on" && !magicAPI.IsOnline() {<br/> magicAPI.Method = iris.MethodGet<br/> } else if strings.ToLower(state) == "off" && magicAPI.IsOnline() {<br/> magicAPI.Method = iris.MethodNone<br/> }<br/><br/> app.RefreshRouter()<br/><br/> ctx.Writef("\n Changed magicapi to %s\n", state)<br/> } else {<br/> ctx.Writef("\n Setting state incorrect(\"on\" or \"off\") \n")<br/> }<br/><br/> }<br/> })<br/><br/> app.Handle("GET", "/execmagicapi", func(ctx iris.Context) {<br/> ctx.Values().Set("from", "/execmagicapi")<br/><br/> if !magicAPI.IsOnline() {<br/> ctx.Exec("NONE", "/magicapi")<br/> } else {<br/> ctx.Exec("GET", "/magicapi")<br/> }<br/> })<br/><br/> app.Run(iris.Addr(":8080"))<br/>}<br/></span>Pour ce type d'itinéraires, vous pouvez les diviser en groupe d'utilisateurs et en groupe de livres. Il y aura un gestionnaire commun pour que le groupe gère certains traitements communs
<1>访问http://localhost:8080/magicapi,返回Not found。说明route magicapi对外无法访问 <2>访问http://localhost:8080/execmagicapi,返回I'll be back。在execmagicapi处理函数中会执行 ctx.Exec("GET", "/magicapi")调用offline的route magicapi。在magicapi中会判断自己是否offline,如果为offline则返回I'll be back。 <3>访问http://localhost:8080/onoffhandler/magicapi/on改变magicapi为online <4>再次访问http://localhost:8080/magicapi,返回I'm back!。说明route /mabicapi已经可以对外访问了
Basicauth a été utilisé dans l'exemple ci-dessus. Tous les itinéraires accédant au groupe de livres seront d'abord soumis à une authentification d'authentification. La méthode d'authentification est le nom d'utilisateur et le mot de passe.
Visitez http://localhost:8080/books/sfsg3234/bookinfo dans postmanDéfinissez l'autorisation sur l'authentification de base, le nom d'utilisateur et le mot de passe sur les valeurs du programme, et l'accès recevra une réponse correcte. Sinon, non autorisé
golang
!