У меня есть существующий REST API, который требует публикации данных в формате JSON. Он не принимает параметры URL. Я просмотрел документацию, но, похоже, не говорит об этом. Это поддерживается?
Вот пример того, чего я пытаюсь достичь:
curl -X POST http://localhost:8000/rest-auth/login/ -d '{}'
Заранее спасибо!
Я думаю, что bodyKey/bodyBuilder
- это то, что я искал.
Я пытался сделать что-то вроде этого:
mutation login ($username: String!, $password: String!) {
login @rest(
method: "POST",
endpoint: "default",
path: "rest-auth/login/",
input: {username: $username, password: $password}
) {
results
}
}
Но я продолжаю получать эту ошибку:
[GraphQL mutation using a REST call without a body]. No `input` was detected. Pass bodyKey, or bodyBuilder to the @rest() directive to resolve this.
Моя ссылка на отдых выглядит так:
export const restLink = new RestLink({
endpoints: {
default: process.env.REACT_APP_HOST_URL,
},
headers: {
"Content-Type": "application/json"
},
credentials: "same-origin",
})
Мой клиент выглядит так:
const client = new ApolloClient({
link: ApolloLink.from([ stateLink, restLink ]),
cache: cache,
defaultOptions,
})
Вы правы, bodyKey / input - это то, что вам нужно.
Во-первых: вы передаете ввод в директиву, поэтому вы, вероятно, хотели:
mutation login ($username: String!, $password: String!) {
login(input: {username: $username, password: $password}) @rest(
method: "POST",
endpoint: "default",
path: "rest-auth/login/",
) {
results
}
}
Но это может не сработать, я думаю, у нас есть ошибка, из-за которой «ввод» не может быть сконструирован динамически, как это делаете вы. (Я бы хотел исправить эту ошибку)
Пытаться:
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
}
}
Последний пример - это в основном то, что есть в моем приложении.
@fbartho - спасибо! Это многое прояснило. Вы правы, я случайно вставил ввод в директиву.
Самый полезный комментарий
Вы правы, bodyKey / input - это то, что вам нужно.
Во-первых: вы передаете ввод в директиву, поэтому вы, вероятно, хотели:
Но это может не сработать, я думаю, у нас есть ошибка, из-за которой «ввод» не может быть сконструирован динамически, как это делаете вы. (Я бы хотел исправить эту ошибку)
Пытаться:
Последний пример - это в основном то, что есть в моем приложении.