NEW! Новый релиз 12.0.0 уже доступен! Подробности в Центре заботы

dataspace-ce

1
22 дня назад
22 дня назад
22 дня назад
22 дня назад
22 дня назад
22 дня назад
22 дня назад
22 дня назад
22 дня назад
22 дня назад
22 дня назад
22 дня назад
22 дня назад
месяц назад
22 дня назад
22 дня назад
22 дня назад
22 дня назад
README.md

Platform V DataSpace Community Edition

Platform V DataSpace Community Edition – это программный компонент, который помогает ускорить создание бизнес-приложений и уменьшить затраты на их разработку.

Ключевые возможности продукта:

  • Быстрое создание решения для работы с данными на основе модели предметной области
  • Гибкий поиск и манипулирование данными (создание, изменение, удаление) с помощью языка запросов GraphQL

Системные требования:

  • Поддерживаемые платформы: x86, x64
  • Поддерживаемые операционные системы: Linux, Windows, Mac OS
  • Минимальная конфигурация аппаратного обеспечения: 1 CPU, 256Mb ОЗУ
  • Необходимые программные компоненты: Open JDK 17 и выше, Maven, Git
  • Базы данных: PostgreSQL 9 и выше развернутый на внешнем сервере или локально в Docker-контейнере

Установка и подготовка к запуску

Предварительная настройка

  • Скачать репозиторий проекта:
git clone https://gitverse.ru/sbertech/dataspace-ce.git
  • Собрать проект

    Сборка проекта возможна в двух вариантах: с тестированием и без тестирования.

    Для упрощения процесса знакомства имеется возможность выполнить сборку без тестирования. Для этого в директории проекта выполните следующую команду с использованием Maven:

mvn -Dmaven.test.skip=true clean install

Для сборки проекта с тестированием обратитесь к разделу "Сборка проекта с тестами" в руководстве Администратора

  • Настроить параметры подключения к базе данных в файле context-child.properties. В варианте базы данных в виде Docker-контейнера запустите контейнер командой:
docker run --name dspc-pg-16.6 -p 5432:5432 -e POSTGRES_USER=dspc -e POSTGRES_PASSWORD=dspcpwd -e POSTGRES_DB=dspcdb -d postgres:16.6

Сборка модели

  • Для подготовки модели данных выполните команду:
java -jar dataspace-legacy/model-release/target/model-release-DEV-SNAPSHOT-runnable.jar model-directory=files/resources/src-model run-liquibase=true target-directory=files/resources/build-model

В результате выполнения данной команды:

  • в каталоге files/resources/build-model будут созданы файлы context-child.properties и pdm.xml, а также опциональные файлы безопасности: graphql-operations.json, jwks.json, при наличии их в исходной директории
  • в базе данных будут созданы таблицы в соответствии с моделью данных

Запуск приложения

Для запуска приложения выполните команду:

java -jar dataspace-app/target/dataspace-app-DEV-SNAPSHOT.jar --dataspace.app.pathConfigDirectory=files/resources/build-model/ --dataspace.app.singleMode=true --dataspace.app.pdmZipped=false

После успешного запуска список загруженных моделей в виде JSON-документа можно увидеть по адресу: http://localhost:8080/actuator/models

При этом раздел endpoints содержит адреса, по которым можно отправлять GraphQL-запросы от клиентов (graphql), а также адрес web-интерфейса для работы с GraphQL (graphiql).

"graphql" : "/models/1/graphql",
"graphiql" : "/graphiql?path=/models/1/graphql"

Также приложение позволяет выполнять GraphQL-запросы в удобном web-редакторе: http://localhost:8080/graphiql?path=/models/1/graphql

По умолчанию в приложении загружается модель с примером сервиса "Медицинская клиника: запись на прием"

При необходимости загрузки своей модели, файл с ее описанием необходимо разместить в каталоге files/resources/src-model, имя файла - model.xml. Более подробную информацию о структуре и правилах описания модели можно найти в Руководстве по ведению модели (model-guide.md)

Выполнение GraphQL-запросов на примере модели "Медицинская клиника: запись на прием"

Для быстрого ознакомления с GraphQL перейдите в Web-редактор http://localhost:8080/graphiql?path=/models/1/graphql

В раздел Variables укажите значения атрибутов для запроса на создание сущности:

{
"input": {
"name": "Городская поликлиника №1",
"address": {
"city": "Москва",
"street": "ул. Ленина",
"flatNo": "10"
}
}
}

Затем выполните GraphQL-запрос createClinicMutation через Web-редактор:

# Создание клиники
mutation createClinicMutation($input: _CreateClinicInput!) {
packet {
createClinic(input: $input) {
id
name
address {
city
street
flatNo
}
}
}
}

Для просмотра списка клиник выполните запрос searchClinicsQuery:

# Вывод списка клиник
query searchClinicsQuery {
searchClinic {
elems {
id
name
address {
city
}
}
}
}

По умолчанию в демо-примере отключен функционал разграничения прав доступа. Функционал разграничения прав доступа (далее Security) способен ограничивать доступ к данным на основе разрешений (permissions). Для его включения необходимо раскомментировать в файле context-child.properties параметр, определяющий правила описания логики разрешений (permissions):

dataspace.security.graphql.permissions.source=file

После этого необходимо заново собрать модель и перезапустить приложение

Для выполнения запросов в режиме Security через Web-редактор необходимо добавить токен JWT (JSON Web Token)в раздел Headers:

{
"Authorization": "Bearer eyJraWQiOiJxdWlja1N0YXJ0IiwidHlwIjoiSldUIiwiYWxnIjoiUlMyNTYifQ.eyJhdWQiOlsiYXVkMSIsImF1ZDIiLCJhdWQzIl0sInN1YiI6InF1aWNrU3RhcnRVc2VyIiwiY2l0eUVuZyI6Ik1vc2NvdyIsImNpdHkiOiLQnNC-0YHQutCy0LAiLCJyb2xlcyI6WyJhZG1pbmlzdHJhdG9yIiwibWFuYWdlciJdLCJpc3MiOiJxdWlja1N0YXJ0R3VpZGUiLCJleHAiOjQ4OTA4NzgxNjd9.Zbs45SeJKPb2gK-lsSri4PNTgCth0A1OE7IS4HRV8o4LXtc0PkmB3uAC7tgHwo2MfAH2bHvMsfPYTFoxsIK474ZVS-58-6MUDX9gMUQSAxtfnuDRmFoERk9VfvbUV44taFbZQ0FLGmZYaotjqe4PFwAUMC9BJ8w6EclJ6bb4E2o"
}

В присутствующем в заголовке JWT содержатся ограничения:

  • получение только клиники в "г.Москва"

jwt.png

Создайте дополнительную клинику в другом населенном пункте сменив значение Variables:

{ "input": { "name": "Городская поликлиника №1", "address": { "city": "Торжок", "street": "ул. Ленина", "flatNo": "23" } } }

и выполнив затем запрос:

mutation createClinicMutation($input: _CreateClinicInput!) { packet { createClinic(input: $input) { id name address { city street flatNo } } } }

Вновь запросим список доступных нам клиник:

query searchClinicsQuery { searchClinic { elems { id name address { city } } } }

Согласно функционалу Security в ответе по-прежнему будет присутствовать только клиника в г.Москва

Чтобы узнать больше о возможностях Security, ознакомьтесь с документацией по Security

Взаимодействие с GraphQL без UI:

curl -X POST \
-H "Authorization: Bearer eyJraWQiOiJxdWlja1N0YXJ0IiwidHlwIjoiSldUIiwiYWxnIjoiUlMyNTYifQ.eyJhdWQiOlsiYXVkMSIsImF1ZDIiLCJhdWQzIl0sInN1YiI6InF1aWNrU3RhcnRVc2VyIiwiY2l0eUVuZyI6Ik1vc2NvdyIsImNpdHkiOiLQnNC-0YHQutCy0LAiLCJyb2xlcyI6WyJhZG1pbmlzdHJhdG9yIiwibWFuYWdlciJdLCJpc3MiOiJxdWlja1N0YXJ0R3VpZGUiLCJleHAiOjQ4OTA4NzgxNjd9.Zbs45SeJKPb2gK-lsSri4PNTgCth0A1OE7IS4HRV8o4LXtc0PkmB3uAC7tgHwo2MfAH2bHvMsfPYTFoxsIK474ZVS-58-6MUDX9gMUQSAxtfnuDRmFoERk9VfvbUV44taFbZQ0FLGmZYaotjqe4PFwAUMC9BJ8w6EclJ6bb4E2o" \
-H 'Content-Type: application/json' \
-d '{"query": "query searchClinicsQuery { searchClinic { elems { id name address { city } } } }"}' \
http://localhost:8080/models/1/graphql

получим ответ:

{"data":{"searchClinic":{"elems":[{"id":"ad44313c-2308-45a4-ae4f-6596fd0d1cdb","name":"Городская поликлиника №1","address":{"city":"Москва"}}]}}}

Для дальнейшего ознакомления с Platform V DataSpace Community Edition обратитесь к документации.

Использование cookies

Мы используем файлы cookie в соответствии с Политикой конфиденциальности и Политикой использования cookies.

Нажимая кнопку «Принимаю», Вы даете АО «СберТех» согласие на обработку Ваших персональных данных в целях совершенствования нашего веб-сайта и Сервиса GitVerse, а также повышения удобства их использования.

Запретить использование cookies Вы можете самостоятельно в настройках Вашего браузера.