全部学科
Python全栈
python
NodeJS全栈
nodejs
📝 1 篇文章 15 道配套习题

路由配置与RESTful风格专题

专题说明

本专题聚焦Gin框架的路由配置机制,涵盖路由注册、路由分组、静态文件服务与RESTful设计原则。掌握路由配置是构建规范API的基础。

学习目标

  1. 掌握GET、POST、PUT、DELETE等路由注册方法
  2. 学会使用路由分组管理API结构
  3. 掌握静态文件服务配置
  4. 理解RESTful路由设计原则与路由冲突处理

学习内容

  • 基本路由注册(GET、POST、PUT、DELETE)
  • 路径参数与通配符路由
  • 路由分组与中间件挂载
  • 静态文件服务(Static、StaticFile、StaticFS)
  • RESTful设计原则
  • 路由冲突检测与匹配优先级
  • Any与匹配多方法路由

学习建议

  1. 重点理解路由分组的作用,便于统一管理中间件
  2. 注意动态参数路由在同位置不能重复命名
  3. RESTful设计时注意HTTP方法语义的正确使用
  4. 静态文件路径与API路径要规划好避免冲突

📝 配套习题(15 题)

💡 参考答案在文末
判断题
1

在RESTful API设计中,将版本号放在URL路径中(如/v1/users)是一种推荐的版本管理方式。

A

B

2

在Gin框架中,配置r.Static("/assets", "./public")后,访问/assets/images/logo.png会映射到服务器的./public/images/logo.png文件。

A

B

3

gin.New()gin.Default()的区别在于,gin.Default()会自动附加Logger和Recovery中间件,而gin.New()创建的是不带任何中间件的纯净Engine实例。

A

B

4

在Gin框架中,同时注册r.GET("/users/:id")r.GET("/users/:name")会导致路由冲突错误,因为两个动态参数路由在同一路径位置冲突。

A

B

单选题
5

以下哪种方式可以正确注册一个GET请求的路由?

A

r.HandleFunc("GET", "/users", handler)

B

r.GET("/users", handler)

C

r.Route("/users").GET(handler)

D

r.AddRoute("GET", "/users", handler)

6

在Gin中,路由定义为r.GET("/users/:id"),如何在handler中获取URL路径中的id参数?

A

c.Query("id")

B

c.Param("id")

C

c.Get("id")

D

c.PostForm("id")

7

在Gin路由中,以下哪个通配符可以匹配多级路径?

A

:path

B

*path

C

{path}

D

**path

8

在Gin框架中,以下哪个方法用于配置静态文件服务目录?

A

r.StaticFile("/static", "./assets")

B

r.Static("/static", "./assets")

C

r.LoadHTMLFiles("./assets")

D

r.ServeFile("/static", "./assets")

9

当同时定义以下路由时,请求GET /users/me会匹配哪个路由?

Go
r.GET("/users/:id", handlerA)
r.GET("/users/me", handlerB)
r.GET("/users/*action", handlerC)
A

handlerA(动态路由优先)

B

handlerB(静态路由优先)

C

handlerC(通配符路由优先)

D

报错,路由冲突

10

在Gin中,以下哪种方式可以实现HTTP重定向?

A

c.Redirect(301, "/new-path")

B

c.Location("/new-path")

C

c.Move("/new-path")

D

c.RedirectTo("/new-path")

11

以下哪个路由设计符合RESTful风格规范?

A

r.GET("/getUserById/:id")

B

r.GET("/users/:id")

C

r.GET("/api/v1/queryUser")

D

r.GET("/user-info/:id")

多选题
12

对于请求GET /users/123/profile?tab=settings&page=1,以下哪些方法可以正确获取参数?(路由定义为r.GET("/users/:id/profile")

A

c.Param("id")获取"123"

B

c.Query("tab")获取"settings"

C

c.Query("page")获取"1"

D

c.Param("tab")获取"settings"

13

以下哪些HTTP方法与操作的对应关系符合RESTful规范?

A

GET用于获取资源,不应修改数据

B

POST用于创建新资源

C

PUT用于部分更新资源

D

DELETE用于删除资源

14

对于以下路由配置,请求GET /files/docs/readme.md会匹配哪些路由?(假设所有路由都能单独匹配)

Go
r.GET("/files/*filepath", handlerA)
r.GET("/files/:name", handlerB)
r.GET("/files/readme.md", handlerC)
A

最终匹配handlerA(通配符匹配多级)

B

最终匹配handlerB(动态参数匹配)

C

最终匹配handlerC(静态路由匹配)

D

如果只有handlerA,可以匹配

填空题
15

在Gin框架中,设计RESTful风格的用户订单API,路由定义为r.GET("/users/:userId/orders/:orderId"),请求GET /users/123/orders/456时,使用____________获取用户ID,使用____________获取订单ID。

参考答案
1.正确 2.正确 3.正确 4.正确 5.B 6.B 7.B 8.B 9.B 10.A 11.B 12.A;B;C 13.A;B;D 14.A;D 15.c.Param("userId");c.Param("orderId")
想在手机上练习这套专题?
使用微信卷王开发者小程序,打开首页顶部扫码功能识别二维码
← 上一个专题 请求参数绑定与校验专题
下一个专题 → 部署与配置管理专题
扫码体验小程序
加载中
想在手机上刷题学习?
使用微信卷王开发者小程序,打开首页顶部扫码功能识别二维码