Apollo-link-rest: рдирдИ {args.id} рд╢реИрд▓реА рдХреЗ рд╕рд╛рде рд╕рдорд╕реНрдпрд╛

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

рдирдорд╕реНрддреЗ,

рдмрд╕ рдкреБрд╕реНрддрдХрд╛рд▓рдп рдХреЛ рдЕрджреНрдпрддрди рдХрд┐рдпрд╛ рдФрд░ рдЙрдиреНрдирдпрди рдХреЗ рдореБрджреНрджреЗ рд╣реИрдВред рдХрд┐рд╕реА рднреА рдмрджрд▓рд╛рд╡ рдХреЗ рдмрд┐рдирд╛ рдХрд╛рд░реНрдпрдХреНрд╖рдорддрд╛ рдирдИ рд╢реИрд▓реА рдореЗрдВ рдорд╛рдЗрдЧреНрд░реЗрдЯ рдХрд░рдиреЗ рдХреА рдЪреЗрддрд╛рд╡рдиреА рдХреЗ рд╕рд╛рде рдЕрдкреЗрдХреНрд╖рд┐рдд рд░реВрдк рд╕реЗ рдХрд╛рдо рдХрд░рддреА рд╣реИред рдЬрдм рдореИрдВ рдиреАрдЪреЗ рдХреА рддрд░рд╣ рдЖрд╡рд╢реНрдпрдХ рдкрд░рд┐рд╡рд░реНрддрди рдХрд░рддрд╛ рд╣реВрдВ рддреЛ рдореБрдЭреЗ рд▓рдЧрддрд╛ рд╣реИ рдХрд┐ {args} рдФрд░ {args.name} рджреЛрдиреЛрдВ рдЕрдкрд░рд┐рднрд╛рд╖рд┐рдд рд╣реИрдВред рдпрд╣рд╛рдБ рдХреЛрдб рд╣реИ:

const restLink = new RestLink({
  uri: 'https://avoindata.prh.fi/bis/v1',
  typePatcher: {
    BusinessPayload: data => ({
      ...data,
      results: data.results.map(business => ({
        __typename: 'Business',
        ...business
      }))
    })
  }
});

const client = new ApolloClient({
  link: restLink,
  cache: new InMemoryCache()
});

const query = gql`
  query($name: String!) {
    companies(name: $name)
      @rest(
        type: "BusinessPayload"
        path: "?totalResults=false&maxResults=10&resultsFrom=0&name={args.name}"
      ) {
      results {
        name
        businessId
      }
    }
  }
`;

// And then call the query:
client.query({ query, variables: { name: value } });

рдХреНрдпрд╛ рдореИрдВ рдХреБрдЫ рднреВрд▓ рд░рд╣рд╛ рд╣реВрдБ?

blocking bug ЁЯРЫ has-reproduction

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

v0.4.1 рдореЗрдВ рдлрд┐рдХреНрд╕реНрдб: https://github.com/apolographql/apolo-link-rest/releases/tag/v0.4.1 рдХреГрдкрдпрд╛ рдореБрдЭреЗ рдмрддрд╛рдПрдВ рдХрд┐ рдХреНрдпрд╛ рдЖрдк рдЗрд╕реЗ рдЕрднреА рднреА рджреЗрдЦ рд░рд╣реЗ рд╣реИрдВ!

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

рд╡рд╣реА рдореБрджреНрджрд╛ред рдирдИ {args.id} рд╢реИрд▓реА рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдХреЗ рдмрд╕ рдЕрдкрд░рд┐рднрд╛рд╖рд┐рдд рд╣реЛ рдЧрдпрд╛ред

рд╢рд╛рдирджрд╛рд░ рдХреИрдЪ @karensg @haipengz - рдпрд╣ рдореЗрд░реЗ рд▓рд┐рдП рдПрдХ рдкреНрд░рдореБрдЦ рдкреНрд░рд╛рдердорд┐рдХрддрд╛ рд╣реИ, рд▓реЗрдХрд┐рди рдЗрди рдкрд░рд┐рд╡рд░реНрддрдиреЛрдВ рдХрд╛ рдкреВрд░реА рддрд░рд╣ рд╕реЗ рдкрд░реАрдХреНрд╖рдг рдХрд░рдиреЗ рдореЗрдВ рд╕рдХреНрд╖рдо рд╣реЛрдиреЗ рд╕реЗ рдкрд╣рд▓реЗ рдореИрдВ рдХрд▓ рдмрд╛рдзрд┐рдд рд╣реЛ рдЧрдпрд╛ред

@karensg рдЬрдмрдХрд┐ рдЖрдкрдХрд╛ рд╕рд┐рдВрдЯреИрдХреНрд╕ рдХрд╛рдо рдХрд░рдирд╛ рдЪрд╛рд╣рд┐рдП (рдФрд░ рдпрд╣ рдПрдХ рдмрдЧ рд╣реИ рдЬреЛ рдпрд╣ рдирд╣реАрдВ рдХрд░рддрд╛ рд╣реИ), рдореЗрд░рд╛ рдЗрд░рд╛рджрд╛ рдПрдкреАрдЖрдИ рдХреЛ рдереЛрдбрд╝рд╛ рдЕрд▓рдЧ рддрд░реАрдХреЗ рд╕реЗ рдЗрд╕реНрддреЗрдорд╛рд▓ рдХрд░рдиреЗ рдХрд╛ рдерд╛ред
рдЗрд╕рдХреЗ рдмрдЬрд╛рдп: path: "?totalResults=false&maxResults=10&resultsFrom=0&name={args.name}"
рдореЗрд░рд╛ рдЗрд░рд╛рджрд╛ рдпрд╣ рд╣реЛрдирд╛ рдерд╛: path: "?totalResults=false&maxResults=10&resultsFrom=0&{args}"

{args} рдпрд╛ {args.query.deeper} рдХреБрдВрдЬреА рдкрде рджреНрд╡рд╛рд░рд╛ рдЗрдВрдЧрд┐рдд рд╡рд╕реНрддреБ рдХреЛ рд▓реЗрддрд╛ рд╣реИ, рдФрд░ рдлрд┐рд░ рдЗрд╕реЗ рдПрдХ рдХреНрд╡реЗрд░реА рд╕реНрдЯреНрд░рд┐рдВрдЧ рдореЗрдВ рдмрджрд▓ рджреЗрддрд╛ рд╣реИред рддреЛ рдЖрдкрдХреА рд╕реНрдерд┐рддрд┐ рдореЗрдВ &{args} рд╣реЛрдЧрд╛ { name: "foo" } рдмрди рдЬрд╛рддрд╛ рд╣реИ &name=foo рдЬрд╣рд╛рдВ foo рдХреЛ рд╕реНрд╡рдЪрд╛рд▓рд┐рдд рд░реВрдк рд╕реЗ encodeURIComponent рдкрд░ рдХреЙрд▓ рдХрд┐рдпрд╛ рдЬрд╛рддрд╛ рд╣реИред

рдореИрдВ рдЗрд╕реЗ рдЕрдкрдиреА рджреВрд╕рд░реА рддрддреНрдХрд╛рд▓ рд╕рд░реНрд╡реЛрдЪреНрдЪ рдкреНрд░рд╛рдердорд┐рдХрддрд╛ рдорд╛рдирддрд╛ рд╣реВрдВ, рд▓реЗрдХрд┐рди рдореИрдВ рдХрд╛рдо рдкрд░ рдЖрдЧ рд╕реЗ рд▓рдбрд╝ рд░рд╣рд╛ рд╣реВрдВ, рдЗрд╕рд▓рд┐рдП рдореИрдВ рдЗрд╕реЗ рджреЛрдкрд╣рд░ рддрдХ рдирд╣реАрдВ рдкрд╛рдКрдВрдЧрд╛ред рд╕рд╛рдорд╛рдиреНрдп рддреМрд░ рдкрд░, рдореИрдВ рдЖрдкрдХреЗ рджреНрд╡рд╛рд░рд╛ рдкреНрд░рджрд╛рди рдХреА рдЬрд╛ рд╕рдХрдиреЗ рд╡рд╛рд▓реА рдХрд┐рд╕реА рднреА рдорджрдж рдХреА рд╕рд░рд╛рд╣рдирд╛ рдХрд░рддрд╛ рд╣реВрдВ, рдЖрдк рдореБрдЭреЗ рдЕрдкреЛрд▓реЛ-рд▓рд┐рдВрдХ-рд░реЗрд╕реНрдЯ рд░реВрдо рдореЗрдВ рдЕрдкреЛрд▓реЛрдЧреНрд░рд╛рдлрдХреНрдпреВрдПрд▓ рд╕реНрд▓реИрдХ рдореЗрдВ рдкрд╛ рд╕рдХрддреЗ рд╣реИрдВред

рдПрдХ рдЪреАрдЬ рдЬреЛ рд╡рд╛рд╕реНрддрд╡ рдореЗрдВ рдЙрдкрдпреЛрдЧреА рд╣реЛрдЧреА/рдореЗрд░реЗ рдлрд┐рдХреНрд╕ рдХреЛ рддреЗрдЬ рдХрд░реЗрдЧреА, рдЖрдкрдХреЗ рджреНрд╡рд╛рд░рд╛ рдЙрдкрдпреЛрдЧ рдХрд┐рдП рдЬрд╛ рд░рд╣реЗ рдкреНрд░рддреНрдпреЗрдХ рдорд╛рдорд▓реЗ рдХреЗ рд▓рд┐рдП рдпреВрдирд┐рдЯ рдкрд░реАрдХреНрд╖рдгреЛрдВ рдХреЗ рд▓рд┐рдП рдХреБрдЫ рдХреЛрдб рд╣реЛрдЧрд╛, рдЗрд╕рд▓рд┐рдП рдореИрдВ рдпрд╣ рд╕реБрдирд┐рд╢реНрдЪрд┐рдд рдХрд░ рд╕рдХрддрд╛ рд╣реВрдВ рдХрд┐ рдпрд╣ рдЖрдкрдХреЗ рд▓рд┐рдП рдЖрдЧреЗ рдмрдврд╝рдиреЗ рдХреЗ рд▓рд┐рдП рдХрд╛рдо рдХрд░рддрд╛ рд╣реИред

v0.4.1 рдореЗрдВ рдлрд┐рдХреНрд╕реНрдб: https://github.com/apolographql/apolo-link-rest/releases/tag/v0.4.1 рдХреГрдкрдпрд╛ рдореБрдЭреЗ рдмрддрд╛рдПрдВ рдХрд┐ рдХреНрдпрд╛ рдЖрдк рдЗрд╕реЗ рдЕрднреА рднреА рджреЗрдЦ рд░рд╣реЗ рд╣реИрдВ!

@fbartho рдлрд┐рдХреНрд╕ рдХреЗ рд▓рд┐рдП рдзрдиреНрдпрд╡рд╛рдж! рдпрд╣ рдЕрдм рдореЗрд░реЗ рдЙрдкрдпреЛрдЧ рдХреЗ рдорд╛рдорд▓реЗ рдореЗрдВ рдХрд╛рдо рдХрд░рддрд╛ рд╣реИред

рдПрдХ рдмрд╛рд░ рдлрд┐рд░ рдзрдиреНрдпрд╡рд╛рдж!
v0.4.1 рдореЗрдВ рдЕрдкрдЧреНрд░реЗрдб рдХрд░рдиреЗ рдХреЗ рдмрд╛рдж, рдирдИ {args.id} рд╢реИрд▓реА рдЕрдм рдореЗрд░реЗ рдорд╛рдорд▓реЗ рдХреЗ рд▓рд┐рдП рдХрд╛рдо рдХрд░рддреА рд╣реИ, рдЕрдм рдЕрдкрд░рд┐рднрд╛рд╖рд┐рдд рдирд╣реАрдВ рд╣реИред

...
const GET_DOG_IMAGES_BY_BREED = gql`
  query breeds ($breed: String!) {
    imagesByBreed(breed: $breed) @rest(
      type: "imagesByBreedResult"
      path: "breed/{args.breed}/images"
      endpoint: "dogApi"
    ) {
      status
      message
    }
  }
`

...
<Query query={GET_DOG_IMAGES_BY_BREED}
    notifyOnNetworkStatusChange
    variables={{ breed: 'hound' }}
 >
  {({ refetch, error, data, networkStatus, }) => {
    expect(error).toBeUndefined()
    expect(data).toBeDefined()
  }}
</Query>
...

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

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

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

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

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

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

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