GraphQL - Пример
В этой главе мы создадим простой API, который возвращает приветственное сообщение HelloWorld и будет обращаться к нему с помощью GraphiQL.
пример
Этот пример основан на сервере NodeJS, Express и Apollo. Мы научимся соединять все концепции вместе со следующими шагами -
Шаг 1 - Настройка Express
ExpressJS - это платформа веб-приложений, которая помогает создавать веб-сайты и веб-приложения. В этом примере мы создадим GraphQL API поверх платформы Express.
Следующим шагом будет создание папки hello-world-serverи перейдите в ту же папку из терминала. Добавьте package.json и дайте имя пакету. Поскольку этот пакет используется только для внутреннего использования, мы можем объявить его частным.
{
"name":"hello-world-server",
"private":true
}
Установите зависимости для сервера Express, как показано ниже -
C:\Users\Admin\hello-world-server>npm install express body-parser cors
body-parser - это промежуточный пакет, который помогает Express эффективно обрабатывать запросы HTTP Post. cors - еще один промежуточный пакет, который обрабатывает совместное использование ресурсов из разных источников.
Создать server.js файл в папке проекта и введите в нем следующее -
const bodyParser = require('body-parser')
const cors = require('cors')
const express = require('express')
const port = process.env.PORT|| 9000
const app = express()
//register middleware
app.use(bodyParser.json() , cors())
app.listen(port, () => console.log(`server is up and running at ${port}`)
Чтобы проверить, запущен ли сервер Express, выполните следующий код в окне терминала -
C:\Users\Admin\hello-world-server>node server.js
Следующий вывод отображается в консоли сервера. Это показывает, что экспресс-сервер работает на порту 9000.
server is up and running at 9000
Если вы откроете браузер и наберете http://localhost:9000, вы получите следующий экран -
Чтобы остановить сервер, нажмите Ctrl + C.
Шаг 2 - Установите GraphQL и Apollo Server
Теперь, когда Express настроен, следующим шагом будет загрузка следующих зависимостей GraphQL:
- graphql
- graphql-tools
- apollo-server-express@1
Мы будем использовать Apollo server v1.0, так как это стабильная версия. Введите следующие команды для установки этих зависимостей -
C:\Users\Admin\hello-world-server>npm install graphql graphql-tools apollo-server-express@1
Мы можем проверить, успешно ли установлены эти зависимости, проверив package.json файл, который мы создали ранее.
{
"name": "hello-world-server",
"private": true,
"dependencies": {
"apollo-server-express": "^1.4.0",
"body-parser": "^1.18.3",
"cors": "^2.8.4",
"express": "^4.16.3",
"graphql": "^0.13.2",
"graphql-tools": "^3.1.1"
}
}
Шаг 3 - Определите схему
Схема GraphQL определяет, какой тип объекта может быть получен из службы и какие поля у него есть. Схема может быть определена с помощьюGraphQL Schema Definition Language. Теперь добавьте следующий фрагмент кода вserver.js файл -
// Adding Type Definitions
const typeDefinition = `
type Query {
greeting: String
}
Здесь запрос содержит атрибут приветствия, который возвращает строковое значение.
Шаг 4 - Создайте резольвер
Первым шагом в создании распознавателя является добавление кода для обработки поля запроса приветствия. Это указано вresolver. Структура функции преобразователя должна соответствовать схеме. Добавьте следующий фрагмент кода вserver.js файл.
// Adding resolver
const resolverObject = {
Query : {
greeting: () => 'Hello GraphQL From TutorialsPoint !!'
}
}
Второй шаг - связать схему и преобразователь с помощью makeExecutableSchema. Эта функция предопределена в модуле graphql-tools. Добавьте следующий фрагмент кода в server.js файл.
const {makeExecutableSchema} = require('graphql-tools')
const schema = makeExecutableSchema({typeDefs:typeDefinition, resolvers:resolverObject})
Шаг 5 - Определите маршруты для получения данных из приложения ReactJS / GraphiQL
Добавьте следующий фрагмент кода в server.js файл -
const {graphqlExpress, graphiqlExpress} = require('apollo-server-express')
//create routes for graphql and graphiql
app.use('/graphql',graphqlExpress({schema}))
app.use('/graphiql',graphiqlExpress({endpointURL:'/graphql'}))
Функция graphqlExpress помогает зарегистрировать маршрутhttp://localhost:9000/graphql. Приложение ReactJS может использовать эту конечную точку для запроса данных. Точно так же функция graphqliExpress помогает зарегистрировать маршрутhttp://localhost:9000/graphiql. Это будет использоваться клиентом браузера GraphiQL для тестирования API.
Полный код server.js приведен ниже -
const bodyParser = require('body-parser')
const cors = require('cors')
const express = require('express')
const port = process.env.PORT||9000
const app = express()
app.use(bodyParser.json() , cors())
const typeDefinition = `
type Query {
greeting: String
}`
const resolverObject = {
Query : {
greeting: () => 'Hello GraphQL From TutorialsPoint !!'
}
}
const {makeExecutableSchema} = require('graphql-tools')
const schema = makeExecutableSchema({typeDefs:typeDefinition, resolvers:resolverObject})
const {graphqlExpress,graphiqlExpress} = require('apollo-server-express')
app.use('/graphql',graphqlExpress({schema}))
app.use('/graphiql',graphiqlExpress({endpointURL:'/graphql'}))
app.listen(port, () => console.log(`server is up and running ${port}`))
Шаг 6 - Запустите приложение
Выполнить server.js используя Node.js следующим образом -
C:\Users\Admin\hello-world-server>node server.js
Шаг 7 - Протестируйте GraphQL API
Откройте браузер и введите http://localhost:9000/graphiql. На вкладке запроса GraphiQL введите следующее -
{
greeting
}
Ответ сервера приведен ниже -
{
"data": {
"greeting": "Hello GraphQL From TutorialsPoint !!"
}
}
Следующее изображение иллюстрирует ответ -
Note - Убедитесь, что используется Apollo Server Version 1.0.