๋ด๊ฐํ๋ ค๋ ๊ฒ์ http ๋๋จธ์ง ์ธํฐํ์ด์ค๋ฅผ ํตํด bcoin์ ๊ณ์ ์ ๋ณด๋ฅผ ์ฟผ๋ฆฌํ๋ ๊ฒ์
๋๋ค.
๊ทธ๋ ๊ฒ ํ๋ ค๋ฉด
accountName
ํธ์ถํ์ฌ GET /wallet/:id/account
GET /wallet/:id/account/:accountName
๊ณ์ ์ธ๋ถ ์ ๋ณด๋ฅผ ์์ฒญํ์ญ์์ค.๋ฌธ์ ๋ ์ฒซ ๋ฒ์งธ ํธ์ถ์ด ["default", "mySecondAccountName"]
์ ๊ฐ์ ๊ฒ์ ๋ฐํํ๋ค๋ ๊ฒ์
๋๋ค.
graphql ์๋ต์ผ๋ก ๊ตฌ๋ฌธ ๋ถ์ํ๊ฑฐ๋ ๋ ๋ฒ์งธ GET
์ง์ ์ ๋ฌํ๋ ๋ฐฉ๋ฒ์ ๋ชจ๋ฆ
๋๋ค.
์๋ฅผ ๋ค์ด ๋ค์ ์ฟผ๋ฆฌ๋ก ์ฟผ๋ฆฌ๋ฅผ ์๋ํ์ ๋,
query (id: "primary") @rest(type: AccountName, path: "/wallet/:id/account") {
default
๋๋ Error: Network error: Cannot create property 'default' on string 'default'
๋ฐ์ ๊ฒ์ด๋ค
๋ฌธ์์์ ๋จ์๋ฅผ ์ฐพ์ ์ ์์์ง๋ง ์ด๊ฒ์ ๋งค์ฐ ์ผ๋ฐ์ ์ธ ๊ฒฝ์ฐ์ธ ๊ฒ ๊ฐ์์ ๋งค์ฐ ๊ฐ๋จํ ๊ฒ์ ๋์น๊ณ ์๋ ๊ฒ ๊ฐ์ต๋๋ค. ๋๊ตฐ๊ฐ ๋ด๊ฐ ์ฐพ์์ผ ํ ๊ฒ์ ์ง์ ํด ์ฃผ์๋ฉด ์ ๋ง ๊ฐ์ฌํ๊ฒ ์ต๋๋ค.
๋๋ bcoin์ ์ต์ํ์ง ์๊ธฐ ๋๋ฌธ์ ์ถ์ธกํ๊ณ ์์ง๋ง ์ฌ๊ธฐ์ ์ ์ ์ฌํญ์ด ์์ต๋๋ค.
query Account(id: $id){
account(id: $id) @rest(type: "[String]", path: "/wallet/:id/account")
}
๊ทธ๋ฐ ๋ค์ ๋ฐ์ดํฐ์์ ๊ฒฐ๊ณผ๋ฅผ ๊ฐ์ ธ์ ๊ณ์ ์ธ๋ถ ์ ๋ณด๋ฅผ ๊ฐ์ ธ์ค๋ ์ ์ฟผ๋ฆฌ์ ์ ๋ฌํฉ๋๋ค.
์น์ ํ๊ณ ๋น ๋ฅธ ๋ต๋ณ ๊ฐ์ฌํฉ๋๋ค. @fbartho
์๋ง๋ ๋ด๊ฐ bcoin์ ๋ํด ์ธ๊ธํ์ง ๋ง์์ด์ผ ํ๋๋ฐ, ๋ด ๋ฌธ์ ๋ ๋ ๊ฐ๋จํฉ๋๋ค
๋ฌธ์์ @export
์ง์๋ฌธ ์์ ์๋ REST ๋์ ์ ๋ ๋ฒ ํธ์ถํ๋ ์์ ๊ฐ ์์ต๋๋ค.
์ ์ง๋ฌธ์ ์ด ์์ ์ ์ฒซ ๋ฒ์งธ ์ฟผ๋ฆฌ๊ฐ ๊ฐ์ฒด ๋ฐฐ์ด ๋์ ์ค์นผ๋ผ ๋ฐฐ์ด์ ๋ฐํํ ๋ ์ด๋ป๊ฒ ํด์ผ ํฉ๋๊น?
ํค๊ฐ ์๊ธฐ ๋๋ฌธ์ ๋ด๋ณด๋ผ ์ธ์๋ฅผ ์ง์ ํ ๋ฐฉ๋ฒ์ด ์๋ ๊ฒ ๊ฐ์ต๋๋ค.
๋ํ @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 typePatcher์
๋๋ ๊ทธ๊ฒ์ ์ฌ์ฉํ์ฌ ๋ค์๊ณผ ๊ฐ์ ๋น graphql ํธํ ์๋ต์ ์ฒ๋ฆฌํฉ๋๋ค.
{
"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
}
}
`;
RestLink ๊ตฌ์ฑ
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 };
}
}
});
์ฟผ๋ฆฌ ์ฌ์ฉ
```js
๋ ๋๋ง() {
๋ฐํ (
if (๋ก๋ฉ) {
๋ฐํ (
);
}
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>
);
}
`
``
๋ต๋ณ์ด ๋ฆ์ด ์ฃ์กํฉ๋๋ค. ๊ทํ์ ์๋ฃจ์ ์ ๋ฐฐ์ด์ ๋ฌธ์์ด/์ค์นผ๋ผ์ ๋ํด ์๋ํ์ง ์๋ ๊ฒ ๊ฐ์ต๋๋ค. ํ์ง๋ง ํด๊ฒฐ๋ ๊ฒ ๊ฐ์ต๋๋ค . ๋ค์ ํ๋ฒ ์๋ํด ๋ณด๊ฒ ์ต๋๋ค. ๋ฌธ์ ๊ฐ ๊ณ์๋๋ฉด ๋ค์ ์ด ์ ์์ต๋๋ค. ๊ฐ์ฌ ํด์.
๊ฐ์ฅ ์ ์ฉํ ๋๊ธ
๋ ๋น์ ์ด ์ฌ์ฉํ๋ค๊ณ ์๊ฐ @joemphilips typePatcher์
๋๋ ๊ทธ๊ฒ์ ์ฌ์ฉํ์ฌ ๋ค์๊ณผ ๊ฐ์ ๋น graphql ํธํ ์๋ต์ ์ฒ๋ฆฌํฉ๋๋ค.
์ฟผ๋ฆฌ ์ ์
RestLink ๊ตฌ์ฑ
์ฟผ๋ฆฌ ์ฌ์ฉ
{({ ๋ก๋ฉ, ์ค๋ฅ, ๋ฐ์ดํฐ }) => {
๋ก๋ ์ค...
```js
๋ ๋๋ง() {
๋ฐํ (
if (๋ก๋ฉ) {
๋ฐํ (
);
}
}
`
``