Автоматически создавайте API-интерфейсы GraphQL для ваших баз данных.
Обзор
Я рассказывал о создании REST API за 5 минут и использовании GraphQL для обслуживания моделей машинного обучения в предыдущих статьях. GraphQL от Facebook набирает популярность среди разработчиков. В этой статье давайте рассмотрим платформы с открытым исходным кодом, которые могут помочь нам автоматически генерировать API-интерфейсы GraphQL для баз данных.
Настройка базы данных 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 для извлечения и изменения вашего контента.