Apollo-link-rest: Возможность передавать данные в запрос POST

Созданный на 16 июн. 2018  ·  3Комментарии  ·  Источник: apollographql/apollo-link-rest

У меня есть существующий REST API, который требует публикации данных в формате JSON. Он не принимает параметры URL. Я просмотрел документацию, но, похоже, не говорит об этом. Это поддерживается?

Вот пример того, чего я пытаюсь достичь:

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

Заранее спасибо!

question❔

Самый полезный комментарий

Вы правы, 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
  }
}

Последний пример - это в основном то, что есть в моем приложении.

Все 3 Комментарий

Я думаю, что 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 - спасибо! Это многое прояснило. Вы правы, я случайно вставил ввод в директиву.

Была ли эта страница полезной?
0 / 5 - 0 рейтинги