Можем ли мы настроить результат запроса GraphQL так, чтобы он условно возвращал либо логический, либо пользовательский тип объекта?

#graphql #apollo-server

Вопрос:

Я пытаюсь написать запрос graphql, который проверяет наличие записи. Целевое поведение здесь заключается в том, что он возвращает запись, если она существует, и ложь, если ее нет. (Я намеренно пытаюсь избежать возврата ошибки, если запись не существует). Я попробовал что-то вроде этого:

 union VerifyExistenceResult = Boolean | TheRecordType

verifyRecordExists(recordUrl: String!): VerifyExistenceResult!
 

но профсоюзы, похоже, не поддерживают наличие скаляров. Есть ли здесь лучший подход?

Ответ №1:

Да , вы определенно можете это сделать. Вы можете объявить переменную в своем коде, результатом которой является логическое значение.После этого в своем запросе gql вы можете создать директиву , которая возвращает нужное вам поле. Если логическое значение возвращает отрицательное значение , это поле никогда не запрашивается. (Документы для директив apollo : https://www.apollographql.com/docs/apollo-server/schema/directives/)

Комментарии:

1. Спасибо! Я посмотрел директивы, но на самом деле не понял, как их использовать для этого сценария.. есть ли шанс, что вы могли бы помочь мне с примером?

2. @VishnuNarayanan Я только что опубликовал еще один ответ, надеюсь, это поможет

Ответ №2:

Допустим, у вас есть следующий запрос gql.

 const GET_RECORD=gql`
 query ($skipRecord:Boolean!){
 recordUrl
}
 `
 

Затем вам придется объявить локальную переменную с именем, например, localSkipRecord.

Теперь, когда вы на самом деле используете запрос, скажем , с помощью крючка, вы должны передать это:

 {data,loading,error}=useMutation(GET_RECORD,{
 variables:{skipRecord:localSkipRecord}
})