Apollo-link-rest: Möglichkeit, Daten an eine POST-Anfrage zu übergeben

Erstellt am 16. Juni 2018  ·  3Kommentare  ·  Quelle: apollographql/apollo-link-rest

Ich habe eine vorhandene REST-API, für die Daten als JSON bereitgestellt werden müssen. Es akzeptiert keine URL-Parameter. Ich habe in die Dokumentation geschaut, scheint aber nicht darüber zu sprechen. Wird das unterstützt?

Hier ist ein Beispiel für das, was ich erreichen möchte:

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

Danke im Voraus!

question❔

Hilfreichster Kommentar

Sie haben Recht, bodyKey/Input sind das, was Sie brauchen.

Erstens: Sie übergeben eine Eingabe an die Direktive, also wollten Sie wahrscheinlich:

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

Aber das funktioniert vielleicht nicht, ich glaube, wir haben einen Fehler, bei dem die „Eingabe“ nicht so dynamisch konstruiert werden kann, wie Sie es tun. (Ich würde diesen Fehler gerne beheben)

Versuchen:

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
  }
}

Dieses letzte Beispiel ist im Grunde das, was meine App hat.

Alle 3 Kommentare

Ich denke, bodyKey/bodyBuilder ist das, wonach ich gesucht habe.

Ich habe versucht, so etwas zu tun:

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

Aber ich bekomme weiterhin diesen Fehler:

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

Mein Rest Link sieht so aus:

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

Mein Mandant sieht so aus:

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

Sie haben Recht, bodyKey/Input sind das, was Sie brauchen.

Erstens: Sie übergeben eine Eingabe an die Direktive, also wollten Sie wahrscheinlich:

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

Aber das funktioniert vielleicht nicht, ich glaube, wir haben einen Fehler, bei dem die „Eingabe“ nicht so dynamisch konstruiert werden kann, wie Sie es tun. (Ich würde diesen Fehler gerne beheben)

Versuchen:

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
  }
}

Dieses letzte Beispiel ist im Grunde das, was meine App hat.

@fbartho - danke! Dies hat vieles geklärt. Sie haben Recht, ich habe den Input aus Versehen in die Richtlinie übernommen.

War diese Seite hilfreich?
0 / 5 - 0 Bewertungen