Apollo-link-rest: рдЬрдм рд╕рд░реНрд╡рд░ рдЧреИрд░-рдЧреНрд░рд╛рдлрдХрд▓ рдЕрдиреБрдкрд╛рд▓рди рдкрд░рд┐рдгрд╛рдо рджреЗрддрд╛ рд╣реИ рддреЛ рдореБрдЭреЗ рдХреНрдпрд╛ рдХрд░рдирд╛ рдЪрд╛рд╣рд┐рдП

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

рдореИрдВ рдЬреЛ рдХрд░рдиреЗ рдХреА рдХреЛрд╢рд┐рд╢ рдХрд░ рд░рд╣рд╛ рд╣реВрдВ рд╡рд╣ рдЕрдкрдиреЗ http рдмрд╛рдХреА рдЗрдВрдЯрд░рдлреЗрд╕ рдХреЗ рдорд╛рдзреНрдпрдо рд╕реЗ рдмреАрдХреЙрдЗрди рдХреЛ рдЦрд╛рддрд╛ рдЬрд╛рдирдХрд╛рд░реА
рдРрд╕рд╛ рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП, рдореБрдЭреЗ рдЪрд╛рд╣рд┐рдП

  1. рд╕рднреА рдореМрдЬреВрджрд╛ рдХреЗ рдирд╛рдо рдкреВрдЫрдирд╛ accountName рдлреЛрди рдХрд░рдХреЗ GET /wallet/:id/account
  2. GET /wallet/:id/account/:accountName рджреНрд╡рд╛рд░рд╛ рдЦрд╛рддрд╛ рд╡рд┐рд╡рд░рдг рдорд╛рдВрдЧреЗрдВ

рд╕рдорд╕реНрдпрд╛ рдпрд╣ рд╣реИ рдХрд┐ рдкрд╣рд▓реА рдХреЙрд▓ ["default", "mySecondAccountName"] рдЬреИрд╕рд╛ рдХреБрдЫ
рдЬреЛ рдореИрдВ рдирд╣реАрдВ рдЬрд╛рдирддрд╛ рдХрд┐ рдХреИрд╕реЗ рдЧреНрд░рд╛рдлрд╝рд┐рдХрд▓ рдкреНрд░рддрд┐рдХреНрд░рд┐рдпрд╛ рдХреЗ рд░реВрдк рдореЗрдВ рдкрд╛рд░реНрд╕ рдХрд░рдирд╛ рд╣реИ, рдФрд░ рди рд╣реА рд╕реАрдзреЗ рджреВрд╕рд░реЗ GET

рдЙрджрд╛рд╣рд░рдг рдХреЗ рд▓рд┐рдП рдЬрдм рдореИрдВрдиреЗ рдирд┐рдореНрдирд▓рд┐рдЦрд┐рдд рдХреНрд╡реЗрд░реА рджреНрд╡рд╛рд░рд╛ рдХреНрд╡реЗрд░реА рдХрд░рдиреЗ рдХрд╛ рдкреНрд░рдпрд╛рд╕ рдХрд┐рдпрд╛,

query (id: "primary") @rest(type: AccountName, path: "/wallet/:id/account") {
  default

рдореБрдЭреЗ Error: Network error: Cannot create property 'default' on string 'default' рдорд┐рд▓реЗрдЧрд╛

рдореБрдЭреЗ рджрд╕реНрддрд╛рд╡реЗрдЬрд╝ рдореЗрдВ рдХреЛрдИ рд╕реБрд░рд╛рдЧ рдирд╣реАрдВ рдорд┐рд▓рд╛, рд▓реЗрдХрд┐рди рдпрд╣ рдмрд╣реБрдд рд╣реА рд╕рд╛рдорд╛рдиреНрдп рдорд╛рдорд▓рд╛ рд▓рдЧрддрд╛ рд╣реИ рдЗрд╕рд▓рд┐рдП рдореБрдЭреЗ рдХреБрдЫ рдмрд╣реБрдд рд╣реА рд╕рд░рд▓ рдпрд╛рдж рдЖ рд░рд╣рд╛ рд╣реИред рдореИрдВ рд╡рд╛рд╕реНрддрд╡ рдореЗрдВ рд╕рд░рд╛рд╣рдирд╛ рдХрд░рддрд╛ рд╣реВрдВ рдЕрдЧрд░ рдХреЛрдИ рдореБрдЭреЗ рдмрддрд╛ рд╕рдХрддрд╛ рд╣реИ рдХрд┐ рдореБрдЭреЗ рдХреНрдпрд╛ рджреЗрдЦрдирд╛ рдЪрд╛рд╣рд┐рдП

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

@joemphilips рдореБрдЭреЗ рд▓рдЧрддрд╛ рд╣реИ рдХрд┐ рдЖрдкрдХреЛ рдЯрд╛рдЗрдкрдкреИрдЪрд░ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдирд╛ рдЪрд╛рд╣рд┐рдП

рдореИрдВ рдЗрд╕реЗ рдЧреИрд░ рдЧреНрд░рд╛рдлрд╝рд┐рдХрд▓ рдЕрдиреБрдкрд╛рд▓рди рдкреНрд░рддрд┐рдХреНрд░рд┐рдпрд╛ рдХреЛ рд╕рдВрднрд╛рд▓рдиреЗ рдХреЗ рд▓рд┐рдП рдЙрдкрдпреЛрдЧ рдХрд░рддрд╛ рд╣реВрдВ рдЬреИрд╕реЗ

{
   "100": {
      "id": 100,
      "node_id": 105,
      "category_id": 8,
      "title": "Title 100",
      "highlight": true
   },
   "138": {
      "id": 138,
      "node_id": 106,
      "category_id": 7,
      "title": "Title 138",
      "highlight": false
   },
   "140": {
      "id": 140,
      "node_id": 101,
      "category_id": 9,
      "title": "Title 140",
      "highlight": false
   },
   "158": {
      "id": 158,
      "node_id": 146,
      "category_id": 4,
      "title": "Title 158",
      "highlight": false
   }
}

рдХреНрд╡реЗрд░реА рдкрд░рд┐рднрд╛рд╖рд╛

import { gql } from 'apollo-boost';

export const GET_NEWS_QUERY = gql`
  query getNews {
    News @rest(type: "News", path: "news") {
      data
    }
  }
`;

рд░реЗрд╕реНрдЯрд▓рд┐рдВрдХ рдХреЙрдиреНрдлрд╝рд┐рдЧрд░реЗрд╢рди

const restLink = new RestLink({
  uri: API_URL,
  typePatcher: {
    News: (data, outerType) => {
      if (outerType === 'News') {
        data = Object.keys(data).map(id => {
          const result = data[id];

          if (result) {
            return {
              __typename: 'News',
              ...result
            };
          }
        });
      }

      return { data };
    }
  }
});

рдХреНрд╡реЗрд░реА рдЙрдкрдпреЛрдЧ
```рдЬреЗрдПрд╕
рдкреНрд░рд╕реНрддреБрдд рдХрд░рдирд╛() {
рд╡рд╛рдкрд╕реА (
{({рд▓реЛрдб рд╣реЛ рд░рд╣рд╛ рд╣реИ, рддреНрд░реБрдЯрд┐, рдбреЗрдЯрд╛}) => {
рдЕрдЧрд░ (рд▓реЛрдб рд╣реЛ рд░рд╣рд╛ рд╣реИ) {
рд╡рд╛рдкрд╕реА (

рд▓реЛрдб рд╣реЛ рд░рд╣рд╛ рд╣реИ...

);
}

      if (error) {
        return (
          <View>
            <Text>Error :(</Text>
          </View>
        );
      }

      const news = data && data.News && data.News.data;
      const filteredNews = news && news.filter(Boolean);

      return (
        <Styles.Container>
          <Carousel
            data={filteredNews}
            handleOnPress={this.navigateToScreen}
          />
        </Styles.Container>
      );
    }}
  </Query>
);

}
`
``

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

рдореИрдВ рдХреЗрд╡рд▓ рдЕрдиреБрдорд╛рди рд▓рдЧрд╛ рд░рд╣рд╛ рд╣реВрдБ рдХреНрдпреЛрдВрдХрд┐ рдореИрдВ bcoin рд╕реЗ рдкрд░рд┐рдЪрд┐рдд рдирд╣реАрдВ рд╣реВрдБ, рд▓реЗрдХрд┐рди рдпрд╣рд╛рдБ рдПрдХ рд╕реБрдЭрд╛рд╡ рд╣реИ:

query Account(id: $id){
   account(id: $id) @rest(type: "[String]", path: "/wallet/:id/account")
}

рдлрд┐рд░ рдЖрдк рдЙрд╕ рдбреЗрдЯрд╛ рдХреЗ рдкрд░рд┐рдгрд╛рдо рдкреНрд░рд╛рдкреНрдд рдХрд░рддреЗ рд╣реИрдВ рдФрд░ рдЗрд╕реЗ рдПрдХ рдирдИ рдХреНрд╡реЗрд░реА рдореЗрдВ рдкрд╛рд╕ рдХрд░рддреЗ рд╣реИрдВ рдЬреЛ рдЦрд╛рддрд╛ рд╡рд┐рд╡рд░рдг рдкреНрд░рд╛рдкреНрдд рдХрд░рддрд╛ рд╣реИред

рджрдпрд╛рд▓реБ рдФрд░ рддреЗрдЬ рдкреНрд░рддрд┐рдХреНрд░рд┐рдпрд╛ рдХреЗ рд▓рд┐рдП рдзрдиреНрдпрд╡рд╛рджред @fbartho
рд╣реЛ рд╕рдХрддрд╛ рд╣реИ рдХрд┐ рдореБрдЭреЗ bcoin рдХрд╛ рдЙрд▓реНрд▓реЗрдЦ рдирд╣реАрдВ рдХрд░рдирд╛ рдЪрд╛рд╣рд┐рдП рдерд╛, рдореЗрд░реА рд╕рдорд╕реНрдпрд╛ рдЕрдзрд┐рдХ рд╕рд░рд▓ рд╣реИ

рджрд╕реНрддрд╛рд╡реЗрдЬрд╝ рдореЗрдВ @export рдирд┐рд░реНрджреЗрд╢ рдХреЗ рдЙрджрд╛рд╣рд░рдг рдореЗрдВ ,
рдореЗрд░рд╛ рдкреНрд░рд╢реНрди рд╣реИ, рдореБрдЭреЗ рдХреНрдпрд╛ рдХрд░рдирд╛ рдЪрд╛рд╣рд┐рдП рдЬрдм рдЗрд╕ рдЙрджрд╛рд╣рд░рдг рдореЗрдВ рдкрд╣рд▓реА рдХреНрд╡реЗрд░реА рдСрдмреНрдЬреЗрдХреНрдЯ рдХреА рд╕рд░рдгреА рдХреЗ рдмрдЬрд╛рдп рд╕реНрдХреЗрд▓рд░ рдХреА рдПрдХ рд╕рд░рдгреА рд▓реМрдЯрд╛рддреА рд╣реИ?
рдЪреВрдВрдХрд┐ рдЗрд╕рдХреА рдХреЛрдИ рдХреБрдВрдЬреА рдирд╣реАрдВ рд╣реИ, рдРрд╕рд╛ рд▓рдЧрддрд╛ рд╣реИ рдХрд┐ рдпрд╣ рдирд┐рд░реНрджрд┐рд╖реНрдЯ рдХрд░рдиреЗ рдХрд╛ рдХреЛрдИ рддрд░реАрдХрд╛ рдирд╣реАрдВ рд╣реИ рдХрд┐ рдХреМрди рд╕рд╛ рддрд░реНрдХ рдирд┐рд░реНрдпрд╛рдд рдХрд┐рдпрд╛ рдЬрд╛рдирд╛ рдЪрд╛рд╣рд┐рдПред

рдореИрдВрдиреЗ @export рдХрд╛ рдЙрдкрдпреЛрдЧ рди рдХрд░рдиреЗ рдХрд╛ рднреА рдкреНрд░рдпрд╛рд╕ рдХрд┐рдпрд╛ рдФрд░ рдЗрд╕рдХреЗ рдмрдЬрд╛рдп рдЖрдкрдХреЗ рджреНрд╡рд╛рд░рд╛ рдмрддрд╛рдП рдЕрдиреБрд╕рд╛рд░ рдХреНрд╡реЗрд░реА рдХреА, рд▓реЗрдХрд┐рди рд▓рд╛рдиреЗ рдХрд╛ рдкрд░рд┐рдгрд╛рдо {}
рдирд┐рдореНрдирд▓рд┐рдЦрд┐рдд рдЪреЗрддрд╛рд╡рдиреА рдХреЗ рд╕рд╛рде

Missing field account in {}

рд╡реИрд╕реЗ, рдореБрдЭреЗ рдЖрдкрдХреЗ рд╕реБрдЭрд╛рд╡ рдореЗрдВ рд▓рдЧрддрд╛ рд╣реИ

query Account(id: $id)

рд╣реЛрдирд╛ рдЪрд╛рд╣рд┐рдП

query Account($id: id)

рдореБрдЭреЗ рдкрддрд╛ рдЪрд▓рд╛ рдХрд┐ рдЬрдм рдореИрдВ рдЖрдкрдХреЗ рджреНрд╡рд╛рд░рд╛ рд╕реБрдЭрд╛рдП рдЧрдП рдЖрджреЗрд╢ рдХреЛ рдЪрд▓рд╛рддрд╛ рд╣реВрдВ, рдЕрд░реНрдерд╛рдд

query Account(id: $id){
   account(id: $id) @rest(type: "[String]", path: "/wallet/:id/account")
}

рдпрд╣ рд╡рд╛рд╕реНрддрд╡ рдореЗрдВ рдХрд┐рд╕реА рднреА рдХреНрд╡реЗрд░реА рдХреЛ рдирд┐рд╖реНрдкрд╛рджрд┐рдд рдирд╣реАрдВ рдХрд░реЗрдЧрд╛ рдФрд░ рдпрд╣ рдХреЗрд╡рд▓ {} рдХреЛ data рд░реВрдк рдореЗрдВ рд▓реМрдЯрд╛рдПрдЧрд╛ред
рдЗрд╕рд▓рд┐рдП рдореБрдЭреЗ { theFieldNameIDesire } рдХреА рдкрдВрдХреНрддрд┐ рдХреЗ рдмрд╛рдж рдирд┐рд░реНрджрд┐рд╖реНрдЯ рдХрд░рдирд╛ рд╣реЛрдЧрд╛ account , рд╕рдорд╕реНрдпрд╛ рдпрд╣ рд╣реИ рдХрд┐ рдореЗрд░реЗ рдкрд╛рд╕ рдирд┐рд░реНрджрд┐рд╖реНрдЯ рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдХреЛрдИ рдлрд╝реАрд▓реНрдб рдирд╛рдо рдирд╣реАрдВ рд╣реИ :(

@joemphilips рдореБрдЭреЗ рд▓рдЧрддрд╛ рд╣реИ рдХрд┐ рдЖрдкрдХреЛ рдЯрд╛рдЗрдкрдкреИрдЪрд░ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдирд╛ рдЪрд╛рд╣рд┐рдП

рдореИрдВ рдЗрд╕реЗ рдЧреИрд░ рдЧреНрд░рд╛рдлрд╝рд┐рдХрд▓ рдЕрдиреБрдкрд╛рд▓рди рдкреНрд░рддрд┐рдХреНрд░рд┐рдпрд╛ рдХреЛ рд╕рдВрднрд╛рд▓рдиреЗ рдХреЗ рд▓рд┐рдП рдЙрдкрдпреЛрдЧ рдХрд░рддрд╛ рд╣реВрдВ рдЬреИрд╕реЗ

{
   "100": {
      "id": 100,
      "node_id": 105,
      "category_id": 8,
      "title": "Title 100",
      "highlight": true
   },
   "138": {
      "id": 138,
      "node_id": 106,
      "category_id": 7,
      "title": "Title 138",
      "highlight": false
   },
   "140": {
      "id": 140,
      "node_id": 101,
      "category_id": 9,
      "title": "Title 140",
      "highlight": false
   },
   "158": {
      "id": 158,
      "node_id": 146,
      "category_id": 4,
      "title": "Title 158",
      "highlight": false
   }
}

рдХреНрд╡реЗрд░реА рдкрд░рд┐рднрд╛рд╖рд╛

import { gql } from 'apollo-boost';

export const GET_NEWS_QUERY = gql`
  query getNews {
    News @rest(type: "News", path: "news") {
      data
    }
  }
`;

рд░реЗрд╕реНрдЯрд▓рд┐рдВрдХ рдХреЙрдиреНрдлрд╝рд┐рдЧрд░реЗрд╢рди

const restLink = new RestLink({
  uri: API_URL,
  typePatcher: {
    News: (data, outerType) => {
      if (outerType === 'News') {
        data = Object.keys(data).map(id => {
          const result = data[id];

          if (result) {
            return {
              __typename: 'News',
              ...result
            };
          }
        });
      }

      return { data };
    }
  }
});

рдХреНрд╡реЗрд░реА рдЙрдкрдпреЛрдЧ
```рдЬреЗрдПрд╕
рдкреНрд░рд╕реНрддреБрдд рдХрд░рдирд╛() {
рд╡рд╛рдкрд╕реА (
{({рд▓реЛрдб рд╣реЛ рд░рд╣рд╛ рд╣реИ, рддреНрд░реБрдЯрд┐, рдбреЗрдЯрд╛}) => {
рдЕрдЧрд░ (рд▓реЛрдб рд╣реЛ рд░рд╣рд╛ рд╣реИ) {
рд╡рд╛рдкрд╕реА (

рд▓реЛрдб рд╣реЛ рд░рд╣рд╛ рд╣реИ...

);
}

      if (error) {
        return (
          <View>
            <Text>Error :(</Text>
          </View>
        );
      }

      const news = data && data.News && data.News.data;
      const filteredNews = news && news.filter(Boolean);

      return (
        <Styles.Container>
          <Carousel
            data={filteredNews}
            handleOnPress={this.navigateToScreen}
          />
        </Styles.Container>
      );
    }}
  </Query>
);

}
`
``

рджреЗрд░ рд╕реЗ рдЬрд╡рд╛рдм рджреЗрдиреЗ рдХреЗ рд▓рд┐рдП рдЦреЗрдж рд╣реИред рдРрд╕рд╛ рд▓рдЧрддрд╛ рд╣реИ рдХрд┐ рдЖрдкрдХрд╛ рд╕рдорд╛рдзрд╛рди рд╕рд░рдгреА рдХреЗ рд╕реНрдЯреНрд░рд┐рдВрдЧ/рд╕реНрдХреЗрд▓рд░ рдХреЗ рд▓рд┐рдП рдХрд╛рдо рдирд╣реАрдВ рдХрд░рддрд╛ рд╣реИред рд▓реЗрдХрд┐рди рдРрд╕рд╛ рд▓рдЧрддрд╛ рд╣реИ рдХрд┐ рдпрд╣ рддрдп рд╣реЛ рдЧрдпрд╛ рд╣реИ ред рдореИрдВ рдлрд┐рд░ рд╕реЗ рдХреЛрд╢рд┐рд╢ рдХрд░реВрдВрдЧрд╛ред рдФрд░ рдЕрдЧрд░ рдореБрдЭреЗ рдкрд░реЗрд╢рд╛рдиреА рд╣реЛ рд░рд╣реА рд╣реИ рддреЛ рдлрд┐рд░ рд╕реЗ рдЦреЛрд▓ рд╕рдХрддрд╛ рд╣реВрдВред рдзрдиреНрдпрд╡рд╛рджред

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

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

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

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

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

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

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