私のプロジェクトでは、段階的開示 (ユーザーが権限を持っている場合に UI データの一部を表示する) を実装する予定です。基本的にreact + apollo client with hooks + graphqltagを使っています。
しかし問題は、UI の一部を非表示にする方法ではなく、権限によってクエリを分割する方法です。そのため、現在、ページについては、さまざまな種類のデータに対して多くの「サブクエリ」を含む単一のクエリを作成しています。例えば :
export const GET_DATA_X= gql`
query getDataX(
$applicationId: ID!
$dateFrom: String!
$dateTo: String!
$displayMode: String!
) {
applicationShipDates(
applicationId: $applicationId
dateFrom: $dateFrom
dateTo: $dateTo
displayMode: $displayMode
) {
periodStartDate
dates
}
graphStatistics(
applicationId: $applicationId
dateFrom: $dateFrom
dateTo: $dateTo
) {
totalVisits
totalConversions
conversionRate
}
}
`;
そして今、ユーザーが許可を持っていれば、このクエリの各部分が利用可能になります。バックエンド側では、すでに処理されています。null/空の配列とエラーをスローします。しかし、IMO では、データのこの部分を求めることさえすべきではありません。そして、それが問題です。これを apollo クライアントで行う方法について何か提案はありますか?
現在、それを行う方法について2つのアイデアがあります。
- クエリを 1 つに分割し、ユーザーが権限を持っている場合はいくつかの API 呼び出しを行い、そうでない場合はスキップします
- クエリ定義とクエリに必要なアクセス許可を含む、オブジェクトの prop 配列として渡すカスタム関数を作成します。この配列を許可によってフィルタリングし、次のような小さなクエリ定義から、
applicationShipDates
またはいくつかの「サブクエリ」を含むgraphStatistics
大きなクエリを作成しますgetDataX