Как отправить запрос GraphQL с Node.js в Prisma

Я только что научился создавать сервер GraphlQL с использованием graphql-yoga и prisma-binding на основе учебник HowToGraphQL.

Вопрос: До сих пор единственным способом запроса базы данных было использование веб-страницы Prisma Playground, которая была запущена с помощью команды graphql playground.

Можно ли выполнить тот же запрос из скрипта Node.js? Я столкнулся с клиентом Apollo, но, похоже, он предназначен для использования из внешнего интерфейса, такого как React, Vue, Angular.

Пользовательский скаляр GraphQL
Пользовательский скаляр GraphQL
Листовые узлы системы типов GraphQL называются скалярами. Достигнув скалярного типа, невозможно спуститься дальше по иерархии типов. Скалярный тип...
Что такое Apollo Client и зачем он нужен?
Что такое Apollo Client и зачем он нужен?
Apollo Client - это полнофункциональный клиент GraphQL для JavaScript-приложений, который упрощает получение, управление и обновление данных в...
2
0
1 171
2
Перейти к ответу Данный вопрос помечен как решенный

Ответы 2

Ответ принят как подходящий

Это абсолютно возможно, в конце концов, Prisma API - это просто HTTP, где вы помещаете запрос в тело запроса POST.

Следовательно, вы также можете использовать fetch или prisma-binding внутри вашего Node-скрипта.

Ознакомьтесь с этим руководством, чтобы узнать больше: https://www.prisma.io/docs/tutorials/access-prisma-from-scripts/access-prisma-from-a-node-script-using-prisma-bindings-vbadiyyee9

Это также может быть полезно, поскольку объясняет, как использовать fetch для запроса API: https://github.com/nikolasburk/gse/tree/master/3-Use-Prisma-GraphQL-API-from-Code

Вот как выглядит использование fetch:

const fetch = require('node-fetch')

const endpoint = '__YOUR_PRISMA_ENDPOINT__'

const query = `
query {
  users {
    id
    name
    posts {
      id
      title
    }
  }
}
`

fetch(endpoint, {
  method: 'POST',
  headers: { 'Content-Type': 'application/json' },
  body: JSON.stringify({ query: query })
})
  .then(response => response.json())
  .then(result => console.info(JSON.stringify(result)))

Если вы хотите использовать легкую оболочку вокруг fetch, которая избавляет вас от написания шаблонов, обязательно ознакомьтесь с graphql-request.

А вот как использовать привязки Prisma:

const { Prisma } = require('prisma-binding')

const prisma = new Prisma({
  typeDefs: 'prisma.graphql',
  endpoint: '__YOUR_PRISMA_ENDPOINT__'
})

// send `users` query
prisma.query.users({}, `{ id name }`)
  .then(users => console.info(users))
  .then(() =>
    // send `createUser` mutation
    prisma.mutation.createUser(
      {
        data: { name: `Sarah` },
      },
      `{ id name }`,
    ),
  )
  .then(newUser => {
    console.info(newUser)
    return newUser
  })
  .then(newUser =>
    // send `user` query
    prisma.query.user(
      {
        where: { id: newUser.id },
      },
      `{ name }`,
    ),
  )
  .then(user => console.info(user))

Спасибо! Как выбрать между использованием prisma-bindings или graphql-request?

Nyxynyx 25.07.2018 18:37

Я думаю, что привязки Prisma обычно являются предпочтительным способом, поскольку они обеспечивают большое удобство при взаимодействии с Prisma API. graphql-request - это более общий и легкий подход, в котором вы можете использовать очень простые сценарии.

nburk 26.07.2018 08:10

Поскольку вы используете Prisma и хотите запросить его из сценария NodeJS, я думаю, вы могли упустить возможность создания клиента из ваших определений Prisma.

Он заботится об обработке методов create / read / update / delete / upsert в зависимости от вашей модели данных. Кроме того, вы можете меньше беспокоиться о синхронизации ваших моделей и запросов / мутаций, поскольку они генерируются с использованием Prisma CLI (prisma generate).

Я считаю, что это позволяет сэкономить много времени на кодирование по сравнению с использованием необработанных запросов GrahQL, которые я сохраняю для более сложных запросов / мутаций.

Проверьте их официальная документация для более подробной информации.

Также обратите внимание, что использование клиента Prisma является рекомендуемым способом использования Prisma в репозитории призматический переплет, если:

Unless you explicitly want to use schema delegation

о котором я не могу вам много рассказать.

Я не знал о пакете prisma-binding, пока не прочитал ваш вопрос.

Обновлено:

Вот еще один ссылка на сайт, который рассматривает их обоих в перспективе

Другие вопросы по теме