본문 바로가기

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

(34)
(26) Graphql-ruby - 리스트 Lists GraphQL 은 다른 타입들을 아이템으로 포함하는 순서있는 리스트 타입이라는 것을 가지고 있다.필드는 스칼라 값(예를 들면 String)을 리턴하거나 스칼라 값의 리스트(예를 들면 [String], 스트링의 리스트)를 리턴한다.type Spy { # 스파이의 진짜 이름 realName: String! # 스파이의 별칭들 aliases: [String!] } 필드는 다른 타입의 리스트를 리턴할 수 있다.enum PostCategory { SOFTWARE UPHOLSTERY MAGIC_THE_GATHERING } type BlogPost { # 이 포스트가 가지고 있는 0개 이상의 카테고리 categories: [PostCategory!] # 해당 포스트와 연관된 다른 포스트 relatedPos..
(25) Graphql-ruby - 유니언 interfaces 객체가 구현할 수 있는 필드들의 목록unions 동일한 위치에 나타날 수 있는 타입들의 집합(필드는 공유하지 않음) Unions union 타입은 동일한 위치에 나타날 수 있는 타입들의 집합이다.union MediaItem = AudioClip | VideoClip | Image | TextSnippet 이것은 검색 필드에서 사용될 수 있다. 예를 들어searchMedia(term: "puppies") { ... on AudioClip { duration } ... on VideoClip { previewURL resolution } ... on Image { thumbnailURL } ... on TextSnippet { teaserText } }여기서 searchMedia 필드는 ..
(24) Graphql-ruby - 인터페이스 Interfaces 인터페이스란 객체타입에 의해 구현될 수 있는 필드의 집합이다. 인터페이스는 필드를 가지고 있지만 실제로 인스턴스화 되지는 않는다. 대신 객체가 인터페이스를 구현하는데 이때 해당 객체는 인터페이스의 멤버가 된다. 또한 필드는 인터페이스 타입을 리턴할 수도 있다. 이 때 리턴된 객체는 해당 그 인터페이스의 멤버일 수 있다. 예를 들어, Customer (인터페이스) 가 Individual (객체) 또는 a Company (객체) 둘 중 하나라고 보자. interface Customer { name: String! outstandingBalance: Int! } type Company implements Customer { employees: [Individual!]! name: Strin..
(23) Graphql-ruby - input 객체 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 시스템의 일부분으로써 정의되어 ..
(22) Graphql-ruby - enums Enums Enum 타입은 분리된 값들의 집합이다. enum 필드는 반드시 enum 값들 중 하나의 가능한 값을 리턴해야 한다. GraphQL Schema Definition Language(SDL) 에서는 enum은 다음과 같이 표현된다.enum MediaCategory { AUDIO IMAGE TEXT VIDEO } 즉, MediaCategory값은 AUDIO, IMAGE, TEXT, VIDEO 중에 하나이다. 이것은 ActiveRecord enums 과 비슷하다.GraphQL 쿼리에서, enum은 문자열이 아니라 identifier로 씌여진다. 예를 들어search(term: "puppies", mediaType: IMAGE) { ... } (IMAGE 가 따옴표가 없는 것을 보아라.) 그러나 Gr..
(21) Graphql-ruby - 스칼라 Scalars GraphQL 에서 스칼라는 "leaf" 값이다. 몇 개의 내장 스칼라 타입들이 있는데 직접 커스텀 스칼라 타입을 정의하는 것도 가능하다. (Enums 도 leaf 값이다) 내장된 스칼라 값들은 다음과 같다. String, JSON 또는 Ruby 에서의 string 과 같다.Int, JSON 또는 Ruby 에서의 integer 과 같다.Float, JSON 또는 Ruby 에서의 float과 같다.Boolean, JSON 또는 Ruby 에서의 boolean 과 같다 (true 또는 false).ID, 객체의 id를 표현하는 고유한 String 값ISO8601DateTime, ISO 8601-encoded datetime 필드들은 이름으로 각 내장 스칼라 값들을 반환할 수 있다.# String..
(20) Graphql-ruby - 객체 Objects GraphQL 객체타입은 GraphQL API 에서 빵과 버터와 같은 존재이다. 각 객체는 데이터를 보여주는 필드가 있고 이름으로 쿼리할 수 있다. 예를 들어 우리는 User를 다음과 같이 쿼리할 수 있다.user { handle email } 그리고 다음과 같이 값을 돌려받을 수 있다.{ "user" => { "handle" => "rmosolgo", "email" => nil, } } 일반적으로 GraphQL 객체 타입은 User, Product, Comment 과 같이 어플리케이션의 모델에 응답한다. 때때로 객체타입은 GraphQL Schema Definition Language (SDL)를 사용하여 설명된다.type User { email: String handle: String! ..
(19) Graphql-ruby - 쿼리에 before/after hook 호출하기 Instrumentation 각 쿼리에 before/after hook을 호출할 수 있다.쿼리 instrumentation 를 스키마 정의에 추가하면 된다.class MySchema