𥳠Gato GraphQL v0.9 ããªãªãŒã¹ãããŸããïŒ
çŽ1.5幎ã®éçºæéãš16,000以äžã®ã³ããããçµãŠãGato GraphQLã®æ°ããŒãžã§ã³ãã€ãã«ãªãªãŒã¹ãããŸããïŒ ð¥³
ããŒãžã§ã³ 0.9 ã¯ãã©ã°ã€ã³ã®æŽå²äžæå€§ã®ãªãªãŒã¹ã§ãããã¡ããchangelogã§ãããããŠããã¹ãŠã®æ°æ©èœã®å®å
šãªè©³çްã¯ãã¡ãã§ãïŒ
github.com/GatoGraphQL/GatoGraphQL/releases/tag/0.9.3
ãã®ããã¥ã¡ã³ãã¯ããªãé·ãã§ãïŒèªäºãŸã§40å以äžïŒïŒããã®ããã以äžã«æãéèŠãªå€æŽç¹ã®TL;DRããŸãšããŸããã
GraphQLã¹ããŒãã®å€§å¹ ãªå å®
WordPressã®ããŒã¿ã¢ãã«ãGraphQLã¹ããŒãã«å€§å¹ ã«ãããã³ã°ãããŸããã

ãšããããã¹ããŒãã«ã¯ä»¥äžã®æ¹åãå«ãŸããŠããŸãïŒ
- ããŒãããã©ã°ã€ã³ãå«ãä»»æã®CPTããããŒã¿ãã¯ãšãªã§ãã
- ã«ã¹ã¿ã ã¿ã¯ãœãããŒïŒã¿ã°ãšã«ããŽãªãŒïŒã®ãããã³ã°
- ããé©åãªGraphQLåã®äœæãšè¿åŽïŒäŸïŒ
HTMLãURLãDateTimeïŒ - ã€ã³ããããªããžã§ã¯ãã«ãããã£ãŒã«ãåŒæ°ã®æŽç
- oneof ã€ã³ããããªããžã§ã¯ãã䜿çšããŠç°ãªãããããã£ïŒäŸïŒ
idãslugïŒã§ãšã³ãã£ãã£ãéžæ - ãã¥ãŒããŒã·ã§ã³ãã€ããŒãã®è¿åŽ
- èšå®ïŒ
wp_optionsããïŒãšã¡ã¿å€ïŒæçš¿ããŠãŒã¶ãŒãã³ã¡ã³ããã¿ã¯ãœãããŒçšïŒã®ã¯ãšãª
ã«ã¹ã¿ã ã¹ã«ã©ãŒ
GraphQLãµãŒããŒã«ã«ã¹ã¿ã ã¹ã«ã©ãŒåã®ãµããŒãã远å ãããŸãããã«ã¹ã¿ã ã¹ã«ã©ãŒã䜿çšãããšããã£ãŒã«ãåŒæ°ã«ããå ¥åã®åãåãããã¬ã¹ãã³ã¹ã®ã«ã¹ã¿ã åºåã®å°åãªã©ãããŒã¿ãããé©åã«è¡šçŸã§ããŸãã
ããã€ãã®æšæºçãªã«ã¹ã¿ã ã¹ã«ã©ãŒåãå®è£ ãããGraphQLã¹ããŒãã§ããã«äœ¿çšã§ããããã«ãªããŸããïŒ
DateDateTimeEmailHTMLURLURLAbsolutePath
ã«ã¹ã¿ã enum
ã«ã¹ã¿ã enumåããµããŒããããããã«ãªããŸãããenumã¯ãç¹å®ã®èš±å¯ãããå€ã®ã»ããã«éå®ãããç¹æ®ãªã¹ã«ã©ãŒã§ããããã«ãã以äžãå¯èœã«ãªããŸãïŒ
- ãã®åã®åŒæ°ãèš±å¯ãããå€ã®ããããã§ããããšãæ€èšŒãã
- åã·ã¹ãã ãéããŠããã£ãŒã«ããæéã®å€ã®ã»ããã®ããããã«ãªãããšãäŒéãã
è€æ°ã®enumåãå®è£ ãããGraphQLã¹ããŒãã§é©åãªå Žé¢ã«äœ¿çšãããŠããŸãã以äžãå«ã¿ãŸãïŒ
CommentOrderByEnumCommentStatusEnumCommentTypeEnumCustomPostOrderByEnumCustomPostStatusEnumMediaItemOrderByEnumMenuOrderByEnumTaxonomyOrderByEnumUserOrderByEnum
ã€ã³ããããªããžã§ã¯ã
GraphQLãµãŒããŒã¯ã€ã³ãããåããµããŒãããããã«ãªããç¬èªã®ã€ã³ããããªããžã§ã¯ããGraphQLã¹ããŒãã«è¿œå ã§ããŸããã€ã³ããããªããžã§ã¯ãã䜿çšãããšããã£ãŒã«ããžã®å ¥åãšããŠè€éãªãªããžã§ã¯ããæž¡ãããšãã§ãããã¥ãŒããŒã·ã§ã³ã«ç¹ã«æçšã§ãã
ã¹ããŒãã®é©åãªç®æã«è€æ°ã®ã€ã³ããããªããžã§ã¯ãã远å ãããŸãããããšãã°ãããŒã¿ãã¯ãšãªãããã£ãŒã«ãïŒpostsãusersãcommentsãªã©ïŒã¯ãã£ãŒã«ãåŒæ° filterãsortãpagination ã®äžã«è€éãªã€ã³ããããªããžã§ã¯ããåãåããããŒã¿ããã¥ãŒããŒããããã£ãŒã«ãïŒcreatePostãaddCommentToCustomPostãªã©ïŒã¯ãã£ãŒã«ãåŒæ° input ã®äžã«ã€ã³ããããªããžã§ã¯ããåãåããŸãã
Oneof ã€ã³ããããªããžã§ã¯ã
ãoneofãã€ã³ããããªããžã§ã¯ãã¯ç¹æ®ãªã€ã³ããããªããžã§ã¯ãã§ãã€ã³ããããã£ãŒã«ãã®ãã¡å³å¯ã«1ã€ã ããå ¥åãšããŠæäŸããªããã°ãªãããããã§ãªãå Žåã¯ããªããŒã·ã§ã³ãšã©ãŒãè¿ãããŸãããã®åäœã«ãããå ¥åã«ããªã¢ãŒãã£ãºã ãå°å ¥ãããŸãã
ããšãã°ããã£ãŒã«ã Root.post ã«ãã£ãŒã«ãåŒæ° by ã远å ãããŸãããããã¯oneof ã€ã³ããããªããžã§ã¯ãã§ãid ã slug ãªã©ã®ç°ãªãããããã£ã䜿ã£ãŠæçš¿ãååŸã§ããŸãïŒ
{
postByID: post(by: {
id: 1
}) {
id
title
}
postBySlug: post(by: {
slug: "hello-world"
}) {
id
title
}
}ãã®å©ç¹ã¯ã1ã€ã®ãã£ãŒã«ãã§ç°ãªããŠãŒã¹ã±ãŒã¹ã«å¯Ÿå¿ã§ããããããŠãŒã¹ã±ãŒã¹ããšã«å¥ã®ãã£ãŒã«ãïŒpostByIDãpostBySlugãªã©ïŒãäœæããå¿
èŠããªããªããGraphQLã¹ããŒããããç°¡æœã§ãšã¬ã¬ã³ãã«ãªãããšã§ãã
è€æ°ã®Oneof ã€ã³ããããªããžã§ã¯ããå®è£ ãããŸããïŒ
Root.customPost(by:)Root.mediaItem(by:)Root.menu(by:)Root.page(by:)Root.postCategory(by:)Root.postTag(by:)Root.post(by:)Root.user(by:)
ãªãã¬ãŒã·ã§ã³ãã£ã¬ã¯ãã£ã
GraphQLãªãã¬ãŒã·ã§ã³ïŒã€ãŸã query ããã³ mutation ãªãã¬ãŒã·ã§ã³ïŒããã£ã¬ã¯ãã£ããåãåããããã«ãªããŸããã
ç¹å®ã®åãžã®ãã£ã¬ã¯ãã£ãã®å¶é
ïŒãã£ãŒã«ãïŒãã£ã¬ã¯ãã£ãã¯ãç¹å®ã®åã®ãã£ãŒã«ãã«ã®ã¿é©çšãããããå¶éã§ããŸããããšãã°ããã£ãŒã«ãå€ã倧æåã«å€æãããã£ã¬ã¯ãã£ã @strUpperCase 㯠String ãã£ãŒã«ãã«ã®ã¿æå³ããããIntãFloatãBoolean ã«ã¯é©çšãã¹ãã§ã¯ãããŸããããã®å¶éããã£ã¬ã¯ãã£ããªãŸã«ããŒã§å®£èšã§ããããã«ãªããŸããã
ãšã©ãŒãçºçãããGraphQLã¯ãšãªããŒããžã®ãã«ãã¹ã®è¡šç€º
ã¬ã¹ãã³ã¹ã«ãšã©ãŒãè¿ããGraphQLã¯ãšãªã®ããŒããžã®ãã«ãã¹ãå«ãŸããããã«ãªããŸããïŒãµããšã³ã㪠extensions.path ã®äžïŒãããã«ãããåé¡ã®åå ãç¹å®ãããããªããŸãã
ããšãã°ã次ã®ã¯ãšãªã§ã¯ããã£ã¬ã¯ãã£ã @nonExisting ãååšããŸããïŒ
query {
myField @nonExisting
}ã¬ã¹ãã³ã¹ã¯ä»¥äžã®ãšããã§ãïŒ
{
"errors": [
{
"message": "There is no directive with name 'nonExisting'",
"locations": [
{
"line": 2,
"column": 7
}
],
"extensions": {
"type": "QueryRoot",
"field": "myField @nonExisting",
"path": [
"@nonExisting",
"myField @nonExisting",
"query { ... }"
],
"code": "PoP\\ComponentModel\\e20"
}
}
],
"data": {
"id": "root"
}
}å®å šã§ãªãããã©ã«ãèšå®ã®æå¹å
Gato GraphQLã¯å®å šãªããã©ã«ãèšå®ãæäŸããŠããŸãïŒ
- ã·ã³ã°ã«ãšã³ããã€ã³ãã¯ç¡å¹
- GraphQLã¹ããŒãå
ã®ãã»ã³ã·ãã£ãããªããŒã¿èŠçŽ ïŒ
User.rolesãstatusã«ããæçš¿ã®ãã£ã«ã¿ãªã³ã°ãªã©ïŒã¯å ¬éãããªã - ã¯ãšãªã§ããèšå®ãªãã·ã§ã³ãšã¡ã¿ããŒïŒæçš¿ããŠãŒã¶ãŒãªã©ïŒã¯ãããã«éå®ããã
- äžåºŠã«ã¯ãšãªã§ãããšã³ãã£ãã£æ°ã¯å¶éãããïŒæçš¿ããŠãŒã¶ãŒãªã©ïŒ
ãããã®å®å šãªããã©ã«ãèšå®ã¯ãæªæã®ããæ»æãé²ãããã«ãã©ã€ãããµã€ããå®å šã«ä¿ã€ããã«å¿ èŠã§ãããããããã¹ã¿ãã£ãã¯ããµã€ãã®æ§ç¯æïŒWordPressãµã€ããæ»æã«å¯ŸããŠè匱ã§ãªãå Žåãããšãã°ã©ãããããäžã®éçºãµã€ããã»ãã¥ã¢ãªãã¡ã€ã¢ãŠã©ãŒã«ã®å åŽããŸãã¯ã€ã³ã¿ãŒãããã«å ¬éãããŠããªãç°å¢ïŒã«ã¯å¿ èŠãããŸããã
v0.9 ãããwp-config.php ã«ä»¥äžã远å ããããšã§å®å
šã§ãªãããã©ã«ããæå¹åã§ããŸãïŒ
define( 'GRAPHQL_API_ENABLE_UNSAFE_DEFAULTS', true );ãŸãã¯ãåãããŒ/ããªã¥ãŒãç°å¢å€æ°ãšããŠå®çŸ©ããããšãã§ããŸãã
å®å šã§ãªãããã©ã«ããæå¹åãããšããã©ã°ã€ã³ã®ããã©ã«ãèšå®ã¯æ¬¡ã®ããã«å€æãããŸãïŒ
- ã·ã³ã°ã«ãšã³ããã€ã³ããæå¹åããã
- GraphQLã¹ããŒãã§ãã»ã³ã·ãã£ãããªããŒã¿èŠçŽ ãå ¬éããã
- ãã¹ãŠã®èšå®ãªãã·ã§ã³ãšã¡ã¿ããŒãã¯ãšãªå¯èœã«ãªã
- äžåºŠã«ã¯ãšãªã§ãããšã³ãã£ãã£æ°ãç¡å¶éã«ãªã
ã«ããŽãªãŒã«ããã«ã¹ã¿ã ãšã³ããã€ã³ããšPersistedã¯ãšãªã®æŽç
ã«ã¹ã¿ã ãšã³ããã€ã³ããŸãã¯Persistedã¯ãšãªãäœæããéããGraphQLãšã³ããã€ã³ãã«ããŽãªãŒãã远å ããŠãã¹ãŠã®ãšã³ããã€ã³ããæŽçã§ããŸãïŒ

ããšãã°ãã¯ã©ã€ã¢ã³ããã¢ããªã±ãŒã·ã§ã³ããŸãã¯ãã®ä»ã®å¿ èŠãªæ å ±ããšã«ãšã³ããã€ã³ãã管çããã«ããŽãªãŒãäœæã§ããŸãïŒ

ã«ã¹ã¿ã ãšã³ããã€ã³ããšPersistedã¯ãšãªã®äžèЧã§ã¯ãããããã®ã«ããŽãªãŒã確èªã§ããŸããã«ããŽãªãŒãªã³ã¯ãã¯ãªãã¯ããããäžéšã®ãã£ã«ã¿ãŒã䜿çšãããšããã®ã«ããŽãªãŒã®ãšã³ããªãŒã®ã¿ã衚瀺ãããŸãã

ã€ã³ããã¹ãã¯ã·ã§ã³çµç±ã§ã®ã¹ããŒãæ¡åŒµã®ã¯ãšãª
ã¹ããŒãèŠçŽ ã«æ·»ä»ãããã«ã¹ã¿ã ã¡ã¿ããŒã¿ãããã£ãŒã«ã extensions çµç±ã§ã¯ãšãªã§ããããã«ãªããŸããã
ã¹ããŒãã®ãã¹ãŠã®ã€ã³ããã¹ãã¯ã·ã§ã³èŠçŽ ãæ°ãããã£ãŒã«ãã§ã¢ããã°ã¬ãŒããããããããã察å¿ãããExtensionsãåã®ãªããžã§ã¯ããè¿ãããã«ãªããŸããããã®åã¯ãã®èŠçŽ ã®ã«ã¹ã¿ã ããããã£ãå
¬éããŸãã
# Using "_" instead of "__" in introspection type name to avoid errors in graphql-js
type _SchemaExtensions {
# Is the schema being namespaced?
isNamespaced: Boolean!
}
extend type __Schema {
extensions: _SchemaExtensions!
}
type _NamedTypeExtensions {
# The type name
elementName: String!
# The "namespaced" type name
namespacedName: String!
# Enum-like "possible values" for EnumString type resolvers, `null` otherwise
possibleValues: [String!]
# OneOf Input Objects are a special variant of Input Objects where the type system asserts that exactly one of the fields must be set and non-null, all others being omitted.
isOneOf: Boolean!
}
extend type __Type {
# Non-null for named types, null for wrapping types (Non-Null and List)
extensions: _NamedTypeExtensions
}
type _DirectiveExtensions {
# If no objects are returned in the field (eg: because they failed validation), does the directive still need to be executed?
needsDataToExecute: Boolean!
# Names or descriptions of the types the field directives is restricted to, or `null` if it supports any type (i.e. it defines no restrictions)
fieldDirectiveSupportedTypeNamesOrDescriptions: [String!]
}
extend type __Directive {
extensions: _DirectiveExtensions!
}
type _FieldExtensions {
isGlobal: Boolean!
# Useful for nested mutations
isMutation: Boolean!
# `true` => Only exposed when "Expose "sensitive" data elements" is enabled
isSensitiveDataElement: Boolean!
}
extend type __Field {
extensions: _FieldExtensions!
}
type _InputValueExtensions {
isSensitiveDataElement: Boolean!
}
extend type __InputValue {
extensions: _InputValueExtensions!
}
type _EnumValueExtensions {
isSensitiveDataElement: Boolean!
}
extend type __EnumValue {
extensions: _EnumValueExtensions!
}GraphQLãµãŒããŒã³ãŒãã®WordPressããã®åé¢å®äº
ãã©ã°ã€ã³ãåããåºç€ãšãªãGraphQLãµãŒããŒã¯ãã¹ã¿ã³ãã¢ãã³ã®PHPã³ã³ããŒãã³ããšããŠã€ã³ã¹ããŒã«ã»å®è¡ã§ããããã«ãªããŸãããã€ãŸããWordPressãšã¯ç¬ç«ããŠåäœããŸãã
ããã«ãããGato GraphQLãä»ã®ãã¬ãŒã ã¯ãŒã¯ïŒäŸïŒLaravelïŒã§äœ¿çšããããWordPressãå©çšå¯èœãã©ããã«é¢ãããïŒç¶ç¶çã€ã³ãã°ã¬ãŒã·ã§ã³ã¿ã¹ã¯ã®å®è¡æãªã©ïŒãããããPHPç°å¢ã§å©çšã§ããéãéãããŸãã
ã¹ããŒãèšå®ãã«ã¹ã¿ã ãšã³ããã€ã³ããPersistedã¯ãšãªç·šéæã®ããã¥ã¡ã³ãåç §
ã¹ããŒãèšå®ãã«ã¹ã¿ã ãšã³ããã€ã³ããPersistedã¯ãšãªã®ç·šéæã«è¡šç€ºããããã¹ãŠã®ãããã¯ã«ãinfoããã¿ã³ã远å ãããŸãããã¯ãªãã¯ãããšã¢ãŒãã«ãŠã£ã³ããŠã«ããã¥ã¡ã³ãã衚瀺ãããŸãã


ãã®ä»å€æ°
ãã®ä»ãã¹ãŠã®æ°æ©èœã«ã€ããŠã¯ãæ°ãªãªãŒã¹ã®å®å šãªèª¬æãã芧ããã ãããchangelogããåç §ãã ããã
ãããŠããã¡ããããã©ã°ã€ã³ãããŠã³ããŒãããŠãã ããã
æ°ã«å ¥ã£ãŠããã ããŸãããããã²æãåºããŠãã ãã â€ïž