Существует ли соглашение об именах, чтобы избежать конфликтов имен в GraphQL, если у вас есть одинаковые понятия в Query и Mutation? - PullRequest
0 голосов
/ 28 января 2020

У меня есть следующая схема:

type ProviderDetails{ ... }

type CustomerDetails{ ... }

type Provider{
 details: ProviderDetails!
}

type Customer{
 details: CustomerDetails!
}

input CustomerModReq{...}

type CustomerModResp{...}

type CustomerM{
 modifyDetails(update:CustomerModReq):CustomerModResp!
}

input ProviderModReq{...}
type ProviderModResp{...}
type ProviderM{
 modifyDetails(update:ProviderModReq):ProviderModResp!
}

type Query{
 provider(id: String): Provider!
 customer(id:String): Customer!
}

type Mutation{
 provider(id:String): ProviderM!
 customer(id:String): CustomerM!
}

Я просто не уверен, что M как суффикс действительно идиоматический c. Как идиоматический c способ решить эту проблему с именами?

1 Ответ

0 голосов
/ 28 января 2020

Хотя попытка определить пространство ваших мутаций таким образом не нарушает спецификацию c, она работает вопреки установленному соглашению, поэтому вы не найдете соглашения в отношении именования ваших лишних типов. , Обычный способ состоит в том, чтобы называть поля Mutation в соответствии с теми действиями, которые они представляют:

type Mutation {
  modifyCustomer
  modifyProvider
}

Когда схема может включать в себя десятки или сотни полей, также обычно можно увидеть, как называть это :

type Mutation {
  customerAdd
  customerModify
  providerAdd
  providerModify
}

Мутации в пространстве имен с использованием отдельных типов, как правило, нецелесообразны, так как это излишне усложняет как ваш внутренний код, так и ваш клиентский код. Например, в качестве клиента, если я хочу пакетировать свои вызовы мутации и использовать тот факт, что поля уровня root разрешаются последовательно, я должен знать, чтобы не только использовать псевдонимы, но и знать, что я должен псевдоним root полей для достижения желаемого эффекта.

...