Apollo-link-rest: Ошибка при запуске мутации без тела запроса

Созданный на 28 сент. 2018  ·  5Комментарии  ·  Источник: apollographql/apollo-link-rest

Кажется, вы не можете сделать запрос PATCH или POST без ввода?

Ошибка: Error: [GraphQL mutation using a REST call without a body]. No input was detected. Pass bodyKey, or bodyBuilder to the @rest() directive to resolve this.

Мутация:

mutation extendTrial($orgSlug: String!) {
  extendTrialResult(orgSlug: $orgSlug) @rest(
    type: "Org",
    path: "/orgs/{args.orgSlug}/extend_trial/",
    method: "PATCH",
    bodySerializer: "text"
  )
}

Варианты Аполлона:

bodySerializers: {
  text: (data, headers) => {
    headers.set('Content-Type', 'text/plain');
    return { body: data, headers };
  }
}

Самый полезный комментарий

На самом деле для меня input: null не сработало, но это сработало:

mutation extendTrial($orgSlug: String!) {
  extendTrialResult(orgSlug: $orgSlug, input: {}) @rest(
    type: "Org",
    path: "/orgs/{args.orgSlug}/extend_trial/",
    method: "PATCH",
    bodySerializer: "text"
  )
}

Все 5 Комментарий

Думаю, ты справишься:

mutation extendTrial($orgSlug: String!) {
  extendTrialResult(orgSlug: $orgSlug, input: null) @rest(
    type: "Org",
    path: "/orgs/{args.orgSlug}/extend_trial/",
    method: "PATCH",
    bodySerializer: "text"
  )
}

На самом деле для меня input: null не сработало, но это сработало:

mutation extendTrial($orgSlug: String!) {
  extendTrialResult(orgSlug: $orgSlug, input: {}) @rest(
    type: "Org",
    path: "/orgs/{args.orgSlug}/extend_trial/",
    method: "PATCH",
    bodySerializer: "text"
  )
}

Разве это не ужасно объективно? Есть ли способ обойти это сейчас? В документации говорится:

При выполнении HTTP-запроса POST или PUT часто требуется предоставить тело запроса. По соглашению GraphQL рекомендует вам называть ваши типы ввода как input, поэтому по умолчанию мы будем искать объект JSON для вашего тела.

Разве это не звучит так, как будто мы осознаем тот факт, что вам не всегда нужно тело?

Как автор этой строки документа, да, я в курсе. Это просто не было таким приоритетом для моих сценариев использования.

@ d9001 Если вы посмотрите на обходной путь @ Laruxo, вы увидите, что все, что вам нужно сделать, это добавить несколько букв, чтобы обойти это ограничение. Если вы хотите внести свой код для этой функции, я буду рад помочь его просмотреть.

Да, дело не в том, что я не мог заставить его работать. Это просто сводило меня с ума, когда я выяснял, в чем проблема, и решение вроде бы такое, как говорилось в моих запросах на вытягивание, где все говорили мне удалить неиспользуемый объект: |

Я посмотрю, что нужно сделать, чтобы убрать это требование.

Была ли эта страница полезной?
0 / 5 - 0 рейтинги