GraphQL의 동적 쿼리
2492 단어 webdevjavascriptgraphqlnode
query myQuery() {
user {
age
firstName
lastName
dob
}
}
위 쿼리는 형식의 응답을 반환합니다.
data {
user {
age: 23,
firstName: "John",
lastName: "Smith",
dob: "01-01-1970"
}
}
글쎄, 이것은 꽤 표준적인 것들이다. GraphQL 끝점은 요청된 정확한 필드를 반환합니다.
이제 매번 다른 필드를 쿼리하려면 어떻게 합니까? 예를 들어, 처음에는
{ age, firstName }
쿼리한 다음 { age, dob }
쿼리하고 싶습니다. 두 번째 경우에는 필요하지 않기 때문에 firstName
를 가져오고 싶지 않습니다. 이것은 특히 API 호출이 특정 필드와 관련된 경우 견고한 접근 방식입니다.이에 대한 사용 사례는 다음과 같습니다.
이를 수행하는 한 가지 방법은 지정된 필드에 따라 쿼리를 생성하는 것입니다. 그러나 중첩된 json을 도입하자마자 이것은 꽤 지저분해집니다.
이를 해결하기 위해 GraphQL에는 directives 이라는 매우 편리한 기능이 있습니다. 특히
@include
지시문은 동적 쿼리 문제를 해결합니다.이제
@include
지시문을 사용하여 위의 쿼리를 다시 작성합니다.query myQuery($age: Boolean!, $firstName: Boolean!, $lastName: Boolean!, $dob: Boolean!) {
user {
age @include(if: $age)
firstName @include(if: $firstName)
lastName @include(if: $lastName)
dob @include(if: $dob)
}
}
variables:
{
age: true,
firstName: true,
lastName: false,
dob: false
}
위 쿼리의 응답은 다음과 같습니다.
data {
user {
age: 23,
firstName: "John"
}
}
변수 json에서
age
로 설정된 것만 firstName
및 true
를 반환합니다. 이 @include
지시문에 대한 또 다른 좋은 점은 GraphQL 엔진이 해당 리졸버를 실행하지도 않아 성능이 향상된다는 것입니다. 이러한 변수 json을 조작하는 것은 매우 간단하며 모든 요청에 대해 쿼리를 변경할 필요가 없습니다. dob
대신 firstName
값을 얻으려면 변수 json에서 firstName: false
와 dob: true
만 변경하면 됩니다.이 지시문 사용의 단점은 쿼리가 훨씬 더 장황하고 여러 위치에서 변수를 반복해야 한다는 것입니다. 그러나 설명된 대로here GraphQL 유형 안전의 고유한 부분입니다.
Reference
이 문제에 관하여(GraphQL의 동적 쿼리), 우리는 이곳에서 더 많은 자료를 발견하고 링크를 클릭하여 보았다 https://dev.to/freakomonk/dynamic-queries-in-graphql-1pbb텍스트를 자유롭게 공유하거나 복사할 수 있습니다.하지만 이 문서의 URL은 참조 URL로 남겨 두십시오.
우수한 개발자 콘텐츠 발견에 전념 (Collection and Share based on the CC Protocol.)