This page contains information related to upcoming products, features, and functionality. It is important to note that the information presented is for informational purposes only. Please do not rely on this information for purchasing or planning purposes. As with all projects, the items mentioned on this page are subject to change or delay. The development, release, and timing of any products, features, or functionality remain at the sole discretion of GitLab Inc.
StatusAuthorsCoachDRIsOwning StageCreated
proposed -

このドキュメントは作業中のものであり、セルズの設計のごく初期の状態を表しています。重要な点は文書化されていませんが、将来的には追加される予定です。これはCellsの可能性のあるアーキテクチャの一つであり、どのアプローチを実装するか決める前に、代替案と比較検討するつもりです。この文書化は、このアプローチを選ばなかった理由を文書化できるよう、これを実装しないと決めた場合でも残しておきます。

Cells:GraphQL

GitLabは効率的なデータクエリオペレーションを実行するためにGraphQLを多用しています。GraphQLはその性質上、直接ルーティングすることはできません。GitLabの使い方では、/api/graphql エンドポイントを呼び出します。そして、クエリやリクエスト本体の変異だけが、データにアクセスできる場所を定義するかもしれません。

1.定義

2.データフロー

3.提案

CellsアーキテクチャでGraphQLを実装するには、少なくとも2つの主な方法があります。

3.1.エンドポイントによってルーティング可能なGraphQL

/api/graphql/api/organization/<organization>/graphql に変更。

  • これにより、API URI が変更されるため、/api/graphql エンドポイントの既存のすべての使用が破壊されます。

3.2.ボディによってルーティング可能なGraphQL

ルーターの一部として、project のようなルーティング可能なエンティティを見つけるためにGraphQLボディを解析します。

  • この場合でも、GraphQLクエリは指定されたCellのコンテキストでのみ実行され、データをマージすることはできません。
# Good example
{
  project(fullPath:"gitlab-org/gitlab") {
    id
    description
  }
}

# Bad example, since Merge Request is not routable
{
  mergeRequest(id: 1111) {
    iid
    description
  }
}

3.3.マージGraphQLプロキシ

ルーターGraphQL Proxyの一部として実装。

  • これによってページネーションが難しくなったり、すべてのCellの結果がマージされるようなクエリを多数実行することが想定されます。
{
  project(fullPath:"gitlab-org/gitlab"){
    id, description
  }
  group(fullPath:"gitlab-com") {
    id, description
  }
}

4.評価

4.1.長所

4.2.コンサ