GraphQLã®çšèª
GitHub GraphQL APIã¯ãGitHub REST APIããã®ã¢ãŒããã¯ãã£åã³æŠå¿µçãªç§»è¡ã衚ããã®ã§ãã GraphQL API ã®ãªãã¡ã¬ã³ã¹ ããã¥ã¡ã³ãã§ã¯ãããã€ãã®æ°ããçšèªãç»å Žããããšã«ãªãã§ãããã
ã¹ããŒã
ã¹ããŒãã¯ãGraphQL APIã®åã·ã¹ãã ãå®çŸ©ããŸãã ããã¯ãã¯ã©ã€ã¢ã³ããã¢ã¯ã»ã¹ã§ãããååšãããããŒã¿ïŒãªããžã§ã¯ãããã£ãŒã«ãããªã¬ãŒã·ã§ã³ã·ããããã¹ãŠïŒã®å®å šãªéåãèšè¿°ããŸãã ã¯ã©ã€ã¢ã³ãããã®åŒã³åºãã¯ãã¹ããŒãã«å¯ŸããŠæ€èšŒãããå®è¡ãããŸãã ã¯ã©ã€ã¢ã³ãã¯ãã€ã³ããã¹ãã¯ã·ã§ã³ã䜿çšããŠã¹ããŒãã«é¢ããæ å ±ã確èªã§ããŸãã ã¹ããŒãã¯GraphQL APIãµãŒããŒäžã«ãããŸãã 詳现ã«ã€ããŠã¯ããGraphQL API ã®æ€åºããåç §ããŠãã ããã
ãã£ãŒã«ã
ãã£ãŒã«ãã¯ããªããžã§ã¯ãããåãåºããããŒã¿ã®åäœã§ãã GraphQL ã®å ¬åŒããã¥ã¡ã³ãã§ã¯ããGraphQL ã¯ãšãªèšèªã¯ãåºæ¬çã«ãªããžã§ã¯ãã®ãã£ãŒã«ããéžæãããã®ã§ãããšèšèŒãããŠããŸãã
å ¬åŒä»æ§ã§ã¯ããã£ãŒã«ãã«ã€ããŠã次ã®ããã«èšèŒãããŠããŸãã
ãã¹ãŠã®GraphQLã®æäœã¯ãæç¢ºãªåœ¢ã®ã¬ã¹ãã³ã¹ãä¿èšŒããããããã¹ã«ã©ãŒå€ãè¿ããã£ãŒã«ããŸã§éããæå®ãããªããã°ãªããŸããã
ããã¯ããªãã¡ãã¹ã«ã©ãŒã§ã¯ãªããã£ãŒã«ããè¿ãããããšãããšãã¹ããŒãæ€èšŒã§ãšã©ãŒãæãããããšããããšã§ãã ãã¹ãŠã®ãã£ãŒã«ããã¹ã«ã©ãŒå€ãè¿ããŸã§ãå ¥ãåã«ãªã£ããµããã£ãŒã«ãã远å ããªããã°ãªããŸããã
åŒæ°
åŒæ°ã¯ãç¹å®ã®ãã£ãŒã«ãã«æ·»ä»ãããããŒ/å€ãã¢ã®éåã§ãã ãã£ãŒã«ãã®äžã«ã¯ãåŒæ°ãå¿ èŠãšãããã®ããããŸãã ãã¥ãŒããŒã·ã§ã³ã§ã¯ãåŒæ°ãšããŠå ¥åãªããžã§ã¯ããèŠæ±ãããŸãã
å®è£
GraphQL ã¹ããŒãã§ã¯ã_å®è£ _ãšããçšèªã䜿çšããŠããªããžã§ã¯ããã€ã³ã¿ãŒãã§ã€ã¹ããã©ã®ããã«ç¶æ¿ãããããå®çŸ©ããããšããããŸãã
以äžã¯ãã€ã³ã¿ãŒãã§ãŒã¹ X
ãšãªããžã§ã¯ã Y
ãå®çŸ©ããã¹ããŒãã®èæ¡ãããäŸã§ãã
interface X {
some_field: String!
other_field: String!
}
type Y implements X {
some_field: String!
other_field: String!
new_field: String!
}
ããã¯ããªããžã§ã¯ã Y
ã§ã€ã³ã¿ãŒãã§ãŒã¹ X
ãšåããã£ãŒã«ã/åŒæ°/æ»ãå€ã®åãå¿
èŠãšãããäžæ¹ã§ããªããžã§ã¯ã Y
åºæã®æ°ããªãã£ãŒã«ãã远å ããå¿
èŠããããšããããšã§ãã (!
ã¯ãã®ãã£ãŒã«ããå¿
é ã§ããããšãæå³ããŸãã)
ãªãã¡ã¬ã³ã¹ããã¥ã¡ã³ãã«ã¯ã以äžã®ãããªèšè¿°ããããŸãã
-
å ãªããžã§ã¯ã ã«ã¯ãç¶æ¿å ã®ã€ã³ã¿ãŒãã§ã€ã¹ ã [å®è£ ] ã®äžã«äžèŠ§è¡šç€ºãããŸãã
-
å ã€ã³ã¿ãŒãã§ã€ã¹ ã«ã¯ãç¶æ¿ ãããªããžã§ã¯ãã [å®è£ ] ã®äžã«äžèŠ§è¡šç€ºãããŸãã
Connection
ã³ãã¯ã·ã§ã³ã䜿ããšãåãåŒã³åºãã®äžéšãšããŠé¢é£ãããªããžã§ã¯ãã«å¯Ÿããã¯ãšãªãå®è¡ã§ããŸãã ã³ãã¯ã·ã§ã³ã䜿ããšãREST APIã§ã¯è€æ°ã®åŒã³åºãã䜿ããããªå Žåã«ãåäžã®GraphQLåŒã³åºãã䜿ãããšãã§ããŸãã 詳ããã¯ããRESTããGraphQLãžã®ç§»è¡ããã芧ãã ããã
ç¹ãç·ã§ã€ãªããã°ã©ããå³ç€ºãããšåœ¹ç«ã¡ãŸãã ç¹ã¯ããŒãã§ãç·ã¯ãšããžã§ãã ã³ãã¯ã·ã§ã³ã¯ãããŒãéã®é¢ä¿ãå®çŸ©ããŸãã
Edge
ãšããžã¯ãããŒãéã®ã³ãã¯ã·ã§ã³ã衚ããŸãã ã³ãã¯ã·ã§ã³ã«å¯ŸããŠã¯ãšãªãè¡ããšããã®ãšããžããã©ããŒã¹ããŠããŒããååŸããããšã«ãªããŸãã ãã¹ãŠã® edges
ãã£ãŒã«ãã«ã¯ãnode
ãã£ãŒã«ããš cursor
ãã£ãŒã«ãããããŸãã ã«ãŒãœã«ã¯æ¹ããŒãžäœçœ®ã®èªåä¿®æ£ã«äœ¿çšãããŸãã 詳ããã¯ããGraphQL API å
ã§ã®æ¹ããŒãžäœçœ®ã®èªåä¿®æ£ã®äœ¿çšããã芧ãã ããã
Node
ããŒã ã¯ãªããžã§ã¯ãã®ç·ç§°ã§ãã ããŒãã¯çŽæ¥ã«ãã¯ã¢ããããããšãã§ããŸãããã³ãã¯ã·ã§ã³ãéããŠé¢é£ããããŒãã«ã¢ã¯ã»ã¹ããããšãã§ããŸãã ã¹ã«ã©ãŒãè¿ããªã node
ãæå®ããå Žåã¯ããã¹ãŠã®ãã£ãŒã«ãã§ã¹ã«ã©ãŒãè¿ããããŸã§ãµããã£ãŒã«ããå«ããå¿
èŠããããŸãã REST API ã«ããããŒã ID ãžã®ã¢ã¯ã»ã¹ãšãGraphQL ã¯ãšãªã§ã®ãããã®äœ¿çšã®è©³çްã«ã€ããŠã¯ããã°ããŒãã«ããŒãIDã®å©çšããåç
§ããŠãã ããã
GraphQL APIã®çºèŠ
GraphQL ã¯å ççã§ãã ããã¯ããªãã¡ãGraphQLã¹ããŒãã«é¢ãã詳现ãã¯ãšãªã§ãããšããããšã§ãã
-
__schema
ã«å¯ŸããŠã¯ãšãªãå®è¡ããŠãã¹ããŒãã§å®çŸ©ãããŠãããã¹ãŠã®åãäžèŠ§è¡šç€ºãããããããã®è©³çްãååŸããŸããquery { __schema { types { name kind description fields { name } } } }
-
__type
ã«å¯ŸããŠã¯ãšãªãå®è¡ããŠãä»»æã®åã®è©³çްãååŸããŸããquery { __type(name: "Repository") { name kind description fields { name } } }
-
GET
èŠæ±ã䜿çšããŠãã¹ããŒãã®_ã€ã³ããã¹ãã¯ã·ã§ã³ ã¯ãšãª_ãå®è¡ããããšãã§ããŸããcurl -H "Authorization: bearer TOKEN" https://api.github.com/graphql
ã¡ã¢
"message": "Bad credentials"
ãŸãã¯401 Unauthorized
å¿çãåãåã£ãå Žåã¯ãæå¹ãªããŒã¯ã³ã䜿çšããŠããããšã確èªããŠãã ãããResource not accessible by personal access token
ã§403
ãšã©ãŒãçºçããå Žåã¯ãæ£ãããªãœãŒã¹ææè ãfine-grained personal access tokenã®ã¿ãŒã²ãããšãªã£ãŠããããšã確èªããŸãã ããšãã°ãã¢ã¯ã»ã¹ããããšããŠãããªããžããªãææããŠãã Organization ãã¿ãŒã²ããã«ãããŠããå¿ èŠããããŸããçµæã¯JSONã§è¿ãããã®ã§ãèªãã ãæ€çŽ¢ãããããããããããã«ãããªãã£ããªã³ãããããšãããããããŸãã jq ãªã©ã®ã³ãã³ãã©ã€ã³ ããŒã«ã䜿çšãããããã®ç®çã®ããã«çµæã
python -m json.tool
ã«ãã€ããããã§ããŸãããããã¯ã
idl
ã¡ãã£ã¢åãæž¡ããŠãIDL 圢åŒã§çµæãè¿ããŠãããããšãã§ããŸããããã¯ã¹ããŒãã®å§çž®ããŒãžã§ã³ã§ãã$ curl -H "Authorization: bearer TOKEN" -H "Accept: application/vnd.github.v4.idl" \ https://api.github.com/graphql
ã¡ã¢
ã€ã³ããã¹ãã¯ã·ã§ã³ ã¯ãšãªã¯ããããã GraphQL ã§å®è¡ããå¯äžã®
GET
èŠæ±ã§ãã æ¬æãæž¡ãå ŽåãGraphQL ã®èŠæ±ã¡ãœããã¯ãã¯ãšãªã§ããã¥ãŒããŒã·ã§ã³ã§ãPOST
ã§ããã¯ãšãªã®å®è¡ã®è©³çްã«ã€ããŠã¯ããGraphQLã§ã®åŒã³åºãã®äœæããåç §ããŠãã ããã