반응형
Input Objects
input 객체타입은 GraphQL 수행을 위한 복잡한 input들이다. 이 것은 mutation이나 search 필드와 같이 복잡한 구조의 인풋을 필요로 할 때 좋다. GraphQL 요청에서는 이렇게 사용할 수 있다.
mutation { [ 여기서부터 input 객체 .............................]
createPost(attributes: { title: "Hello World", fullText: "This is my first post", categories: [GENERAL] }) {
}
}
Ruby hash 처럼, input 객체는 키와 값으로 이루어져 있다. 그러나 hash와 달리, 이 키와 값 타입은 GraphQL 시스템의 일부분으로써 정의되어 있어야 한다. 예를 들어, 여기 input 객체가 있다고 보자.
input PostAttributes {
title: String!
fullText: String!
categories: [PostCategory!]
}
input 객체는 3가지 가능한 키를 가지고 있다:
title
은 필수이다(!
가 표시되어 있으므로), 그리고 반드시String
fullText
또한 필수인 문자열categories
은 선택적이다. 그리고 만약에 존재한다면PostCategory
값의 리스트를 반드시 가지고 있어야 한다.
Defining Input Object Types
input 객체 타입은 GraphQL::Schema::InputObject
를 extend 하며, argument(...)
메서드로 정의할 수 있다.
# app/graphql/types/base_input_object.rb
# 베이스 클래스 추가
class Types::BaseInputObject < GraphQL::Schema::InputObject
end
class Types::PostAttributes < Types::BaseInputObject
description "Attributes for creating or updating a blog post"
argument :title, String, "Header for the post", required: true
argument :full_text, String, "Full body of the post", required: true
argument :categories, [Types::PostCategory], required: false
end
argument(...)
메서드에 관한 더 자세한 설명은argument section of the Objects guide 에서 볼 수 있다.
Using Input Objects
input 객체는 정의 클래스의 인스턴스로서 필드 메서드에 전달 될 수 있다. 즉, 필드 메서드 안에서 다음과 같은 방법으로 해당 객체의 모든 키값에 접근 가능하다.
- 이름에 해당하는 메서드 호출(언더스코어 형태로)
[]
를 이용하여 캐멀케이스 된 이름으로 argument 호출(이전 버전의 GraphQL-Ruby 와의 호환성을 위해서이다.)
mutation {
createPost(attributes: { title: "Hello World", fullText: "This is my first post", categories: [GENERAL] }) {
}
}
# 이 필드는 `attributes` 라고 불리는 argument를 받는다
# 해당 argument는`PostAttributes`의 인스턴스이다
field :create_post, Types::Post, null: false do
argument :attributes, Types::PostAttributes, required: true
end
def create_post(attributes:)
puts attributes.class.name
# => "Types::PostAttributes"
# 언더스코어를 사용하여 메서드의 값에 접근할 수 있다.
puts attributes.full_text
# => "This is my first post"
# 또는 hash 스타일을 사용할 수 있다. 이 경우는 camelCase로(이전 버전과의 호환성때문에):
puts attributes[:fullText]
# => "This is my first post"
end
Customizing Input Objects
커스터마이징을 위해 input 객체 클래스에 메서드를 추가하거나 오버라이드 할 수 있다. 다음과 같이 두 가지 인스턴스 변수가 기본적으로 있다.
@arguments
:GraphQL::Query::Arguments
의 인스턴스@context
:GraphQL::Query::Contex
너가 클래스에 정의한 추가적인 메서드들은 위와 같이 필드를 resolve 하는데 사용할 수 있다.
* 해당 글은 번역기 돌리다가 크롬 번역기 말도 안되는 해석에 지친 본인이 나중에 참고할 의도로 대충대충 발로 해석한 것이니 참고용으로만 사용하시길 바랍니다.
* 출처: http://graphql-ruby.org/type_definitions/input_objects.html
반응형
'배움의 즐거움 > 프로그래밍' 카테고리의 다른 글
(25) Graphql-ruby - 유니언 (0) | 2019.01.01 |
---|---|
(24) Graphql-ruby - 인터페이스 (0) | 2019.01.01 |
(22) Graphql-ruby - enums (0) | 2019.01.01 |
(21) Graphql-ruby - 스칼라 (0) | 2019.01.01 |
(20) Graphql-ruby - 객체 (0) | 2019.01.01 |