iris的routing

routing

在介绍完model验证之後要开始介绍网页程序设计的另一个观念路由routing,更明确的说明应该是网址路由才对,所以接下来开始跟大家介绍网址路由。

本文同步放置於此

routing

路由常会让人联想到的是网路层的路由,简单来说就如维基百科上对路由的说明,将网路讯息传到对应的地方,不过这里定义的路由明确来说是网址路由,接下来跟大家先说明一下网址路由,再跟大家说明如何在iris上透过网址路由来处理使用者的请求。

什麽是routing

什麽是网址路由呢,简单讲就是在网址上传递有意义的资讯,例如下列网址

example.com/api/users/2345/profile

如此可以知道他是要被导到users的profile的这个handler并且告诉服务器使用者编号是2345。
所以接下来要告诉大家在iris要如何处理这一类的请求,并能导到正确的handler,并且能取得正确的使用者编号2345。

怎麽在iris上处理routing问题

这里我们拿iris-go routing的范例来跟大家说明如何使用iris来处理网址路由的请求,首先大家先看看下列例子

app := iris.New()

// http://localhost:8080/api/users/2345/profile
app.Get("api/users/{id:uint64}/profile", userProfileHandler)

如此就能够将前面说明的网址绑定到userProfileHandler这个handler上,除了这样子绑定到对应的handler之外iris还可以将handler分群,接下来在说明handler分群。

group routing

上述例子说明了如何处理网址路由,如果今天又在多一个网址如下那该如何处理呢

example.com/api/users/messages/1

由於目前的网址与上述的网址有一定的相似度,所定可以将两个网址路由分在一个群组,所以在iris的处理如下所示

app := iris.New()

users := app.Party("api/users", myAuthMiddlewareHandler)

// http://localhost:8080/api/users/42/profile
users.Get("/{id:uint64}/profile", userProfileHandler)
// http://localhost:8080/api/users/messages/1
users.Get("/messages/{id:uint64}", userMessageHandler)

除了上述的绑定该网址到handler之外,还有另外一种PartyFunc的写法,如下列例子

app := iris.New()

app.PartyFunc("api/users", func(users iris.Party) {
    users.Use(myAuthMiddlewareHandler)

    // http://localhost:8080/api/users/42/profile
    users.Get("/{id:uint64}/profile", userProfileHandler)
    // http://localhost:8080/api/users/messages/1
    users.Get("/messages/{id:uint64}", userMessageHandler)
})

这两种分群的方式结果都一样,就看大家习惯怎麽写,所以对於网址路由绑定到对应的handler到此告一段落,不过我们还有一个没有说明到,接下来跟大家说明如何取得网址上对应的参数。

path parameters

上面例子都是说明该如何绑定到对应的handler,但是没有说明该如何从网址上取出参数,所以接下来先看一下下面例子

func userProfileHandler(ctx iris.Context) {
    ctx.Writef("id (uint64): %s", ctx.Params().GetUint64("id"))
}

上述例子是实作一个handler专门处理下列网址

example.com/api/users/2345/profile

其中就是透过ctx.Params().GetUint64("id")来取得参数2345。

网址路由的注意事项

在iris的网址路由的处理能够正确的绑定到对应的handler,但是这部分要注意的是对於网址绑定的逻辑认知错误的状况,请大家看看以下两种绑定方式

app.Get("/profile/{username:string}", userHandler)
app.Get("/profile/me", userHandler2)

依据上面的绑定方式,其中/profile/me会被绑定到userHandler2,其他的/profile/*会被绑定到userHandler,若是不是这样的认知就会造成网页逻辑的误判。最後请看一下网址路由参数的类别对於网路路由绑定有很大的帮助。

结论

今天跟大家分享如何在iris上处理透过网址而发出来的请求,希望大家对於网址路由已经iris如何处理网址路由有更进一步的了解。


<<:  [Python]如何Text to Speech: pyttsx3, gTTS

>>:  寻觅 webpack - 27 - 真实世界的 webpack - 建立 webpack 生产环境 - 追踪建置

Day 20 (Xd)

1.下载外挂 Arranger for XD------->排序接续物件好用 watch fa...

Day 16 - UML x Interface — TextField

今天的 TextField 和明天的 FormControl 都是在介绍跟表单有关的介面和元件,而...

轻松小单元 - 名词定义

应该早在几篇就先出来的,不过实在没把握精确度,边写边修正吧... 资通安全管理法: 简称「资安法」,...

【PHP 设计模式大头菜】策略模式 Strategy Pattern

策略模式 Strategy Pattern 策略模式,可以让物件在运作时更改其行为或算法,你可以透...

TailwindCSS 从零开始 - 简单认识 PostCSS

前面有提到安装 TailwindCSS 推荐使用 PostCSS,前面练习的都是没有相依 Post...