2017-10-02 9 views
0

graphqlクエリでネストフラグメント(再帰または無制限の展開)を試みています。しかし、graphqlスキーマは私のクエリを有効と見なさないか、フラグメント定義が冗長に見えます。私の希望graphql応答構造は次のとおりです。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 
      } 
     } 
    } 
} 
` 
可用性がなど、火曜、 可用性と 月を入力した

データイプを持っている

アプローチ1:これはgraphqlで有効な構文ではありません。 graphqlでエラーが発生します(この方法を入れ子にはできません)

` 
fragment Hours on Day { 
    open 
    close 
    allday 
    closed 
} 

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

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

アプローチ2:これは動作しますが、私はそれぞれ別々の日に時間を広めるために持っているように冗長なようです。

` 
fragment Hours on Day { 
    open 
    close 
    allday 
    closed 
} 

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

query { 
    availability { 
     ... DailyAvailability 
    } 
} 
` 

私は私の最初のアプローチで行うことを意図したとおりネスト断片への道があるかどうかをお勧めしてください。

答えて

0

「エイリアス」でフィールドリクエストを使用するように見えます。

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 
} 
:あなたが尋ねこのクエリはあなたを与えるだろうその後

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 
} 

:あなたのスキーマは次のようになります

関連する問題