Как избавиться от лишнего объекта-обертки от результата мутации? - PullRequest
0 голосов
/ 25 марта 2019

Когда я делаю запрос к своему бэкэнду через такую ​​мутацию:

mutation{
  resetPasswordByToken(token:"my-token"){
    id
  }
}

Я получаю ответ в таком формате:

{
  "data": {
    "resetPasswordByToken": {
      "id": 3
    }
  }
}

И эта оболочкаобъект, названный так же, как мутация, кажется мне несколько неловким (и, по крайней мере, избыточным) для меня.Есть ли способ избавиться от этой обертки, чтобы сделать возвращаемый результат немного чище?

Вот как я теперь определяю мутацию:

export const ResetPasswordByTokenMutation = {
    type: UserType,
    description: 'Sets a new password and sends an informing email with the password generated',
    args: {
        token: { type: new GraphQLNonNull(GraphQLString) },
        captcha: { type: GraphQLString },
    },
    resolve: async (root, args, request) => {
        const ip = getRequestIp(request);
        const user = await Auth.resetPasswordByToken(ip, args);
        return user.toJSON();
    }
};

1 Ответ

0 голосов
/ 25 марта 2019

Одним словом: Нет .

resetPasswordByToken - это не «объект-обертка», а просто поле, которое вы определили в своей схеме, которое разрешается в объект (вэтот случай, а UserType).Хотя обычно запрашивается только одно поле для вашего типа mutation, можно запросить любое количество полей:

mutation {
  resetPasswordByToken(token:"my-token"){
    id
  }
  someOtherMutation {
    # some fields here
  }
  andYetAnotherMutation {
    # some other fields here
  }
}

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

...