<p>рдЕрдкреЛрд▓реЛ-рд▓рд┐рдВрдХ-http рдПрдХ GET рд╡рд┐рдзрд┐ рдУрд╡рд░рд░рд╛рдЗрдб рдХрд╛ рд╕рдореНрдорд╛рди рдирд╣реАрдВ рдХрд░рддрд╛ рд╣реИ</p>

рдХреЛ рдирд┐рд░реНрдорд┐рдд 12 рдирд╡ре░ 2017  ┬╖  20рдЯрд┐рдкреНрдкрдгрд┐рдпрд╛рдБ  ┬╖  рд╕реНрд░реЛрдд: apollographql/apollo-link

рдбреЙрдХреНрд╕ рдХреЗ рдЕрдиреБрд╕рд╛рд░, fetchOptions рд╡рд┐рдХрд▓реНрдк рд╣рдореЗрдВ рдЕрдиреБрд░реЛрдз рдХреА рд╡рд┐рдзрд┐ рдХреЛ GET рдкрд░ рд╕реЗрдЯ рдХрд░рдиреЗ рдХреА рдЕрдиреБрдорддрд┐ рджреЗрддрд╛ рд╣реИред рдореБрдЭреЗ рдЙрдореНрдореАрдж рд╣реИ рдХрд┐ рдРрд╕рд╛ рдХрд░рдиреЗ рдХреЗ рдмрд╛рдж, рдХреНрд╡реЗрд░реА рдХреЛ рдЕрдиреБрд░реЛрдз рдирд┐рдХрд╛рдп рдХреЗ рдмрдЬрд╛рдп рдХреНрд╡реЗрд░реА рд╕реНрдЯреНрд░рд┐рдВрдЧ рдкреИрд░рд╛рдореАрдЯрд░ рдХреЗ рд░реВрдк рдореЗрдВ рд╢рд╛рдорд┐рд▓ рдХрд┐рдпрд╛ рдЬрд╛рдПрдЧрд╛; рдпрджрд┐ рдЖрдк рдХрд┐рд╕реА рдирд┐рдХрд╛рдп рдХреЗ рд╕рд╛рде GET рдЕрдиреБрд░реЛрдз рдХрд░рдиреЗ рдХрд╛ рдкреНрд░рдпрд╛рд╕ рдХрд░рддреЗ рд╣реИрдВ рддреЛ Chrome рдПрдХ рддреНрд░реБрдЯрд┐ рджреЗрддрд╛ рд╣реИред

рдЗрдЪреНрдЫрд┐рдд рдкрд░рд┐рдгрд╛рдо:
рдпрджрд┐ рдЕрдиреБрд░реЛрдз рд╡рд┐рдзрд┐ GET рд╣реИ, рддреЛ рдПрдХ рдХреНрд╡реЗрд░реА рд╕реНрдЯреНрд░рд┐рдВрдЧ рдХрд╛ рдирд┐рд░реНрдорд╛рдг рдХрд┐рдпрд╛ рдЬрд╛рдирд╛ рдЪрд╛рд╣рд┐рдПред

рд╡рд╛рд╕реНрддрд╡рд┐рдХ рдкрд░рд┐рдгрд╛рдо:
рдЕрдиреБрд░реЛрдз рдирд┐рдХрд╛рдп рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд┐рдпрд╛ рдЬрд╛рддрд╛ рд╣реИред

рд╕рдорд╕реНрдпрд╛ рдХреЛ рдкреБрди: рдкреЗрд╢ рдХреИрд╕реЗ рдХрд░реЗрдВ:

client.query({
  context: {
    fetchOptions: {
      method: 'GET',
    },
  },
  query: QUERY,
  variables: { query },
})

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

@szdc @Outlaw11A @arackaf рдпрд╣ рдХреИрд╕реЗ рдХрд░рдирд╛ рд╣реИ:

const customFetch = (uri, options) => {
  const { body, ...newOptions } = options;
  const queryString = objectToQuery(JSON.parse(body));
  requestedString = uri + queryString;
  return fetch(requestedString, newOptions);
};
const link = createHttpLink({
  uri: "data",
  fetchOptions: { method: "GET" },
  fetch: customFetch
});

рд╕рднреА 20 рдЯрд┐рдкреНрдкрдгрд┐рдпрд╛рдБ

@szdc рд╣рд╛рдБ рдпрд╣ рдирд┐рд╢реНрдЪрд┐рдд рд░реВрдк рд╕реЗ рдХрд╛рдо рдирд╣реАрдВ рдХрд░рддрд╛ рд╣реИ! рдХреНрдпрд╛ рдЖрдк рдЗрд╕реЗ рдЬреЛрдбрд╝рдиреЗ рдХреЗ рд▓рд┐рдП рддреИрдпрд╛рд░ рд╣реИрдВ? https://github.com/apolographql/apolo-link/issues/257 рдЬреИрд╕рд╛ рдХреБрдЫ рдПрдХ рдЕрдЪреНрдЫрд╛ рд╕рдорд╛рдзрд╛рди рд╣реЛ рд╕рдХрддрд╛ рд╣реИ рдФрд░ рд╕рд╛рде рд╣реА рдЕрдиреБрд░реЛрдз рднреЗрдЬрдиреЗ рд╕реЗ рдкрд╣рд▓реЗ рдЙрд╕реЗ рдмрджрд▓ рд╕рдХрддрд╛ рд╣реИ?

cc @arackaf @outlaw11a @puttyman рдЬрд┐рдирдХреА рдЗрд╕рдореЗрдВ рд░реБрдЪрд┐ рд╣реИ! рдЬреЛрдбрд╝рдиреЗ рдХреЗ рд▓рд┐рдП рдПрдХ рдмрд╣реБрдд рдЫреЛрдЯрд╛ рдмрджрд▓рд╛рд╡ рд╣реЛрдирд╛ рдЪрд╛рд╣рд┐рдП!

рдЕрдЧрд░ рдХреЛрдИ рдФрд░ рдирд╣реАрдВ рдЪрд╛рд╣реЗ рддреЛ рдореИрдВ рдЗрд╕реЗ рдЬреЛрдбрд╝ рджреВрдВрдЧрд╛ред

@szdc @arackaf рддреЛ рдкрддрд╛ рдЪрд▓рд╛ рдХрд┐ рдпрд╣ рдкрд╣рд▓реЗ рд╕реЗ рд╣реА рд╕рдВрднрд╡ рд╣реИ! рдореИрдВ рдЬрд▓реНрдж рд╣реА рдПрдХ рдкрд░реАрдХреНрд╖рдг рдФрд░ рджрд╕реНрддрд╛рд╡реЗрдЬрд╝реЛрдВ рдХреЛ рдЖрдЧреЗ рдмрдврд╝рд╛рдКрдВрдЧрд╛ рдЬрд┐рд╕рдореЗрдВ рджрд┐рдЦрд╛рдпрд╛ рдЬрд╛рдПрдЧрд╛ рдХрд┐ рдЗрд╕реЗ рдЖрдВрддрд░рд┐рдХ рдкрд░рд┐рд╡рд░реНрддрдиреЛрдВ рдХреЗ рдмрд┐рдирд╛ рдХреИрд╕реЗ рдХрд┐рдпрд╛ рдЬрд╛ рд╕рдХрддрд╛ рд╣реИ

@szdc @Outlaw11A @arackaf рдпрд╣ рдХреИрд╕реЗ рдХрд░рдирд╛ рд╣реИ:

const customFetch = (uri, options) => {
  const { body, ...newOptions } = options;
  const queryString = objectToQuery(JSON.parse(body));
  requestedString = uri + queryString;
  return fetch(requestedString, newOptions);
};
const link = createHttpLink({
  uri: "data",
  fetchOptions: { method: "GET" },
  fetch: customFetch
});

@jbaxleyiii рдЬреЛ рдмрд╣реБрдд рдмрдврд╝рд┐рдпрд╛ рд▓рдЧ рд░рд╣рд╛ рд╣реИ! рдмрд╕ рдЬрд┐рдЬреНрдЮрд╛рд╕реБ рдХрд╣рд╛рдБ рд╕реЗ objectToQuery рдЖ рд░рд╣рд╛ рд╣реИ? рдХреНрдпрд╛ рдЗрд╕рдХреЗ рд▓рд┐рдП npm рдкрд░ рдХреЛрдИ рдЙрдкрдпреЛрдЧ рд╣реИ? рдореБрдЭреЗ рд▓рдЧрддрд╛ рд╣реИ рдХрд┐ рдЬрд░реВрд░рдд рдкрдбрд╝рдиреЗ рдкрд░ рдЕрдкрдирд╛ рдЦреБрдж рдХрд╛ рд░реЛрд▓ рдХрд░рдирд╛ рдмрд╣реБрдд рдЖрд╕рд╛рди рд╣реЛрдЧрд╛ - рдореВрд▓ рд░реВрдк рд╕реЗ рдСрдмреНрдЬреЗрдХреНрдЯ.рдХреА рдХреЛ рдореИрдк рдХрд░реЗрдВ

escapeUriComponnt(`${k}=${obj[k]}`).join("&");

рдпрд╛ рдРрд╕рд╛ рд╣реА рдХреБрдЫ

https://www.apollographql.com/docs/link/links/http.html#Sending -GET-requests-custom-fetching

@arackaf рдЯрд┐рдкреНрдкрдгреА рджреЗрдЦреЗрдВ:

// turn the object into a query string, try object-to-querystring package

https://github.com/Cyberlane/object-to-querystring

@jbaxleyiii рдпрд╣ рдХрд╛рдо рдХрд░рддрд╛ рд╣реИ! рдпрд╣ рдЖрд╢реНрдЪрд░реНрдпрдЬрдирдХ рд╣реИ!

рдореБрдЭреЗ рдмрд╕ рдПрдХ рд╕рдорд╕реНрдпрд╛ рд╣реИред

рдХреНрд╡реЗрд░реАрд╕реНрдЯреНрд░рд┐рдВрдЧ рдмрдирд╛рдпрд╛ рдЧрдпрд╛:

http://localhost/graphql?operationName=AllPlayersQuery&variables=%5Bobject%20Object%5D&query=query%20All...

рдЗрд╕рдореЗрдВ рдпрд╣ рд╢рд╛рдорд┐рд▓ рд╣реИ: variables=%5Bobject%20Object%5D рдЬреЛ рдПрдХ рд╕рдорд╕реНрдпрд╛ рд╣реИред

рдЗрд╕реЗ рдХреИрд╕реЗ рдареАрдХ рдХрд░реЗрдВ?

рдпрд╣ рдорд╛рдирдХ рдпреВрдЖрд░рдЖрдИ рдХреНрд░рдордмрджреНрдзрддрд╛ рдЬреИрд╕рд╛ рджрд┐рдЦрддрд╛ рд╣реИ - рдРрд╕рд╛ рдирд╣реАрдВ рд▓рдЧрддрд╛ рдХрд┐ рдЖрдк рдЗрд╕рд╕реЗ рдмрдЪ рд╕рдХрддреЗ рд╣реИрдВ - рдпрд╣ рдПрдХ рд╕рдорд╕реНрдпрд╛ рдХреНрдпреЛрдВ рд╣реИ?

рдорд╛рдирдХ рдпреВрдЖрд░рдЖрдИ? рдпрд╣: %5Bobject%20Object%5D ?

encodeURIComponent('books(title:"Hello World"){Book{title}}')

books(title%3A%22Hello%20World%22)%7BBook%7Btitle%7D%7D

рдЕрдкреЛрд▓реЛ рдореЗрдВ рдореЗрд░реА рдХреНрд╡реЗрд░реА рд╣реИ:

query AllPlayers {
  players {
    id
    name
    surname
}

рдФрд░ рдЗрд╕рд▓рд┐рдП рдореБрдЭреЗ @jbaxleyiii рджреНрд╡рд╛рд░рд╛ рдкреЛрд╕реНрдЯ рдХрд┐рдП рдЧрдП рдХреЛрдб рдХреЗ рд╕рд╛рде рдЦрд╛рд▓реА [Object object] рдЪрд░ рдХреЗ рд╕рд╛рде рд╕рдорд╕реНрдпрд╛ рд╣реИред

рдпрд╣рд╛рдВ рдПрдХ рдмреЗрдпрд░рдмреЛрди рд░рд┐рдПрдХреНрдЯ рдРрдк (рдХреНрд░рд┐рдПрдЯ-рд░рд┐рдПрдХреНрдЯ-рдРрдк рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдХреЗ рдмрдирд╛рдпрд╛ рдЧрдпрд╛) рд╣реИ рдЬреЛ GET рдХреЗ рдорд╛рдзреНрдпрдо рд╕реЗ рдкреНрд░рд╛рдкреНрдд рд╣реЛрддрд╛ рд╣реИ рдФрд░ рдХрд╛рдо рдХрд░рддрд╛ рд╣реИ - index.js : https://github.com/usefulio/example-graphql-via-get-react-app

@johnunclesam рд╕реНрдкрд╖реНрдЯ рд░реВрдк рд╕реЗ variables рдПрдиреНрдХреЛрдбрд┐рдВрдЧ рд╕реЗ рдкрд╣рд▓реЗ рдХреНрд░рдордмрджреНрдз рдирд╣реАрдВ рд╣реИред рдореИрдВрдиреЗ рдмрд╕ рдПрдХ рд╕рд╢рд░реНрдд JSON.stringify рдЬреЛрдбрд╝рдХрд░ рдЕрдкрдиреА рдХрд╕реНрдЯрдо рдлрд╝реЗрдЪ рд╡рд┐рдзрд┐ (рдЙрджрд╛рд╣рд░рдг рд░реЗрдкреЛ рд╕реЗ рдкреНрд░рд╛рдкреНрдд) рдХреЛ рдЯреНрдпреВрди рдХрд┐рдпрд╛:

const customFetch = (uri, options) => {
  const {body, ...newOptions} = options;
  const parsedBody = JSON.parse(body);
  const command = omitBy(parsedBody, isEmpty);

  if (command.variables) {
    command.variables = JSON.stringify(command.variables);
  }

  const requestedString = uri + '?' + queryString.stringify(command);

  return fetch(requestedString, newOptions);
};

рддреЛ useGETForQueries рдХрд┐рд╕рдХреЗ рд▓рд┐рдП рдЙрдкрдпреЛрдЧ рдХрд┐рдпрд╛ рдЬрд╛рддрд╛ рд╣реИ? useGETForQueries=true рд╣реЛрдиреЗ рдкрд░ рдХрд╕реНрдЯрдо рдлрд╝реЗрдЪ рдХреНрдпреЛрдВ рдирд╣реАрдВ рдмрдирд╛рдпрд╛ рдЧрдпрд╛?
рдореИрдВ рдХреНрд╡реЗрд░реА рдФрд░ рдореНрдпреВрдЯреЗрд╢рди рдореЗрдВ рдЕрдВрддрд░ рдХреИрд╕реЗ рдХрд░реВрдБ? рдореИрдВ рдХреЗрд╡рд▓ рдХреНрд╡реЗрд░реА рдХреЗ рд▓рд┐рдП GET рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдирд╛ рдЪрд╛рд╣рддрд╛ рд╣реВрдВ (DNS рдХреИрд╢ рдХреЗ рд▓рд┐рдП)ред

рдпрд╣ рдПрдХ рдкреБрд░рд╛рдирд╛ рдореБрджреНрджрд╛ рд╣реИ рдЬреЛ useGETForQueries рд╕реЗ рдкрд╣рд▓реЗ рдХрд╛ рд╣реИ, рдЬрд┐рд╕реЗ https://github.com/apollographql/apollo-link/pull/510 рджреНрд╡рд╛рд░рд╛ рддрдп рдХрд┐рдП рдЬрд╛рдиреЗ рдХреЗ рдмрд╛рдж рдереЛрдбрд╝рд╛ рдЬреЛрдбрд╝рд╛ рдЧрдпрд╛ рдерд╛ред

рдЙрдо, useGETForQueries рдХрд╛рдо рдирд╣реАрдВ рдХрд░ рд░рд╣рд╛ рд╣реИред

рд╡рд┐рд╢реЗрд╖ рд░реВрдк рд╕реЗ рдЗрд╕ рд▓рд╛рдЗрди рдкрд░ рдПрдХ рдмрдЧ рдкреНрд░рддреАрдд рд╣реЛрддрд╛ рд╣реИ:

https://github.com/apolographql/apolo-link/blob/f94b1c6b984619ec1ef68cca3224be788ea140e4/packages/apollo-link-http/src/httpLink.ts#L41

let {
    uri = '/graphql',
    // use default global fetch if nothing passed in
    fetch: fetcher,
    includeExtensions,
    useGETForQueries,
    ...requestOptions
  } = linkOptions;

рдХреБрдЫ рдРрд╕рд╛ рд╣реЛрдирд╛ рдЪрд╛рд╣рд┐рдП:

let {
    uri = '/graphql',
    // use default global fetch if nothing passed in
    fetch: fetcher,
    includeExtensions,
    fetchOptions,
    ...requestOptions
  } = linkOptions;

let {
  useGETForQueries
} = fetchOptions;

рдЖрдк рдРрд╕рд╛ рдХреИрд╕реЗ рдХрд╣рддреЗ рд╣реИрдВ? рдЖрдк createHttpLink рдХреИрд╕реЗ рдХреЙрд▓ рдХрд░ рд░рд╣реЗ рд╣реИрдВ?

рдКрдкрд░ рдореЗрд░рд╛ рдЕрд╡рд▓реЛрдХрди рдПрдХ рдбреАрдмрдЧрд░ рдХреЗ рд╕рд╛рде рдХреЛрдб рдХреЗ рдорд╛рдзреНрдпрдо рд╕реЗ рдХрджрдо рдЙрдард╛рдиреЗ рд╕реЗ рдерд╛, рд▓реЗрдХрд┐рди рдореБрдЭреЗ рдЗрд╕реЗ рдкреБрди: рдкреЗрд╢ рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдлрд┐рд░ рд╕реЗ рдХрд░рдирд╛ рд╣реЛрдЧрд╛ред

рдЬрд┐рд╕ рдХреЛрдб рдкрд░ рд╣рдордиреЗ рд╕рдордЭреМрддрд╛ рдХрд┐рдпрд╛ рд╡рд╣ рдпрд╣ рд╣реИ:

import omitBy from 'lodash.omitby';
import isEmpty from 'lodash.isempty';

const graphQLUrl = 'http://the.server.com/graphql';

const customFetch = (uri, options) => {
  const { body, credentials, headers, ...newOptions } = options;
  let fetchUri = uri;
  if (body) {
    const parsedBody = JSON.parse(body);
    const command = omitBy(parsedBody, isEmpty);
    fetchUri = uri + "?" + queryString.stringify(command);
  }
  return fetch(fetchUri, newOptions);
};

const link = createHttpLink({
  uri: graphQLUrl,
  fetchOptions: { method: "GET" },
  fetch: customFetch
});

рдореБрдЭреЗ рд▓рдЧрддрд╛ рд╣реИ рдХрд┐ рдореЗрд░рд╛ рд╕рд╡рд╛рд▓ рдпрд╣ рд╣реИ рдХрд┐, рдпрджрд┐ рдЖрдк рд╕реАрдзреЗ createHttpLink рдмрдЬрд╛рдп useGETForQueries рдЕрдВрджрд░ fetchOptions рдкрд╛рд╕ рдХрд░ рд░рд╣реЗ рдереЗ, рддреЛ рд╡рд╣ рд╡реНрдпрд╡рд╣рд╛рд░ рд╣реЛрдЧрд╛ рдЬрд┐рд╕реЗ рдЖрдк рджреЗрдЦреЗрдВрдЧреЗ, рд▓реЗрдХрд┐рди рдпрд╣ рднреА рдирд╣реАрдВ рд╣реЛрдЧрд╛ рдПрдкреАрдЖрдИ рдХреИрд╕реЗ рдХрд╛рдо рдХрд░рддрд╛ рд╣реИред рдореИрдВ рдЗрд╕реЗ рдлрд┐рд░ рд╕реЗ рдПрдХ рд╢реЙрдЯ рджреЗрдиреЗ рдХрд╛ рд╕реБрдЭрд╛рд╡ рджреВрдВрдЧрд╛!

рдХреНрдпрд╛ рдпрд╣ рдкреГрд╖реНрда рдЙрдкрдпреЛрдЧреА рдерд╛?
0 / 5 - 0 рд░реЗрдЯрд┐рдВрдЧреНрд╕

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

maktouch picture maktouch  ┬╖  5рдЯрд┐рдкреНрдкрдгрд┐рдпрд╛рдБ

lobosan picture lobosan  ┬╖  3рдЯрд┐рдкреНрдкрдгрд┐рдпрд╛рдБ

ChenRoth picture ChenRoth  ┬╖  4рдЯрд┐рдкреНрдкрдгрд┐рдпрд╛рдБ

NicholasLYang picture NicholasLYang  ┬╖  4рдЯрд┐рдкреНрдкрдгрд┐рдпрд╛рдБ

techyrajeev picture techyrajeev  ┬╖  3рдЯрд┐рдкреНрдкрдгрд┐рдпрд╛рдБ