Phoenix Routing 是 Phoenix 应用中处理路由的技能,负责把进入的 HTTP 请求映射到对应的控制器动作。路由器是所有 Web 请求的入口,决定由哪个控制器动作处理请求。Phoenix 提供了用于 RESTful 资源、作用域、管道和已验证路由的强大路由宏。
一、用途 该技能用于在 Phoenix 应用中定义路由与 URL 辅助函数,包括资源路由、作用域、管道和已验证路由。适用于需要为控制器和动作定义新路由、创建 CRUD 资源路由、用作用域和命名空间组织路由、构建嵌套资源关系、配置请求处理管道、在控制器和模板中生成已验证路由路径、实现 API 版本化、调试路由问题、将请求转发到外部 Plug 或应用、实现自定义 URL slug 生成、设置认证与授权管道、构建多租户路由架构、构建独立作用域的管理后台,以及配置不同响应格式(HTML、JSON 等)等场景。
二、主要能力
- 基础路由声明:使用 HTTP 动词宏定义单条路由,如 get "/", PageController, :home。支持 get、post、patch、put、delete 等标准动词。使用 :param_name 语法捕获 URL 参数,例如 get "/hello/:messenger", HelloController, :show,该段会出现在控制器的 params map 中。
- 资源路由:resources "/users", UserController 生成八条标准 RESTful 路由(index、edit、new、show、create、update、delete)。可用 only 生成指定路由,用 except 排除指定路由,用 as 自定义路径辅助名(如 as: :person)。嵌套资源通过 resources 块创建层级关系,生成的路由包含父资源 ID,如 /users/:user_id/posts。
- 已验证路由:使用 ~p 签名在编译期校验路径。支持静态路径(~p"/users")、带变量的动态段(~p"/users/#{user_id}")、直接传入结构体(~p"/users/#{@user}" 生成 "/users/42")。Phoenix 通过 Phoenix.Param 协议自动提取 ID。其优势包括编译期校验、重构安全、类型安全以及便于过渡到基于 slug 的 URL。
- 作用域:用 scope 将路由归组到公共路径前缀下,如 scope "/admin", HelloWeb.Admin do ... end。支持别名减少重复、嵌套作用域(如 /api/v1、/api/v2)实现 API 版本化,生成的路径辅助函数会反映嵌套结构。
- 管道:pipeline 用于组合针对特定路由运行的 Plug,如 :browser 管道包含 accepts、fetch_session、fetch_live_flash、put_root_layout、protect_from_forgery、put_secure_browser_headers 等;:api 管道包含 accepts ["json"]。用 pipe_through 将管道应用到作用域。支持在管道中添加自定义 Plug、嵌套管道(如 :auth 管道先应用 :browser 再应用认证相关 Plug)。文档还给出会话管理、多租户、购物车等高级管道模式示例。
- 转发:使用 forward 将路径前缀委托给其他 Plug 或应用,如 forward "/jobs", BackgroundJob.Plug。常见用例包括管理界面、API 文档、后台任务面板。
- 路由检查:使用 mix phx.routes 查看应用中定义的所有路由,输出包含 HTTP 动词、路径、控制器和动作,并可用 grep 过滤。
- 以编程方式构建路径:使用 ~p 构建静态路径、带整数 ID 的路径、带结构体的路径。可通过实现 Phoenix.Param 协议自定义 URL 生成,例如基于 slug 生成 "/posts/my-great-post"。
三、使用方式 在路由器模块中 use HelloWeb, :router,然后定义 pipeline 与 scope,在 scope 内用 pipe_through 应用管道,并用 get/resources 等宏声明路由。在控制器和模板中使用 ~p 签名生成已验证路径。用 mix phx.routes 检查路由。文档给出了完整的路由器配置示例,包含 :browser 与 :api 管道、根作用域、API 版本化作用域、管理后台作用域,以及在 dev/test 环境下启用 LiveDashboard 的写法。
四、适用场景 适用于定义控制器路由、创建 RESTful CRUD 资源、用作用域组织路由、构建嵌套资源、配置请求处理管道、生成已验证路径、实现 API 版本化、调试路由、转发请求、实现自定义 slug URL、设置认证授权管道、构建多租户路由、构建管理后台、配置多种响应格式等。
五、限制与注意事项 文档列出了最佳实践与常见陷阱。最佳实践包括:始终使用 ~p 已验证路由、用作用域组织路由、只生成需要的资源动作、清晰命名作用域、保持管道职责单一、注意路由顺序(更具体的路由应在前)、优先使用 resources、为自定义路由添加注释、嵌套资源不超过 2-3 层、用作用域做 API 版本化、为敏感路由应用认证管道、测试路由解析、谨慎使用 forward、开发期定期用 mix phx.routes 检查、遵循 RESTful 约定。常见陷阱包括:硬编码路径、过度嵌套资源、遗漏管道、路由顺序错误、暴露全部动作、不使用作用域、命名不一致、跳过 CSRF 保护、缺少认证、重复路由、HTTP 动词使用错误、不测试路由、在生产环境暴露内部路由、在路由定义中放入业务逻辑、忽略路由冲突。
关于该技能的收费、价格、平台支持范围等具体信息,资料中暂未提供。