Последняя версия DataExpress 26.8.17

Изображение Скачать | Изображение Что нового? | Демо

Универсальный модуль HTTP сервера для API

Расширение функционала и существующих возможностей программы с помощью модулей расширений и плагинов от сторонних разработчиков.

Модератор: Разработчики расширений

Аватара пользователя
cordek
Эксперт
Сообщения: 2548
Зарегистрирован: 14 май 2017, 14:53
Благодарил (а): 737 раз
Поблагодарили: 605 раз
Контактная информация:

Универсальный модуль HTTP сервера для API

Сообщение cordek » 04 фев 2025, 21:07

Решил поэкспериментировать с ИИ
И сделать модули для запуска сервера с универсальным HTTP API
То есть он должен автоматически распознавать поля на форме и выдавать результат запроса в json, а также добавлять в форму записи, заполняя их из json, отыскивая нужные поля
Пример базы пока в работе, модули пока сырые, не оттестированы.
Веб модуль должен быть в WEBMAIN, доступ к нему происходит через настройку serviceid
Модуль для десктопа надо прикреплять к какой-то форме, которая у определенного пользователя стартует при запуске.
HTTP API Server.zip
(7.44 КБ) 54 скачивания
балуюсь разработкой LIMS JDX
cordek {/а} yandex/ru

Аватара пользователя
Runenkov
Опытный
Сообщения: 344
Зарегистрирован: 21 сен 2016, 21:15
Откуда: Ашхабад
Благодарил (а): 124 раза
Поблагодарили: 140 раз

Универсальный модуль HTTP сервера для API

Сообщение Runenkov » 04 фев 2025, 21:45

cordek писал(а):Решил поэкспериментировать с ИИ
И сделать модули для запуска сервера с универсальным HTTP API
То есть он должен автоматически распознавать поля на форме и выдавать результат запроса в json, а также добавлять в форму записи, заполняя их из json, отыскивая нужные поля
Пример базы пока в работе, модули пока сырые, не оттестированы.
Веб модуль должен быть в WEBMAIN, доступ к нему происходит через настройку serviceid
Модуль для десктопа надо прикреплять к какой-то форме, которая у определенного пользователя стартует при запуске.
HTTP API Server.zip


в строке 41 (deep5) DSet: TDataSet; -- ругается Unknown type...

а можно примерчик? а то оччень интересно!!!

Аватара пользователя
cordek
Эксперт
Сообщения: 2548
Зарегистрирован: 14 май 2017, 14:53
Благодарил (а): 737 раз
Поблагодарили: 605 раз
Контактная информация:

Универсальный модуль HTTP сервера для API

Сообщение cordek » 19 фев 2025, 09:28

есть определенные сложности с примерами, надо еще доводить до ума само расширение
балуюсь разработкой LIMS JDX
cordek {/а} yandex/ru

Аватара пользователя
cordek
Эксперт
Сообщения: 2548
Зарегистрирован: 14 май 2017, 14:53
Благодарил (а): 737 раз
Поблагодарили: 605 раз
Контактная информация:

Универсальный модуль HTTP сервера для API

Сообщение cordek » 28 авг 2026, 15:24

Модуль для организации RESTful подобного апи на веб-сервере.
Работают три метода: GET, POST, DELETE
Обязательно создайте форму apikey - нужна для контроля доступа через апи.
Добавьте поля key (строка) и form (строка).
В поле key запишите любую последовательность, например ВАШ_КЛЮЧ, в поле form запишите имена форм через точку с запятой, например: api;товары;поступления товаров.
Проставьте галочки во флажках GET, POST, DELETE - будут разрешены только нужные методы.
Если пользователь попытается обратиться к форме, которой нет в этом списке, он получит ошибку 403 Access denied.

2. Настройте веб сервер в файле dxwebsrv.cfg:
[test_api]
Database=DEMO_DB_WEB_API.FDB или Database=127.0.0.1:E:\dxwebsrv_win32\DEMO_DB_WEB_API.FDB
Templates=templates
SessionTime=30
ServiceId=73a90acaae2b1ccc0e969709665bc62f

3. Получить все данные:
http://127.0.0.1/test_api/?serviceid=73 ... y=ВАШ_КЛЮЧ

Получить данные с фильтром (синтаксис DataExpress, для дат и времени нужны функции [Дата создания]>CDATE('02.08.2025')):
http://127.0.0.1/test_api/?serviceid=73 ... ЮЧ&filter=[название]=='М'
(Обратите внимание: в URL пробелы и спецсимволы при запросе через браузер кодируются автоматически, например %20 вместо пробела, при работе через сторонние приложения рекомендуется кодировать самим).

4. Записать данные вы можете используя метод POST
параметры запроса не меняются
http://127.0.0.1/test_api/?serviceid=73 ... y=ВАШ_КЛЮЧ
но в тело запроса нужно вписать JSON, в котором будут пары "Имя поля": "Значение поля"
обязательно указывайте имена полей, а не имена компонентов. Значения должны соответствовать системным значениям даты, времени, которые на сервере.
например:
"key": "15 новый",
"Число": "15",
"Дата": "28.08.2026",
"Время": "15:16:00",
"Флажок": "1",
"Объект": "5"
Обратите внимание, что для объекта используется id записи объекта (записи формы к которой обращается объект)
В ответ получите код статуса и id записи:
"code": 200,
"id": "29",
"key": "15 новый",
"Число": "15",
"Дата": "28.08.2026",
"Время": "15:16:00",
"Флажок": "1",
"Объект": "5"

Надо бы добавить проверку на наличие полей на форме и запись полей типа изображения и файла через подгрзку файлов по ссылке, но пока этого я реализовывать не буду.

HTTP_API_Server_7_web.zip
(3.97 КБ) 6 скачиваний

DEMO_DB_WEB_API 27.08.2026.zip
(198.7 КБ) 6 скачиваний
балуюсь разработкой LIMS JDX
cordek {/а} yandex/ru

Аватара пользователя
cordek
Эксперт
Сообщения: 2548
Зарегистрирован: 14 май 2017, 14:53
Благодарил (а): 737 раз
Поблагодарили: 605 раз
Контактная информация:

Универсальный модуль HTTP сервера для API

Сообщение cordek » 28 авг 2026, 15:27

модуль работает, только при помещении кода из epas в модуль WebMain и настройки вебсервера

пример файла конфигурации вебсервера
dxwebsrv.zip
(1.3 КБ) 9 скачиваний
балуюсь разработкой LIMS JDX
cordek {/а} yandex/ru

Аватара пользователя
cordek
Эксперт
Сообщения: 2548
Зарегистрирован: 14 май 2017, 14:53
Благодарил (а): 737 раз
Поблагодарили: 605 раз
Контактная информация:

Универсальный модуль HTTP сервера для API

Сообщение cordek » 28 авг 2026, 17:04

5. Удалить данные вы можете используя метод DELETE
В параметры запроса надо добавить id удаляемой записи.
http://127.0.0.1/test_api/?serviceid=73 ... ЛЮЧ&id=111

Если такая запись существует, то в ответ получите:

"code": 200,
"id": "111"

если записи нет, то получите
"code": 404,
"error": "id 21 not found"
балуюсь разработкой LIMS JDX
cordek {/а} yandex/ru

Аватара пользователя
cordek
Эксперт
Сообщения: 2548
Зарегистрирован: 14 май 2017, 14:53
Благодарил (а): 737 раз
Поблагодарили: 605 раз
Контактная информация:

Универсальный модуль HTTP сервера для API

Сообщение cordek » 28 авг 2026, 22:15

добавил поиск записи по id для GET
поправил ошибки для POST, сделал проверки типа компонента, можно будет подумать над расширением функций, например поиск id для объекта по значению поля.
HTTP_API_Server_7.1_web.epas.zip
(4.94 КБ) 8 скачиваний
балуюсь разработкой LIMS JDX
cordek {/а} yandex/ru

Аватара пользователя
cordek
Эксперт
Сообщения: 2548
Зарегистрирован: 14 май 2017, 14:53
Благодарил (а): 737 раз
Поблагодарили: 605 раз
Контактная информация:

Универсальный модуль HTTP сервера для API

Сообщение cordek » 29 авг 2026, 09:13

С одним апи ключом можно делать несколько записей в форме apikey, для разных форм - разные допуски (удаления, добавления, чтения).
балуюсь разработкой LIMS JDX
cordek {/а} yandex/ru

Аватара пользователя
cordek
Эксперт
Сообщения: 2548
Зарегистрирован: 14 май 2017, 14:53
Благодарил (а): 737 раз
Поблагодарили: 605 раз
Контактная информация:

Универсальный модуль HTTP сервера для API

Сообщение cordek » 01 сен 2026, 09:38

Краткий план на будущее:
1) для GET сделать вложение значений объектов, а не только id
возможно и аналог GraphQL
2) для POST предусмотреть обработку сохранения записи (не заполненные обязательные поля и т.д.) с выдачей соответствующего ответа об ошибке.

3) добавить PATCH - частичное изменение в записи.

4) добавить PUT - полное изменение в записи.

5) для GET сделать выдачу значений таблиц и запросов.

6) для POST добавить создание записей объектов.

7) для POST добавить запись файлов и изображений.
балуюсь разработкой LIMS JDX
cordek {/а} yandex/ru


Вернуться в «Каталог расширений»