본문 바로가기

배움의 즐거움/프로그래밍

(34)
(18) Graphql-ruby - tracing Tracing GraphQL::Tracing 은 GraphQL 런타임 이벤트 관찰을 위한 .trace 후크를 제공한다.이를 위해 tracer 은 반드시 구현되어야 한다.class MyCustomTracer def self.trace(key, data) # key & data 를 이용하여 여기에 구현 yield end end .trace 은 다음과 같은 것들과 함께 호출할 수 있다.key: 런타임 동안 발생하는 이벤트data: 이벤트에 관한 메타데이터의 해쉬&block: 이벤트 자신, 이것은 반드시 yield 되어야 하며, 값은 리턴되어야 한다. 모든 쿼리에 대해 tracer를 실행하려면, 스키마에 tracer:추가# 모든 쿼리에 대해 `MyCustomTracer` 실행 class MySchema
(17) Graphql-ruby - 멀티플렉스 Multiplex 일부 클라이언트는 한번에 여러개의 쿼리를 보낼 수도 있을 것이다.(예를 들어, Apollo Client’s query batching) 이러한 쿼리는 Schema#multiplex 를 이용하여 동시에 실행할 수 있다. 멀티플렉스는 자신만의 context,analyzers 그리고 instrumentation을 가질 수 있다. Concurrent Execution 쿼리를 동시에 실행하기 위해서는 를 사용하여 쿼리 옵션을 만들어야 한다. 예를 들어:# 각 쿼리의 context 를 준비 context = { current_user: current_user, } # 쿼리 옵션 준비 queries = [ { query: "query Query1 { someField }", variables: {}..
(16) Graphql-ruby - 타임아웃 Timeout TimeoutMiddleware 를 사용하여 쿼리에 타임아웃을 적용할 수 있다. 예를 들어:class MySchema
(15) Graphql-ruby - 복잡성 & 깊이 Complexity & Depth Prevent complex queries 필드는 "complexity" 값을 가지고 있는데 이는 정의에 의해 설정이 가능하다. 이 값은 상수 또는 proc 이 될 수 있고, 키워드 형태로 정의되거나 block 형태로 정의될 수 있다. 예를 보자.# 상수 complexity: field :top_score, Integer, null: false, complexity: 10 # 동적인 complexity: field :top_scorers, [PlayerType], null: false do argument :limit, Integer, limit: false, default_value: 5 complexity ->(ctx, args, child_complexity) { ..
(14) Graphql-ruby - 쿼리 실행하기 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" => { ... } ..
(13) Graphql-ruby - 루트 타입 Root Types GraphQL 쿼리는 root types 으로 시작한다: query, mutation, 그리고 subscription (실험단계). 스키마에 이름을 동일하게 해서 추가하면 된다.class MySchema
(12) Graphql-ruby - 제한하여 보여주기 Limiting Visibility 때때로 사용자로부터 스키마의 요소를 숨기고 싶을 때가 있을 것이다. 예를 들면feature flagged 된 요소들더 높은 허가를 필요로 하는 요소들 오직 이러한 필드에 접근을 제한하려 한다면, 런타임에서 객체를 체크하기 위해서 field instrumentation 를 사용하는 거나, 쿼리를 실행하기 이전에 체크하기 위해 query analyzers 를 사용하는 것을 고려해볼 수 있다. 만약 필드를 완전히 숨기고 싶다면 아래를 읽어보자. Filtering except: 또는 only: 를 Schema.execute 에 전달하므로써 스키마의 일부분을 숨길 수 있다. 예를 들어:# `except:` 블랙리스트 아이템 제외 filter = PermissionBlacklis..
(11) Graphql-ruby - Class-Based API v1.8.0 ⚠ New Class-Based API ⚠ 여기서는 v1.8.0 새로운 API 에 대해서 알아볼 것이다. Class-based API GraphQL 1.8+ 에서는 스키마를 빌드할 때 Ruby class를 사용할 수 있다. class 스타일과 define 스타일 정의 두 가지를 섞어서 스키마에 사용할 수 있다. 해당 버전의 새로운 특성들의 전반적인 사항들:Rationale & Goals Compatibility & Migration OverviewUsing the upgraderRoadmap API에 대해서 배울 내용:Schema classCommon type configurationsObject classesInterface classesUnion classesEnum classesInput Objec..