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.
Status | Authors | Coach | DRIs | Owning Stage | Created |
---|---|---|---|---|---|
proposed | - |
이 문서는 작업 중이며 Cells 설계의 매우 초기 상태를 나타냅니다. 중요한 측면들이 문서화되지 않았지만, 우리는 나중에 이를 추가할 것으로 기대합니다. 이는 Cells를 위한 하나의 가능한 아키텍처이며, 우리는 구현할 접근 방법을 결정하기 전에 다른 접근 방법과 대조할 것을 의도합니다. 우리가 이 접근 방법을 구현하지 않기로 결정하더라도, 우리는 선택하지 않은 이유를 기록하기 위해 이 문서를 유지할 것입니다.
Cells: GraphQL
GitLab은 효율적인 데이터 쿼리 작업을 수행하기 위해 GraphQL을 광범위하게 사용합니다. GraphQL은 그 성격 때문에 직접 라우팅되지 않습니다. GitLab이 사용하는 방식은 /api/graphql
엔드포인트를 호출하고, 요청 본문의 쿼리 또는 뮤테이션만이 데이터에 액세스할 수 있는 위치를 정의할 수 있습니다.
1. 정의
2. 데이터 흐름
3. 제안
Cells 아키텍처에서 GraphQL을 구현하는 적어도 두 가지 주요 방법이 있습니다.
3.1. 엔드포인트에 의한 GraphQL 라우팅
/api/graphql
을 /api/organization/<organization>/graphql
로 변경합니다.
- API URI가 변경되면 기존의
/api/graphql
엔드포인트 사용이 모두 중단됩니다.
3.2. 본문에 의한 GraphQL 라우팅
라우터의 일부로 GraphQL 본문을 구문 분석하여 project
와 같은 라우터 엔티티를 찾습니다.
- 이는 여전히 GraphQL 쿼리가 특정 Cell의 컨텍스트에서만 실행되도록 하며 데이터를 병합하는 것은 허용하지 않습니다.
# 좋은 예
{
project(fullPath:"gitlab-org/gitlab") {
id
description
}
}
# 병함 요청은 라우팅되지 않기 때문에 나쁜 예
{
mergeRequest(id: 1111) {
iid
description
}
}
3.3. GraphQL 프록시 병합
라우터의 일부로 병합된 결과를 파싱할 수 있는 GraphQL 프록시를 구현합니다.
- 이는 페이지네이션을 어렵게 만들 수 있으며, 결과가 모든 Cells 전체에 걸쳐 병합되는 많은 쿼리를 실행한다고 가정할 수 있습니다.
{
project(fullPath:"gitlab-org/gitlab"){
id, description
}
group(fullPath:"gitlab-com") {
id, description
}
}