Разница между инструментами mergeSchemas и makeExecutableSchema - PullRequest
1 голос
/ 29 марта 2019

Поэтому я задаю этот вопрос потому, что могу заставить оба из них вернуть рабочий результат, просто заменив один или другой. Итак, какой из них лучше использовать и почему?

Каковы их цели в отношении схем?

import { mergeSchemas } from 'graphql-tools'

import bookSchema from './book/schema/book.gql'
import bookResolver from './book/resolvers/book'

export const schema = mergeSchemas({
    schemas: [bookSchema],
    resolvers: [bookResolver]
})
import { makeExecutableSchema } from 'graphql-tools'

import bookSchema from './book/schema/book.gql'
import bookResolver from './book/resolvers/book'

export const schema = makeExecutableSchema({
    typeDefs: [bookSchema],
    resolvers: [bookResolver]
})

Оба эти примера работают и возвращают желаемый результат. Я считаю, что правильный вариант для использования здесь - makeExecutableSchema, но не уверен, почему первый будет работать?


EDIT Просто было бы неплохо иметь типы / резолверы:

* 1016 определения типов *

type Query {
    book(id: String!): Book
    bookList: [Book]
}

type Book {
    id: String
    name: String
    genre: String
}

Resolvers

export default {
    Query: {
        book: () => {
            return {
                id: `1`,
                name: `name`,
                genre: `scary`
            }
        },
        bookList: () => {
            return [
                { id: `1`, name: `name`, genre: `scary` },
                { id: `2`, name: `name`, genre: `scary` }
            ]
        }
    }
}

Запрос Run

query {
  bookList{
    id
    name
    genre
  }
}

Результат

{
  "data": {
    "bookList": [
      {
        "id": "1",
        "name": "name",
        "genre": "scary"
      },
      {
        "id": "2",
        "name": "name",
        "genre": "scary"
      }
    ]
  }
}

1 Ответ

1 голос
/ 29 марта 2019

mergeSchemas в первую очередь предназначен для сшивания схемы , , а не кода объединения для одной схемы, которую вы решили разделить для организационных целей.

Сшивание схемы чаще всего выполняется, когда у вас есть несколько микросервисов, каждый из которых предоставляет конечную точку GraphQL.Вы можете извлечь схемы из каждой конечной точки , а затем использовать mergeSchemas, чтобы создать один сервис GraphQL, который при необходимости делегирует запросы каждому микросервису.Технически сшивание схемы можно также использовать для расширения некоторого существующего API или для создания нескольких сервисов из базовой схемы, хотя я полагаю, что эти случаи использования встречаются реже.следует придерживаться makeExecutableSchema.makeExecutableSchema - это то, что фактически позволяет вам использовать язык определения схемы для генерации вашей схемы.mergeSchemas является относительно новым API и имеет ряд открытых вопросов , особенно в отношении того, как обрабатываются директивы.Если вам не нужна функциональность, предоставляемая mergeSchemas, а именно, вы фактически не объединяете отдельные схемы, не используйте ее.

...