Executing Queries
GraphQL::Schema
로 쿼리를 요청한 후 Ruby Hash를 결과로 받을 수 있다. 예를 들어, 문자열로부터 쿼리를 실행하려면,
query_string = "{ ... }"
MySchema.execute(query_string)
# {
# "data" => { ... }
# }
Or, you can execute multiple queries at once:
MySchema.multiplex([
{query: query_string_1},
{query: query_string_2},
{query: query_string_3},
])
# [
# { "data" => { ... } },
# { "data" => { ... } },
# { "data" => { ... } },
# ]
다른 옵션들도 있다:
variables:
$variable
형태로 값 지정 (더보기 query variables)context:
resolve
함수로 전달된 어플리케이션 내 데이터 받음root_value:
객체로 root-levelresolve
함수에 제공됨operation_name:
전해진 문자열에서 named operation 선택document:
이미 parse 된 쿼리를 받음(문자열 형태가 아니라)GraphQL.parse 참고
validate:
false
값이면 해당 쿼리에 대해 유효성검사 건너띔max_depth:,
max_complexity:
schema-level 값 오버라이드
위의 몇몇 옵션들은 아래에 더 자세히 설명되 있고 GraphQL::Query#initialize
를 통해서 더 많은 정보를 볼 수 있다.
Variables
GraphQL은 쿼리 문자열을 파라미터로 표시하기 위해서 query variables 을 제공한다. 쿼리 문자열이 변수를 가지고 있다면, 해당 값을 { String => value }
와 같이 hash pair로 보여줄 수있다. 키 값은 반드시 "$" 를 포함해야 한다.
예를 들어, 쿼리에 변수를 제공하기 위해서:
query_string = "
query getPost($postId: ID!) {
post(id: $postId) {
title
}
}"
variables = { "postId" => "1" }
MySchema.execute(query_string, variables: variables)
만약 변수가 GraphQL::InputObjectType
라면, nested hash 를 제공하면 된다. 예를 들자:
query_string = "
mutation createPost($postParams: PostInput!, $createdById: ID!){
createPost(params: $postParams, createdById: $createdById) {
id
title
createdBy { name }
}
}
"
variables = {
"postParams" => {
"title" => "...",
"body" => "..."
},
"createdById" => "5",
}
MySchema.execute(query_string, variables: variables)
Context
앱에 따라 구체적인 값들을 context 형태로 GraphQL에 제공할 수 있다. 이 값은 다음과 같이 여러 곳에서 사용이 가능하다.
resolve
함수Schema#resolve_type
hook- ID generation & fetching
context 의 일반적인 사용은 현재 사용자나 uth token을 사용할 때이다. context 값을 제공하기 위해서, Schema#execute 에 hash를 전달해보자.
context = {
current_user: session[:current_user],
current_organization: session[:current_organization],
}
MySchema.execute(query_string, context: context)
그리고 난면, 해당 값들에 실행이 진행되는 동안 접근 할 수 있다.
field :post, Post, null: true do
argument :id, ID, required: true
end
def post(id:)
context[:current_user] # => #<User id=123 ... >
# ...
end
context
는 너가 전달한 Hash가 아니라, GraphQL::Query::Context
의 인스턴스이라는걸 명심해야 한다.
Root Value
root_value 를 사용하여 root 객체를 제공할 수 있다. 예를 들면:
current_org = session[:current_organization]
MySchema.execute(query_string, root_value: current_org) # object
That value will be provided to root-level fields, such as mutation fields. For example:
class MutationType < GraphQL::Schema::Object
field :create_post, Post, null: true
def create_post(**args)
object # => #<Organization id=456 ...>
# ...
end
end
GraphQL::Relay::Mutation
필드 또한 객체 형태의 root_value:
를 받는다.
* 해당 글은 번역기 돌리다가 크롬 번역기 말도 안되는 해석에 지친 본인이 나중에 참고할 의도로 대충대충 발로 해석한 것이니 참고용으로만 사용하시길 바랍니다.
* 출처: http://graphql-ruby.org/queries/executing_queries.html
'배움의 즐거움 > 프로그래밍' 카테고리의 다른 글
(16) Graphql-ruby - 타임아웃 (0) | 2019.01.01 |
---|---|
(15) Graphql-ruby - 복잡성 & 깊이 (0) | 2019.01.01 |
(13) Graphql-ruby - 루트 타입 (0) | 2018.12.31 |
(12) Graphql-ruby - 제한하여 보여주기 (0) | 2018.12.31 |
(11) Graphql-ruby - Class-Based API v1.8.0 (0) | 2018.12.31 |