Итиан Сюй, архитектор решений

История решения

По своей сути GraphQL предоставляет синтаксис, описывающий, как запрашивать данные (называемый схемой). GraphQL не зависит от базы данных и работает, создавая единую конечную точку, отвечающую за прием запросов, вместо того, чтобы полагаться на подход REST API, предусматривающий наличие отдельных конечных точек для каждой службы. Одним из основных преимуществ является то, что клиенты имеют возможность диктовать, что именно им нужно от сервера, и получать эти данные предсказуемым образом. И есть перевыборка для GraphQL; мобильный клиент обычно перегружает данные, когда есть такой же API, что и веб-клиент с RESTful API. С GraphQL мобильный клиент может выбрать другой набор полей, поэтому он может получать только ту информацию, которая необходима для того, что отображается на экране.

В этом руководстве мы покажем вам, как перенести локальный сервер GraphQL на сервер Alibaba Cloud Elastic Compute Service (ECS) с помощью решения, которое использовал один из наших клиентов.

Введение GraphQL

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

Служба GraphQL создается путем определения типов и полей этих типов, а затем предоставления функций для каждого поля каждого типа. Например, служба GraphQL, которая сообщает нам, кто вошедший в систему пользователь (я), а также имя этого пользователя, может выглядеть примерно так:

Наряду с функциями для каждого поля каждого типа:

После запуска службы GraphQL (обычно по URL-адресу веб-службы) ей можно отправлять запросы GraphQL для проверки и выполнения. Полученный запрос сначала проверяется, чтобы убедиться, что он относится только к определенным типам и полям, а затем запускает предоставленные функции для получения результата.

Например запрос:

Создайте результат JSON:

http://localhost:3000/?spm=a2c41.12662902.0.0.49196ca0A4urWE

Процесс решения

1. Создайте экземпляр ECS (с общедоступным IP-адресом и группой безопасности: Http 80/порт 3000 открыт)
2. Войдите в экземпляр ECS/подготовьте среду:

  • sudo apt установить nodejs
  • sudo apt установить npm

3. Создайте локальный каталог и начните настройку сервера приложений. Предлагается установить экспресс-сервер и хост для Graphql.

  • компакт-диск / дом
  • mkdir graphql-сервер-турториал
  • cd graphql-server-turtorial
  • npm установить экспресс — сохранить
  • cd node_modules: тогда мы увидим, что он автоматически устанавливает все зависимости.

Будет легко использовать Express.js в качестве основы для создания сервера NodeJs API. Сначала нам нужно добавить несколько маршрутов и дескрипторов маршрутов.

  • сервер mkdir
  • сенсорный сервер/server.js
  • в Server.js:
  • Const express = require('express'); const app = express(); app.get('/', (req, res) => { res.status(200).send({ message: 'connection to api server' }); }); app.listen(3000, () => { console.log('API server listen on port 3000'); });
  • затем запустите Express Server: node server/server.js
  • наконец сервер curl: curl http://localhost:3000/graph?spm=a2c41.12662902.0.0.49196ca0A4urWE

4. Установите пакет Graphql на экспресс-сервер:

  • npm install graphql express-graphql — сохранить

5. Добавьте graphql в промежуточное ПО сервера:

  • внутри server.js:
  • Const graphHttp = require ('express-graphql'); app.use( '/graphql', graphqlHTTP({ schema: GraphQLSchema, graphiql: true }) );

Чтобы визуализировать веб-интерфейс GraphQL, установите graphiql:true

6. Создайте схему QraphQL:

  • схема mkdir
  • сенсорная схема/schema.js
  • Внутри в schema.js
  • const GraphQL = require('graphql'); const schema = new GraphQL.GraphQLSchema({ query: {}, mutation: {} }); exports.default = schema;
  • В server.js нам также нужно импортировать только что созданную схему.
  • Const GraphQLSchema = require ('./schema/schema').default;

7. Добавьте содержимое запроса:

  • В schema.js:
  • const schema = new GraphQL.GraphQLSchema( { query: new GraphQL.GraphQLObjectType({ name: 'Query', fields: () => ({ user: { type: User, resolve(arg) { return { name: 'Whien', age: 18 }; } } }) }) }); const User = new GraphQL.GraphQLObjectType({ name: 'User', fields: () => ({ name: { type: GraphQL.GraphQLString }, age: { type: GraphQL.GraphQLInt } }) });

1) GraphQLSchema — это начальная точка schema.js.
2) Запрос: это конечная точка запроса API.
3) Имя: это имя поля.
4) Поля: Это функция для поиска содержимого.
5) Тип: это символьный тип.
6) Решение: верните результат в Graphql для проверки,
Backend Database завершит результаты и отправит их в graphql для обработки.

8. Тестирование:

Конечный результат

Ссылка: https://www.alibabacloud.com/blog/how-to-install-express-graphql-server-on-ecs_594555?spm=a2c41.12662902.0.0