Apollo-link-rest: POST рдЕрдиреБрд░реЛрдз рдореЗрдВ рдбреЗрдЯрд╛ рдкрд╛рд╕ рдХрд░рдиреЗ рдХреА рдХреНрд╖рдорддрд╛

рдХреЛ рдирд┐рд░реНрдорд┐рдд 16 рдЬреВрди 2018  ┬╖  3рдЯрд┐рдкреНрдкрдгрд┐рдпрд╛рдБ  ┬╖  рд╕реНрд░реЛрдд: apollographql/apollo-link-rest

рдореЗрд░реЗ рдкрд╛рд╕ рдПрдХ рдореМрдЬреВрджрд╛ рдЖрд░рдИрдПрд╕рдЯреА рдПрдкреАрдЖрдИ рд╣реИ рдЬрд┐рд╕рдХреЗ рд▓рд┐рдП рдбреЗрдЯрд╛ рдХреЛ JSON рдХреЗ рд░реВрдк рдореЗрдВ рдкреЛрд╕реНрдЯ рдХрд░рдиреЗ рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рд╣реИред рдпрд╣ рдпреВрдЖрд░рдПрд▓ рдкреИрд░рд╛рдореАрдЯрд░ рд╕реНрд╡реАрдХрд╛рд░ рдирд╣реАрдВ рдХрд░рддрд╛ рд╣реИред рдореИрдВрдиреЗ рдкреНрд░рд▓реЗрдЦрди рдореЗрдВ рджреЗрдЦрд╛ рд╣реИ, рд▓реЗрдХрд┐рди рдЗрд╕ рдмрд╛рд░реЗ рдореЗрдВ рдмрд╛рдд рдирд╣реАрдВ рдХрд░ рд░рд╣рд╛ рд╣реИред рдХреНрдпрд╛ рдпрд╣ рд╕рдорд░реНрдерд┐рдд рд╣реИ?

рдореИрдВ рдЬреЛ рд╣рд╛рд╕рд┐рд▓ рдХрд░рдиреЗ рдХреА рдХреЛрд╢рд┐рд╢ рдХрд░ рд░рд╣рд╛ рд╣реВрдВ рдЙрд╕рдХрд╛ рдПрдХ рдЙрджрд╛рд╣рд░рдг рдпрд╣рд╛рдВ рджрд┐рдпрд╛ рдЧрдпрд╛ рд╣реИ:

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

рдЕрдЧреНрд░рд┐рдо рдореЗрдВ рдзрдиреНрдпрд╡рд╛рдж!

рд╕рдмрд╕реЗ рдЙрдкрдпреЛрдЧреА рдЯрд┐рдкреНрдкрдгреА

рдЖрдк рд╕рд╣реА рд╣реИрдВ, рдмреЙрдбреАрдХреА/рдЗрдирдкреБрдЯ рд╡рд╣реА рд╣реИрдВ рдЬреЛ рдЖрдкрдХреЛ рдЪрд╛рд╣рд┐рдПред

рдкрд╣рд▓рд╛: рдЖрдк рдирд┐рд░реНрджреЗрд╢ рдореЗрдВ рдЗрдирдкреБрдЯ рдкрд╛рд╕ рдХрд░ рд░рд╣реЗ рд╣реИрдВ, рдЗрд╕рд▓рд┐рдП рдЖрдк рд╢рд╛рдпрдж рдЪрд╛рд╣рддреЗ рдереЗ:

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

рдЖрдк рд╕рд╣реА рд╣реИрдВ, рдмреЙрдбреАрдХреА/рдЗрдирдкреБрдЯ рд╡рд╣реА рд╣реИрдВ рдЬреЛ рдЖрдкрдХреЛ рдЪрд╛рд╣рд┐рдПред

рдкрд╣рд▓рд╛: рдЖрдк рдирд┐рд░реНрджреЗрд╢ рдореЗрдВ рдЗрдирдкреБрдЯ рдкрд╛рд╕ рдХрд░ рд░рд╣реЗ рд╣реИрдВ, рдЗрд╕рд▓рд┐рдП рдЖрдк рд╢рд╛рдпрдж рдЪрд╛рд╣рддреЗ рдереЗ:

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 рд░реЗрдЯрд┐рдВрдЧреНрд╕

рд╕рдВрдмрдВрдзрд┐рдд рдореБрджреНрджреЛрдВ

Daniel-Griffiths picture Daniel-Griffiths  ┬╖  5рдЯрд┐рдкреНрдкрдгрд┐рдпрд╛рдБ

Paddy-Hamilton picture Paddy-Hamilton  ┬╖  7рдЯрд┐рдкреНрдкрдгрд┐рдпрд╛рдБ

chimon2000 picture chimon2000  ┬╖  9рдЯрд┐рдкреНрдкрдгрд┐рдпрд╛рдБ

joemphilips picture joemphilips  ┬╖  6рдЯрд┐рдкреНрдкрдгрд┐рдпрд╛рдБ

i-Hun picture i-Hun  ┬╖  4рдЯрд┐рдкреНрдкрдгрд┐рдпрд╛рдБ