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!
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.
Hilfreichster Kommentar
Sie haben Recht, bodyKey/Input sind das, was Sie brauchen.
Erstens: Sie übergeben eine Eingabe an die Direktive, also wollten Sie wahrscheinlich:
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:
Dieses letzte Beispiel ist im Grunde das, was meine App hat.