Решил поэкспериментировать с ИИ
И сделать модули для запуска сервера с универсальным HTTP API
То есть он должен автоматически распознавать поля на форме и выдавать результат запроса в json, а также добавлять в форму записи, заполняя их из json, отыскивая нужные поля
Пример базы пока в работе, модули пока сырые, не оттестированы.
Веб модуль должен быть в WEBMAIN, доступ к нему происходит через настройку serviceid
Модуль для десктопа надо прикреплять к какой-то форме, которая у определенного пользователя стартует при запуске.
Универсальный модуль HTTP сервера для API
Модератор: Разработчики расширений
- Runenkov
- Опытный
- Сообщения: 344
- Зарегистрирован: 21 сен 2016, 21:15
- Откуда: Ашхабад
- Благодарил (а): 124 раза
- Поблагодарили: 140 раз
Универсальный модуль HTTP сервера для API
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
есть определенные сложности с примерами, надо еще доводить до ума само расширение
балуюсь разработкой LIMS JDX
cordek {/а} yandex/ru
cordek {/а} yandex/ru
- cordek
- Эксперт
- Сообщения: 2548
- Зарегистрирован: 14 май 2017, 14:53
- Благодарил (а): 737 раз
- Поблагодарили: 605 раз
- Контактная информация:
Универсальный модуль HTTP сервера для API
Модуль для организации 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"
Надо бы добавить проверку на наличие полей на форме и запись полей типа изображения и файла через подгрзку файлов по ссылке, но пока этого я реализовывать не буду.
Работают три метода: 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"
Надо бы добавить проверку на наличие полей на форме и запись полей типа изображения и файла через подгрзку файлов по ссылке, но пока этого я реализовывать не буду.
балуюсь разработкой LIMS JDX
cordek {/а} yandex/ru
cordek {/а} yandex/ru
- cordek
- Эксперт
- Сообщения: 2548
- Зарегистрирован: 14 май 2017, 14:53
- Благодарил (а): 737 раз
- Поблагодарили: 605 раз
- Контактная информация:
Универсальный модуль HTTP сервера для API
модуль работает, только при помещении кода из epas в модуль WebMain и настройки вебсервера
пример файла конфигурации вебсервера
пример файла конфигурации вебсервера
балуюсь разработкой LIMS JDX
cordek {/а} yandex/ru
cordek {/а} yandex/ru
- cordek
- Эксперт
- Сообщения: 2548
- Зарегистрирован: 14 май 2017, 14:53
- Благодарил (а): 737 раз
- Поблагодарили: 605 раз
- Контактная информация:
Универсальный модуль HTTP сервера для API
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"
В параметры запроса надо добавить 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 {/а} yandex/ru
- cordek
- Эксперт
- Сообщения: 2548
- Зарегистрирован: 14 май 2017, 14:53
- Благодарил (а): 737 раз
- Поблагодарили: 605 раз
- Контактная информация:
Универсальный модуль HTTP сервера для API
добавил поиск записи по id для GET
поправил ошибки для POST, сделал проверки типа компонента, можно будет подумать над расширением функций, например поиск id для объекта по значению поля.
поправил ошибки для POST, сделал проверки типа компонента, можно будет подумать над расширением функций, например поиск id для объекта по значению поля.
балуюсь разработкой LIMS JDX
cordek {/а} yandex/ru
cordek {/а} yandex/ru
- cordek
- Эксперт
- Сообщения: 2548
- Зарегистрирован: 14 май 2017, 14:53
- Благодарил (а): 737 раз
- Поблагодарили: 605 раз
- Контактная информация:
Универсальный модуль HTTP сервера для API
С одним апи ключом можно делать несколько записей в форме apikey, для разных форм - разные допуски (удаления, добавления, чтения).
балуюсь разработкой LIMS JDX
cordek {/а} yandex/ru
cordek {/а} yandex/ru
- cordek
- Эксперт
- Сообщения: 2548
- Зарегистрирован: 14 май 2017, 14:53
- Благодарил (а): 737 раз
- Поблагодарили: 605 раз
- Контактная информация:
Универсальный модуль HTTP сервера для API
Краткий план на будущее:
1) для GET сделать вложение значений объектов, а не только id
возможно и аналог GraphQL
2) для POST предусмотреть обработку сохранения записи (не заполненные обязательные поля и т.д.) с выдачей соответствующего ответа об ошибке.
3) добавить PATCH - частичное изменение в записи.
4) добавить PUT - полное изменение в записи.
5) для GET сделать выдачу значений таблиц и запросов.
6) для POST добавить создание записей объектов.
7) для POST добавить запись файлов и изображений.
1) для GET сделать вложение значений объектов, а не только id
возможно и аналог GraphQL
2) для POST предусмотреть обработку сохранения записи (не заполненные обязательные поля и т.д.) с выдачей соответствующего ответа об ошибке.
3) добавить PATCH - частичное изменение в записи.
4) добавить PUT - полное изменение в записи.
5) для GET сделать выдачу значений таблиц и запросов.
6) для POST добавить создание записей объектов.
7) для POST добавить запись файлов и изображений.
балуюсь разработкой LIMS JDX
cordek {/а} yandex/ru
cordek {/а} yandex/ru