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 数据)时,才应该移除它。否则,可能需要更多努力来通知用户其弃用信息,然后才能考虑再次移除它。

迁移无作用域路由

目前,大多数路由都放置在 /-/ 作用域下。但是,您可以帮助我们迁移其余的路由!要迁移路由:

  1. 通过添加 - 作用域来修改现有路由。
  2. 使用 Gitlab::Routing.redirect_legacy_paths 为旧路由添加重定向。
  3. 创建一个技术债务问题,以便在后续版本中移除已弃用的路由。

要开始,请查看一个示例合并请求

有用链接