Должен ли я создать распознаватель для каждого запроса или для всех его полей в GraphQL? - PullRequest
0 голосов
/ 02 июня 2019

Мне интересно использовать GraphQL, и я только начал экспериментировать с ним.

В учебнике по GraphQL можно увидеть следующую цитату:

Каждое поле в схеме GraphQL поддерживается определителем.

Но если вы посмотрите на gqlgen (это библиотека golang для построения серверов GraphQL) Пример to , который использует следующую схему:

...
type MyQuery {
    todo(id: ID!): Todo
    lastTodo: Todo
    todos: [Todo!]!
}

type MyMutation {
    createTodo(todo: TodoInput!): Todo!
    updateTodo(id: ID!, changes: Map!): Todo
}

type Todo {
    id: ID!
    text: String!
    done: Boolean!
}
...

фактически использует 3 автоматически сгенерированных резольвера (т. е. 1 для каждого запроса , а не поля):

func (r *QueryResolver) Todo(ctx context.Context, id int) (*Todo, error) {
func (r *QueryResolver) LastTodo(ctx context.Context) (*Todo, error) {
func (r *QueryResolver) Todos(ctx context.Context) ([]*Todo, error) {

Это ожидаемое поведение, чтобы не генерировать распознаватели для каждого поля (но вместо этого для каждого запроса)?

1 Ответ

1 голос
/ 02 июня 2019

Когда весь тип поддерживается резольвером, все равно верно, что каждое поле поддерживается резольвером;)

По сравнению с SQL - обычно вы не запрашиваете каждое (одно) поле отдельно, когда вам нужна вся запись / строка.

Преобразователи уровня поля необходимы, когда распознаватель типа не возвращает данные для всех обязательных (по запросу) полей - например, для отношений.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...