2017-10-02 2 views
0

Ich versuche nest Fragmente (keine Rekursion oder unbegrenzte Expansion) in meiner graphql-Abfrage. Aber entweder berücksichtigt das Diagramm graphql meine Abfrage nicht als gültig oder die Fragmentdefinition erscheint redundant. Mein Wunsch graphql Antwort-Struktur ist:Verschachtelung Fragmente in graphql

` 
{ 
    "data":{ 
     "availability":{ 
      "mon":{ 
       "open":"5.00 a.m.", 
       "close":"10.00 p.m.", 
       "allday":false, 
       "closed":false 
      }, 
      "tue":{ 
       "open":"5.00 a.m.", 
       "close":"10.00 p.m.", 
       "allday":false, 
       "closed":false 
      }, 
      "wed":{ 
       "open":"5.00 a.m.", 
       "close":"10.00 p.m.", 
       "allday":false, 
       "closed":false 
      }, 
      "thu":{ 
       "open":"5.00 a.m.", 
       "close":"10.00 p.m.", 
       "allday":false, 
       "closed":false 
      }, 
      "fri":{ 
       "open":"5.00 a.m.", 
       "close":"10.00 p.m.", 
       "allday":false, 
       "closed":false 
      }, 
      "sat":{ 
       "open":"5.00 a.m.", 
       "close":"10.00 p.m.", 
       "allday":false, 
       "closed":false 
      }, 
      "sun":{ 
       "open":"5.00 a.m.", 
       "close":"10.00 p.m.", 
       "allday":false, 
       "closed":false 
      } 
     } 
    } 
} 
` 

wo Verfügbarkeit Verfügbarkeit und mon hat geben, Di, usw. haben Typ Tag

Ansatz 1: Dies ist keine gültige Syntax in graphql . graphql wirft Fehler (nicht erlaubt auf diese Weise nisten)

` 
fragment Hours on Day { 
    open 
    close 
    allday 
    closed 
} 

fragment DailyAvailability on Availability { 
    mon 
    tue 
    wed 
    thu 
    fri 
    sat 
    sun 
} 

query { 
    availability { 
     ... DailyAvailability { 
      ... Hours 
     } 
    } 
} 
` 

Ansatz 2: Dies funktioniert, aber scheint überflüssig, da ich separat an jedem Tag Stunden zu verbreiten.

Bitte schlagen Sie vor, wenn es eine Möglichkeit gibt, Fragmente zu verschachteln, wie ich es bei meinem ersten Ansatz tun möchte.

Antwort

0

Dies sieht so aus, als ob Sie Feldanforderungen mit "Aliase" verwenden möchten. Ihr Schema würde in etwa so aussehen:

type QueryRoot { 
    availability: Availability 
} 

type Availability { 
    openingHours(forDay: WeekDay): Day 
} 

enum WeekDay { 
    mon 
    tue 
    wed 
    thu 
    fri 
    sat 
    sun 
} 

type Day { 
    open: String 
    close: String 
    allday: Boolean 
    closed: Boolean 
} 

Dann ist diese Abfrage würden Sie geben, was Sie gefragt:

query q { 
    availability { 
    mon: openingHours(forDay: mon) { ... DailyAvailability } 
    tue: openingHours(forDay: tue) { ... DailyAvailability } 
    wed: openingHours(forDay: wed) { ... DailyAvailability } 
    thu: openingHours(forDay: thu) { ... DailyAvailability } 
    fri: openingHours(forDay: fri) { ... DailyAvailability } 
    sat: openingHours(forDay: sat) { ... DailyAvailability } 
    sun: openingHours(forDay: sun) { ... DailyAvailability } 
    } 
} 
fragment DailyAvailability on Day { 
    open 
    close 
    allday 
    closed 
}