Автоматически создавайте API-интерфейсы GraphQL для ваших баз данных.

Обзор

Я рассказывал о создании REST API за 5 минут и использовании GraphQL для обслуживания моделей машинного обучения в предыдущих статьях. GraphQL от Facebook набирает популярность среди разработчиков. В этой статье давайте рассмотрим платформы с открытым исходным кодом, которые могут помочь нам автоматически генерировать API-интерфейсы GraphQL для баз данных.



API CRUD Rest за 5 минут с помощью Flask
Используйте Flask AppBuilder для разработки API CRUD REST.alpha2phi.medium.com





Настройка базы данных PostgreSQL

Давайте настроим базу данных PostgreSQL с данными для демонстрационных целей.

docker-compose

Я собираюсь использовать следующие docker-compose.yml для настройки PostgreSQL и adminer для управления базой данных.

Обратите внимание, что я установил сеть по умолчанию my-network. Все экземпляры Docker должны использовать одну и ту же сеть для связи друг с другом.

Файл docker-compose и файлы SQL можно найти в этом репозитории.

Запустите docker compose up, чтобы создать и запустить экземпляры Docker.

Администратор

Войдите в adminer по адресу http://localhost:8081.

  • Система: PostgreSQL
  • Сервер: pgsql (следуйте имени в docker-compose.yml)
  • Имя пользователя: постгрес
  • Пароль: постгрес
  • База данных: постгрес

После входа в систему вы сможете увидеть таблицы и данные.

Движок Hasura GraphQL

Поддерживаемые базы данных: PostgreSQL, MSSQL Server и MySQL.

Hasura GraphQL Engine обеспечивает мгновенный доступ к вашим данным через GraphQL API в режиме реального времени, поэтому вы можете быстрее создавать и поставлять современные приложения и API.

Экземпляры докера

Давайте используем Docker для настройки экземпляра, работающего под управлением Hasura, в демонстрационных целях.

  • Следуя инструкциям, загрузите docker-compose.yml с помощью wget или curl.
# in a new directory run
wget https://raw.githubusercontent.com/hasura/graphql-engine/stable/install-manifests/docker-compose/docker-compose.yaml
# or run
curl https://raw.githubusercontent.com/hasura/graphql-engine/stable/install-manifests/docker-compose/docker-compose.yaml 
  • Добавьте сеть по умолчанию в файл.
networks: 
  default: 
    name: my-network

Образец docker-compose.yml можно найти в этом репозитории.

  • Запустите экземпляры Docker.
docker-compose up -d
  • Проверьте, запущены ли экземпляры.
docker ps -a

  • Сервер работает на порту 8080. Получите доступ к нему через веб-браузер по адресу http://localhost:8080.

Подключиться к PostgreSQL из Hasura

  • Заполните данные для подключения. Используйте pgsql в качестве имени хоста.

API-интерфейсы GraphQL

  • Для тех таблиц, для которых вы хотите создать API, нажмите кнопку Track. Вы можете настроить отношения между сущностями.

  • Нажмите на вкладку API, и вы сможете использовать GraphiQL Explorer для запуска и проверки сгенерированных API-интерфейсов GraphQL.

Я изучаю только основы. Существует множество других функций, которые вы можете изучить самостоятельно.

Директус

Поддерживаемые базы данных: PostgreSQL, MySQL, SQLite, OracleDB, MariaDB и MS-SQL.

Directus — это API в режиме реального времени и панель управления приложениями для управления содержимым базы данных SQL.

Создать приложение Директус

  • Используйте следующую команду, чтобы создать приложение Directus с именем directus-app. Заполните учетные данные базы данных PostgreSQL.

Примечание. Для хоста базы данных используйте localhost, так как приложение не находится в контейнере.

yarn create directus-project directus-app

  • Запустите приложение, выполнив следующую команду.
npx directus start

  • Получите доступ к приложению по адресу http://localhost:8055. Войдите, используя адрес электронной почты и пароль, которые вы указали при создании приложения.
  • После входа в систему вы сможете увидеть таблицы базы данных.

Настройка моделей данных

  • Перейдите к Data Model, нажмите на таблицу, чтобы создать API.

  • Вы должны увидеть поля и коллекции, настроенные для таблицы.

  • В демонстрационных целях я даю разрешение Read роли Public.

REST API

Чтобы просмотреть customer записей, перейдите к http://localhost:8055/items/customer с помощью веб-браузера.

API-интерфейсы GraphQL

Конечная точка GraphQL доступна по адресу http://localhost:8055/graphql.

На экране ниже я использовал Altair GraphQL Client для запроса конечной точки.

Опять же, я рассказываю только об основах. Есть и другие функции, которые вы можете изучить.

ПостГрафил

Поддерживаемая база данных: PostgreSQL.

PostGraphile обеспечивает мгновенную молниеносную серверную часть GraphQL API для ваших приложений.

Я буду использовать CLI. Выполните следующую команду, чтобы установить его

npm install -g postgraphile

Выполните следующую команду, чтобы подключиться к базе данных PostgresSQL.

postgraphile -c 'postgres://postgres:postgres@localhost/postgres' -s public -a -j

где -c — строка подключения (по умолчанию postgres:///), -s — имя схемы (по умолчанию «общедоступная»), -a включает поддержку ретрансляции, а -j включает динамический JSON.

Давайте получим доступ к графическому интерфейсу GraphiQL.

  • API GraphQL: http://localhost:5000/graphql
  • GraphiQL GUI/IDE: http://localhost:5000/graphiql (РЕКОМЕНДАЦИЯ: добавить ‘ — enhance-graphiql’)

Вы также можете использовать Режим библиотеки для запуска PostGraphile.

const express = require("express");
const { postgraphile } = require("postgraphile");

const app = express();

app.use(
  postgraphile(
    process.env.DATABASE_URL || "postgres://postgres:postgres@host:5432/postgres",
    "public",
    {
      watchPg: true,
      graphiql: true,
      enhanceGraphiql: true,
    }
  )
);

app.listen(process.env.PORT || 3000);

Другие проекты

Другие проекты с открытым исходным кодом, которые вы, возможно, захотите изучить.

Призма и GraphQL

Prisma — ORM следующего поколения с открытым исходным кодом. Он состоит из следующих частей:

  • Клиент Prisma: автоматически генерируемый и типобезопасный конструктор запросов для Node.js и TypeScript.
  • Prisma Migrate: система миграции
  • Prisma Studio: графический интерфейс для просмотра и редактирования данных в базе данных.

Вы можете использовать Prisma вместе с другими библиотеками GraphQL для своих баз данных.

Страпи

Strapi — это безголовая CMS с открытым исходным кодом для создания мощных API.

По умолчанию Strapi создайте конечные точки REST для каждого из ваших типов контента. С помощью плагина GraphQL вы сможете добавить конечную точку GraphQL для извлечения и изменения вашего контента.