GraphQLãªãŸã«ããŒã®ä»çµã¿ â æ¬²ããé ç®ãå€ã«ãªããŸã§
芪ã®å€ãããååãåãåºã
ãŸããã²ããã®ååãåãåºã
GraphQLå
¥éãšåãããNode.jsãšæ°ããäœæ¥ãã©ã«ããŒã䜿ããŸããæ¬¡ã®æºåãããŠãããã³ãŒãã resolver-demo.mjs ã«ä¿åããŠãã ããã
npm init -y
npm install graphql
import { buildSchema, graphql } from 'graphql';
const schema = buildSchema(`
type User { name: String! }
type Query { user(id: ID!): User }
`);
const users = { '1': { name: 'ã²ãã' } };
const rootValue = {
user({ id }) {
console.log('æ¢ããID:', id);
return users[id] ?? null;
},
};
const result = await graphql({
schema,
source: '{ user(id: "1") { name } }',
rootValue,
});
console.log(JSON.stringify(result));
node resolver-demo.mjs ã§æ¬¡ã®çµæã«ãªããŸãã
æ¢ããID: 1
{"data":{"user":{"name":"ã²ãã"}}}
user ãè¿ãããªããžã§ã¯ãã® name ãGraphQL.jsã®æ¢å®ã®åŠçãèªã¿ãŸããIDã "2" ã«ããã°ããã®äŸã§ã¯èŠã€ããã user ã null ã«ãªããŸããããã§ã¯HTTPãµãŒããŒãDBã䜿ããã解決åŠçã ãã詊ããŠããŸãã
芪ã®å€ãããå¿ èŠãªé ç®ããã©ã
ãªãŸã«ããŒã¯äžè¬ã«èŠªã®å€ãåŒæ°ãcontextãå®è¡æ
å ±ãåãåããŸããæ¬æã® buildSchema ãšã«ãŒããªããžã§ã¯ããäœ¿ãæ¹æ³ã§ã¯ãã«ãŒãã®ã¡ãœããã¯åŒæ°ãªããžã§ã¯ããåãåããŸãããã¹ãŠã®æžãæ¹ã§åã颿°ã®åŒæ°é ã«ãªãããã§ã¯ãããŸããã
user â posts â title ãªãã芪ãæçš¿ã®äžèЧãè¿ããåŸãåæçš¿ã®ã¿ã€ãã«ã解決ããŸãããå¿
èŠãªé
ç®ã ãè¿ããããšãšããè£åŽã®ååŸãæå°åæ°ã«ãªããããšã¯å¥ã§ããDBãå€éšAPIãžã®åŒã³åºãåæ°ã確èªããŸãããã
ãšã©ãŒãšæŽæ°ã®é åº
éåžžã®ãã£ãŒã«ãã¯çµæãé çªã«äŸåããªãããã«èšèšããŸããMutationã®æäžäœã¯æäœã®èšèŒé ã§çŽåã§ãããè€æ°ã®å€æŽãäžã€ã®ãã©ã³ã¶ã¯ã·ã§ã³ã«ãªãä¿èšŒã¯ãããŸããã
nullableãªãã£ãŒã«ãã®ãšã©ãŒãªãæ£åžžãªéšåã®ããŒã¿ãè¿ããå ŽåããããŸããNon-Nullã®å€±æã¯ãnullãèš±ã芪ãŸã§äŒãããŸããç»é¢ã§ã¯HTTPã¹ããŒã¿ã¹ã ãã§ãªã data ãš errors ã確èªããŠãã ãããRESTã§ãéšåçãªçµæãè¿ãèšèšã¯å¯èœã§ãåçŽãªãå
šéšæåãå
šéšå€±æããã®éãã§ã¯ãããŸããã
ããå°ã詳ããïŒN+1ãšDataLoader
DataLoaderã®JavaScriptå®è£ ã¯ãåãå®è¡ã®ãŸãšãŸãã§èŠæ±ãããããŒãããã颿°ãžæž¡ããŸãããã®é¢æ°ãããŒããšã«DBãåŒãã§ããããDBã®åãåããã¯æžããŸãããçµæã¯ããŒãšåãé·ãã»é çªã§è¿ãå¿ èŠããããŸãã
éåžžã¯contextå ã«ãªã¯ãšã¹ãå°çšã®DataLoaderãäœããŸããå¥ã®å©çšè ã§ã€ã³ã¹ã¿ã³ã¹ã䜿ãåããšãæš©éã®éãããŒã¿ããã£ãã·ã¥ããè¿ããããããããŸããJOINãäžæ¬ååŸãåè£ã«ããå®éã®åãåããæ°ãæž¬ããŸãããã
ãã³ã®ã³å çã®ãŸãšã
ããªãŸã«ããŒãã£ãŠåºãŠããããæå®ãããé ç®ã®å€ãçšæããæ åœããšæãã°ã ãããOKïŒ æ¬¡ã¯GraphQLãšRESTã®æ¯èŒã§ãAPIå šäœã®èšèšãæ¯ã¹ãŠã¿ãŸãããã
åèè³æ
- GraphQLïŒExecution â ãã£ãŒã«ãã»èŠªã®å€ã»å®è¡
- GraphQL仿§ïŒSeptember 2025 â Mutationã®æäžäœã®çŽåå®è¡ãšNon-Nullã®ãšã©ãŒäŒæ
- GraphQL.jsïŒConstructing Types â buildSchemaãšã«ãŒãã®å€
- DataLoader README â ããã颿°ãšãªã¯ãšã¹ãåäœã®ãã£ãã·ã¥