मेरे पास एक बड़ा डेटासेट है जिसके साथ मैं प्रयोग कर रहा हूं। मैं सशर्त रूप से नेस्टेड वस्तुओं को शामिल करने की कोशिश कर रहा हूँ। मेरी क्लाइंट क्वेरी:

query getAllAlbums ($fetchPhotos: Boolean!){
  albums{
    id
    title
    tags{
      ...Tag
      weight
    }
    carouselItems{
      id,
      mediaUrl
    }
    photos  @include(if: $fetchPhotos){
      ...Photo
    }
  }
}

सर्वर साइड पर लागू करने के अपने पहले प्रयास के लिए, मैंने इसे स्कीमा में जोड़ा:

type Album @include{
  id: String
  title: String
  tags: [Tag]
  photos: [Photo] @include(if: fetchPhotos)
  carouselItems: [Photo]
}

मुझे सत्यापन त्रुटियां मिल रही हैं:

Error: Directive "@include" may not be used on OBJECT.

Directive "@include" argument "if" of type "Boolean!" is required, but it was not provided.

Directive "@include" may not be used on FIELD_DEFINITION.

ठीक है, मैं इसे स्कीमा पर उपयोग नहीं कर सकता, तो क्या बचा है? समाधानकर्ता? यह तर्कों में नहीं है ...

मैं इसे कैसे क्रियान्वित करूं? एपोलोग्राफकल दस्तावेज कहता है कि वे इसका समर्थन करते हैं, लेकिन इनके लिए कोई उदाहरण नहीं दिया गया।

1
Chrizzis 26 नवम्बर 2020, 05:27

1 उत्तर

सबसे बढ़िया उत्तर

@skip और @include निर्देश में अंतर्निहित हैं ग्राफ़क्यूएल विनिर्देश ही। आपको उन्हें सक्षम करने के लिए सर्वर-साइड कुछ भी करने की ज़रूरत नहीं है - वे केवल किसी भी GraphQL सर्वर के साथ काम करेंगे जो कि विशिष्ट है।

यदि @include निर्देश किसी क्षेत्र या खंड पर मौजूद है और if का मान false है, तो GraphQL रनटाइम केवल उस क्षेत्र या खंड का इलाज करेगा जैसे कि वह मौजूद नहीं था प्रथम स्थान (रिज़ॉल्वर को कॉल नहीं किया जाएगा और फ़ील्ड को क्लाइंट को लौटाए गए परिणाम से हटा दिया जाएगा)। वही @skip निर्देश पर लागू होता है जब if का मान true होता है।

1
Daniel Rearden 26 नवम्बर 2020, 03:35