Graphql Directive

@strawberry.type
class DirectiveQuery:
    @strawberry.field(
        description="directive example", deprecation_reason="deprecated use other field"
    )
    def directive_deprecated(self, info) -> str:
        return "result of directive_deprecated"

{
  directiveDeprecated
}

{
  "data": {
    "directiveDeprecated": "result of directive_deprecated"
  }
}

ayxjv5a.jpg

@strawberry.type
class DirectiveQuery:
    @strawberry.field(description="directive skip")
    def directive_skip(self) -> str:
        return "skip"

    @strawberry.field(description="directive include")
    def directive_include(self) -> str:
        return "include"

query ($skip: Boolean!, $include: Boolean!) {  
  directiveSkip @skip(if: $skip)
  directiveInclude @include(if: $include)
}

{"skip": false, "include": true}

{
  "data": {
    "directiveSkip": "skip",
    "directiveInclude": "include"
  }
}

@strawberry.type
class DirectiveQuery:
    @strawberry.field(description="directive uppercase")
    def directive_uppercase(self) -> str:
        return "make uppercase"
 
 
@strawberry.directive(
    locations=[DirectiveLocation.FIELD], description="Make string uppercase"
)
def uppercase(value: str):
    return value.upper()
 
 
schema = strawberry.Schema(
    query=Query,
    mutation=Mutation,
    directives=[uppercase],
)

{ 
  directiveUppercase @uppercase
}

{
  "data": {
    "directiveUppercase": "MAKE UPPERCASE"
  }
}

{ 
  normal: directiveUppercase
  uppercase: directiveUppercase @uppercase
}

{
  "data": {
    "normal": "make uppercase",
    "uppercase": "MAKE UPPERCASE"
  }
}

@strawberry.type
class Person:
    name: str = "Jess"
 
 
@strawberry.type
class DirectiveQuery:
    @strawberry.field
    def person(self) -> Person:
        return Person()

@strawberry.directive(locations=[DirectiveLocation.FIELD])
def replace(value: str, old: str, new: str):
    value = value.replace(old, new)
    return value
 
 
schema = strawberry.Schema(
    query=Query,
    mutation=Mutation,
    directives=[uppercase, replace],
)

{
  person {
    name @replace(old: "J", new: "John")
  }
}

{
  "data": {
    "person": {
      "name": "Johness"
    }
  }
}

  • open/graphql-directive.txt
  • 마지막으로 수정됨: 2021/10/05 02:48
  • 저자 127.0.0.1