Help us learn about your current experience with the documentation. Take the survey.
路由
GitLab 后端主要使用 Rails 编写,因此它使用 Rails 路由。除了 Rails 的最佳实践外,还有一些 GitLab 应用程序特有的规则。为了支持子组,GitLab 项目和组路由使用通配符来匹配项目和组路由。例如,我们可能有如下路径:
/gitlab-com/customer-success/north-america/west/customerA然而,路径可能会产生歧义。考虑以下示例:
/gitlab-com/edit这里存在歧义:是存在一个名为 edit 的子组,还是这是一个用于编辑 gitlab-com 组的特殊端点。
为了消除这种歧义并使后端更易于维护,我们引入了 /-/ 作用域。其目的是将组或项目路径与其他路由分开。同时,这也有助于减少 保留名称 的数量。
查看所有可用路由
您可以通过以下命令在控制台中查看和查找路由:
rails routes | grep crm您也可以通过访问 http://gdk.test:3000/rails/info/routes 在浏览器中查看路由。
全局路由
我们有一些全局路由。例如:
/-/health
/-/metrics组路由
每个组路由都必须在 /-/ 作用域下。
示例:
gitlab-org/-/edit
gitlab-org/-/activity
gitlab-org/-/security/dashboard
gitlab-org/serverless/-/activity要实现这一点,请使用 scope '-' 方法。
项目路由
每个项目路由都必须在 /-/ 作用域下,除非 Git 客户端或其他软件有不同要求的情况。
示例:
gitlab-org/gitlab/-/activity
gitlab-org/gitlab/-/jobs/123
gitlab-org/gitlab/-/settings/repository
gitlab-org/serverless/runtimes/-/settings/repository更改现有路由
除非必要,否则不要更改现有页面的 URL。如果必须进行更改,请确保用户不会察觉,因为我们不希望他们收到 404 Not Found 错误(如果可以避免的话)。下表描述了不同情况下的最低要求:
| URL 描述 | 示例 | 处理方式 |
|---|---|---|
| 可用于脚本和自动化 | snippet#raw |
在一个主要版本中同时支持旧 URL 和新 URL。然后在另一个主要版本中支持从旧 URL 到新 URL 的重定向。 |
| 可能被保存或共享 | issue#show |
添加从旧 URL 到新 URL 的重定向,直到下一个主要版本。 |
| 使用有限,不太可能被共享 | admin#labels |
不需要额外步骤。 |
在所有情况下,只有当旧路由的流量已经显著下降(例如,根据日志或 BigQuery 数据)时,才应该移除它。否则,可能需要更多努力来通知用户其弃用信息,然后才能考虑再次移除它。
迁移无作用域路由
目前,大多数路由都放置在 /-/ 作用域下。但是,您可以帮助我们迁移其余的路由!要迁移路由:
- 通过添加
-作用域来修改现有路由。 - 使用
Gitlab::Routing.redirect_legacy_paths为旧路由添加重定向。 - 创建一个技术债务问题,以便在后续版本中移除已弃用的路由。
要开始,请查看一个示例合并请求。