Apollo-link-rest: Possibilité de transmettre des données à une requête POST

Créé le 16 juin 2018  ·  3Commentaires  ·  Source: apollographql/apollo-link-rest

J'ai une API REST existante qui nécessite que les données soient publiées au format JSON. Il n'accepte pas les paramètres d'URL. J'ai regardé dans la documentation, mais je n'ai pas l'air d'en parler. Est-ce pris en charge ?

Voici un exemple de ce que j'essaye d'accomplir :

curl -X POST http://localhost:8000/rest-auth/login/ -d '{}'

Merci d'avance!

question❔

Commentaire le plus utile

Vous avez raison, bodyKey/input est ce dont vous avez besoin.

Premièrement : vous transmettez une entrée à la directive, vous vouliez donc probablement :

mutation login ($username: String!, $password: String!) {
  login(input: {username: $username, password: $password}) @rest(
    method: "POST",
    endpoint: "default",
    path: "rest-auth/login/", 
  ) {
    results
  }
}

Mais cela pourrait ne pas fonctionner, je pense que nous avons un bogue, où "l'entrée" ne peut pas être construite dynamiquement comme vous le faites. (J'aimerais que ce bug soit corrigé)

Essayer:

input LoginInput { # you can omit this whole declaration with ApolloLink Rest
  username: String!
  password: String!
}

mutation login(input: LoginInput!) {
  login(input: $input) @rest(
    method: "POST",
    endpoint: "default", # if you only have 1 endpoint, you can omit this too if you create your rest link the right way
    path: "rest-auth/login/", 
  ) {
    results
  }
}

Ce dernier exemple est essentiellement ce que mon application a.

Tous les 3 commentaires

Je pense que bodyKey/bodyBuilder est ce que je cherchais.

J'ai essayé de faire quelque chose comme ça :

mutation login ($username: String!, $password: String!) {
  login @rest(
    method: "POST",
    endpoint: "default",
    path: "rest-auth/login/", 
    input: {username: $username, password: $password}
  ) {
    results
  }
}

Mais je continue à avoir cette erreur :

[GraphQL mutation using a REST call without a body]. No `input` was detected. Pass bodyKey, or bodyBuilder to the @rest() directive to resolve this.

Mon lien de repos ressemble à ceci :

export const restLink = new RestLink({
  endpoints: {
    default: process.env.REACT_APP_HOST_URL,
  },
  headers: {
    "Content-Type": "application/json"
  },
  credentials: "same-origin",
})

Mon client ressemble à ceci :

const client = new ApolloClient({
  link: ApolloLink.from([ stateLink, restLink ]),
  cache: cache,
  defaultOptions,
})

Vous avez raison, bodyKey/input est ce dont vous avez besoin.

Premièrement : vous transmettez une entrée à la directive, vous vouliez donc probablement :

mutation login ($username: String!, $password: String!) {
  login(input: {username: $username, password: $password}) @rest(
    method: "POST",
    endpoint: "default",
    path: "rest-auth/login/", 
  ) {
    results
  }
}

Mais cela pourrait ne pas fonctionner, je pense que nous avons un bogue, où "l'entrée" ne peut pas être construite dynamiquement comme vous le faites. (J'aimerais que ce bug soit corrigé)

Essayer:

input LoginInput { # you can omit this whole declaration with ApolloLink Rest
  username: String!
  password: String!
}

mutation login(input: LoginInput!) {
  login(input: $input) @rest(
    method: "POST",
    endpoint: "default", # if you only have 1 endpoint, you can omit this too if you create your rest link the right way
    path: "rest-auth/login/", 
  ) {
    results
  }
}

Ce dernier exemple est essentiellement ce que mon application a.

@fbartho - merci ! Cela a beaucoup clarifié. Vous avez raison, j'ai mis accidentellement l'entrée dans la directive.

Cette page vous a été utile?
0 / 5 - 0 notes