GraphQLã®å§ãæ¹ â ã²ããã®ååã ãååŸããŠã¿ãã
欲ããé ç®ãéžãã§ãçµæãæ¯ã¹ã
- GraphQLãšRESTã®éããšäœ¿ãåã
- ã¹ããŒãå®çŸ©ãšãªãŸã«ãã®æžãæ¹
- QueryãšMutationã®åºæ¬
- ããŒã«ã«ã§ã¯ãšãªãå®è¡ããè¿ãå€ã確èª
ãŸããååã ã衚瀺ãã
JavaScriptã®åºç€ãšNode.jsã»npmãåæã§ããæ¢åãããžã§ã¯ããšåããæ°ããäœæ¥ãã©ã«ããŒã§æºåããŸãã
mkdir graphql-demo
cd graphql-demo
npm init -y
npm install graphql
次ã first-query.mjs ã«ä¿åããŸãã.mjs ã䜿ãã®ã§ãpackage.json ã®ã¢ãžã¥ãŒã«èšå®ã¯å€æŽããŸããã
import { buildSchema, graphql } from 'graphql';
const schema = buildSchema(`
type User { name: String!, email: String }
type Query { user(id: ID!): User }
`);
const users = {
'1': { name: 'ã²ãã', email: 'chick@example.com' },
};
const result = await graphql({
schema,
source: '{ user(id: "1") { name } }',
rootValue: { user: ({ id }) => users[id] ?? null },
});
console.log(JSON.stringify(result, null, 2));
node first-query.mjs ã§ data.user.name ã« ã²ãã ã衚瀺ãããŸããã¡ãŒã«ã¯èŠæ±ããŠããªããããçµæã«å
¥ããŸããã
äžã€å€ããŠãçµæãæ¯ã¹ã
ã³ãŒãã® source ãæ¬¡ã«å€ããŠãããäžåºŠå®è¡ããŠãã ããã
{ user(id: "1") { name email } }
ä»åºŠã¯ email ãè¿ããŸããæ¬¡ã« name ãæªå®çŸ©ã® nickname ã«å€ãããšãæ€èšŒãšã©ãŒã«ãªããŸããã¹ããŒãã¯ãäœãèŠæ±ã§ãããããæ±ºããŠããŸããããã¯æ¶ç©ºãŠãŒã¶ãŒãã¡ã¢ãªããèªãç·Žç¿ã§ãå®ãŠãŒã¶ãŒæ
å ±ãéä¿¡ã¯äœ¿ããŸããã
| åœ¹å² | ãã®äŸã§ã®å Žæ |
|---|---|
| ã¹ããŒã | UserãšQueryã®å |
| ã¯ãšãª | sourceã®æåå |
| ãªãŸã«ã㌠| userãIDããå€ãçšæ |
| çµæ | dataã®äžã®éžãã é ç® |
ãµãŒããŒãžé²ããªã
HTTP APIãšããŠäœ¿ãã«ã¯ããªã¯ãšã¹ããåããŠGraphQLãå®è¡ãããµãŒããŒãå¿ èŠã§ããå ¬åŒã®GraphQL.jsã®ãµãŒããŒäŸãApollo ServerãGraphQL Yogaãªã©ããçšéã«åããã®ãéžã³ãŸããã¯ã©ã€ã¢ã³ãããæåã¯HTTPãªã¯ãšã¹ããéãã ãããå§ããããŸãã
Apollo Sandboxã¯ã¯ãšãªã詊ãç»é¢ã§ãApollo Clientã¯ã¢ããªã«çµã¿èŸŒãã¯ã©ã€ã¢ã³ãã©ã€ãã©ãªã§ãããµãŒããŒã©ã€ãã©ãªãšã¯åœ¹å²ãéããŸãã䜿çšããããŒã«ã«ãã£ãŠç»é¢ã®éãæ¹ãå®è¡æé ãéããããå ¬åŒã®ã»ããã¢ããæé ã«æ²¿ã£ãŠé²ããŸãããã
ããå°ã詳ããïŒå ¬éåã®ç¢ºèª
GraphQLã¯éåžžãäžã€ã®HTTPãšã³ããã€ã³ãã§è€æ°ã®æäœãåããŸããããšã³ããã€ã³ãæ°ã¯ä»æ§ãäžã€ã«åºå®ããŠããããã§ã¯ãããŸãããRESTã§ãã¬ã¹ãã³ã¹é ç®ãéžã¹ãèšèšãã§ããŸããRESTãšã®æ¯èŒã§ãå¿ èŠãªç»é¢ãéçšããèããŠã¿ãŸãããã
èªèšŒã»æš©éãããŒãžã³ã°ãšä»¶æ°äžéãæ·±ããè€éãã®å¶éãã¿ã€ã ã¢ãŠããçµã¿åãããŸããäºåç»é²ããæäœã®èš±å¯ãªã¹ãã¯äžã€ã®å¯Ÿçã§ãããåãªãã¯ãšãªã®ä¿åã ãã§æªç¥ã®æäœãçŠæ¢ããããšã¯éããŸããã
DataLoaderã䜿ãå Žåããããã颿°ãšãªã¯ãšã¹ãåäœã®ãã£ãã·ã¥ãèšèšããŸãã詳ããã¯ãªãŸã«ããŒã®ä»çµã¿ãžãç»é¢ã§ã¯ data ãš errors ã®äž¡æ¹ã確èªããŸãããã
ãã³ã®ã³å çã®ãŸãšã
ãGraphQLãã£ãŠåºãŠããããAPIãçšæããé ç®ãããæ¬²ãã圢ã§ãé¡ãããæ¹æ³ããšæãã°ã ãããOKïŒ ãŸãã¯nameã ããæ¬¡ã«emailãããšããå°ããªå€åã詊ããŠã¿ããã
åèè³æ
- GraphQLïŒExecution â ãã£ãŒã«ãã»èŠªã®å€ã»å®è¡
- GraphQL仿§ïŒSeptember 2025 â Mutationã®æäžäœã®çŽåå®è¡ãšNon-Nullã®ãšã©ãŒäŒæ
- GraphQL.jsïŒConstructing Types â buildSchemaãšã«ãŒãã®å€
- DataLoader README â ããã颿°ãšãªã¯ãšã¹ãåäœã®ãã£ãã·ã¥
- GraphQLïŒSecurity â éèŠå¶åŸ¡ã»èš±å¯ãªã¹ãã»æš©é