GraphQL 학습 - 실행

2254 단어
GraphQL 질의가 검증되면 GraphQL 서버에서 수행됩니다.
  • 하나의 예
  • type Query {
      human(id: ID!): Human
    }
    
    type Human {
      name: String
      appearsIn: [Episode]
      starships: [Starship]
    }
    
    enum Episode {
      NEWHOPE
      EMPIRE
      JEDI
    }
    
    type Starship {
      name: String
    }
    
    {
      human(id: 1002) {
        name
        appearsIn
        starships {
          name
        }
      }
    }
    
    {
      "data": {
        "human": {
          "name": "Han Solo",
          "appearsIn": [
            "NEWHOPE",
            "EMPIRE",
            "JEDI"
          ],
          "starships": [
            {
              "name": "Millenium Falcon"
            },
            {
              "name": "Imperial shuttle"
            }
          ]
        }
      }
    }
    
  • GraphQL 작업 원리: GraphQL 조회의 모든 필드는 하위 형식의 부모 형식 함수나 방법으로 간주되며, 모든 형식의 필드마다 Resolver 함수가 지원됩니다. 이 함수는 GraphQL 서버 개발자가 제공하며, 한 필드가 실행될 때 해당하는 Resolver가 호출되어 다음 값을 생성합니다.필드에 측정 값이 발생하면 실행이 완료되고, 대상이 발생하면 이 조회는 해당 대상에 대응하는 해상도를 계속 실행합니다. 측정 값을 되돌려 줄 수 있습니다.

  • 루트 필드 & 해상도

  • GraphQL Service Application Tier는 GraphQL API에 들어갈 수 있는 모든 입구를 나타내는 유형이 있어야 합니다Root/Query유형
  • 상기 예에서 human 필드를 조회하여 매개 변수 id를 수신하면 서버의 해상도는 다음과 같을 수 있습니다
  • Query: {
      human(obj, args, context) {
        return context.db.loadHumanByID(args.id).then(
          userData => new Human(userData)
        )
      }
    }
    
  • 해석기 함수는 3개의 매개변수를 수신합니다.
  • obj 상위 대상, 필드가 루트 노드 조회를 입력하면 일반적으로 사용되지 않습니다
  • args는 GraphQL 질의에 전송된 매개변수
  • 를 제공합니다.
  • context는 모든 해상도에 제공되고 중요한 상하문 정보를 가지고 있다. 예를 들어 현재 로그인한 사용자, 데이터베이스 접근 대상

  • 비동기 해상도

    human(obj, args, context) {
        return context.db.loadHumanByID(args.id).then(
          userData => new Human(userData)
        )
      }
    
  • context는 데이터베이스 접근 대상을 제공하고 데이터베이스 접근 방법을 호출하여 Promise를 되돌려줍니다. 리셋에서 새로운 Human 대상을 실례화합니다
  • 실행 중 비동기식 작업이 완료되지 않으면 GraphQL이 계속 대기하므로 비동기식 처리 최적화에 주목해야 함
  • 중요하지 않은 해상도


    생성된 Human의 경우 GraphQL이 계속 반복적으로 수행됩니다.
    Human: {
      name(obj, args, context) {
        return obj.name
      }
    }
    
  • name 필드, 상위 콜백에서 생성된 new Human 대상의 name 속성을 되돌려줍니다
  • 좋은 웹페이지 즐겨찾기