Apollo-link-rest: Erro ao executar uma mutação sem nenhum corpo de solicitação

Criado em 28 set. 2018  ·  5Comentários  ·  Fonte: apollographql/apollo-link-rest

Parece que você não pode fazer uma solicitação PATCH ou POST sem entrada?

Erro: 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.

Mutação:

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

Opções Apollo:

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

Comentários muito úteis

Na verdade, para mim input: null não funcionou, mas funcionou:

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

Todos 5 comentários

Eu acho que você pode fazer isso:

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

Na verdade, para mim input: null não funcionou, mas funcionou:

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

Isso não é objetivamente horrível? Existe uma maneira de contornar isso agora? A documentação diz:

Ao fazer uma solicitação POST ou PUT HTTP, geralmente você precisa fornecer um corpo de solicitação. Por convenção, GraphQL recomenda que você nomeie seus tipos de entrada como entrada, portanto, por padrão, é onde procuraremos encontrar um objeto JSON para seu corpo.

Isso não soa como se estivéssemos cientes do fato de que nem sempre você precisa de um corpo?

Falando como o escritor dessa linha doc, sim, estou ciente. Isso simplesmente não tem sido uma prioridade tão alta para meus casos de uso.

@ d9001 Se você observar a solução alternativa de @Laruxo, verá que tudo o que precisa fazer é adicionar algumas letras para contornar essa restrição. Se você quiser contribuir com código para este recurso, ficarei feliz em ajudar a revisá-lo.

Sim, não é que eu não conseguisse fazer funcionar. Isso me deixou maluco, descobrindo qual era o problema, e a solução é meio meh, conforme chamado em minhas solicitações de pull, onde todos me disseram para remover o objeto não utilizado: |

Analisarei o que seria necessário para remover esse requisito.

Esta página foi útil?
0 / 5 - 0 avaliações