Я только что научился создавать сервер GraphlQL с использованием graphql-yoga и prisma-binding на основе учебник HowToGraphQL.
Вопрос: До сих пор единственным способом запроса базы данных было использование веб-страницы Prisma Playground, которая была запущена с помощью команды graphql playground.
Можно ли выполнить тот же запрос из скрипта Node.js? Я столкнулся с клиентом Apollo, но, похоже, он предназначен для использования из внешнего интерфейса, такого как React, Vue, Angular.


Это абсолютно возможно, в конце концов, 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 обычно являются предпочтительным способом, поскольку они обеспечивают большое удобство при взаимодействии с Prisma API. graphql-request - это более общий и легкий подход, в котором вы можете использовать очень простые сценарии.
Поскольку вы используете 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, пока не прочитал ваш вопрос.
Обновлено:
Вот еще один ссылка на сайт, который рассматривает их обоих в перспективе
Спасибо! Как выбрать между использованием
prisma-bindingsилиgraphql-request?