Потому что ODBC-компоненты не везде можно поставить, многие сервера сейчас на Линукс.
База большая, по автозапчастям.
Было бы идеально если бы к ней можно было бы обращаться через HTTP запросы (только на чтение достаточно).
Как реализовать?
(1) С Джино много работал. Там есть хостинг и VPS. У меня был VPS - он не сильно-то дороже хостинга, но более удобен. Rest API делал не для 1С, а для других целей, но наверное особой разницы нет.
Если совсем не хочется Python (он, кстати, не новомодный, а постарее PHP будет), то можно использовать php-фреймворк Symfony. Я именно его использовал для создания rest api. Мне лично показался очень удобным.
В этом фреймворке есть и Doctrine ORM для общения с базой. Для 1Сников, колошматящих руками тонны SQL запросов, это может покажется странным, но есть более удобные способы общения с SQL сервером.
На мой взгляд ORM намного удобней, чем raw sql. Вот тут есть вводный мануал по созданию rest api на symfony https://habr.com/ru/companies/otus/articles/509842/ Может поможет? Ну или просто в гугл на тему symfony framework...
Без фреймворка, на голом php, делать rest api - редкий мазохизм, IMHO.
(12) почему? Там только получить запрос и отдать результат в JSON. Можно даже без описания таблиц, она мне знакома, нужно просто где то хранить.
т.е. все API состоит из одного POST, с параметрами:
base - база
SQL - текст SQL запроса
offset
limit
(18) Вопрос был про _REST_API_. Ответы тоже. То, что Вы сейчас описываете это не REST API в обычном понимании. Это просто передача текста SQL запроса на веб сервер для исполнения его там и возвращения результата в каком-то виде.
Вот прямо из гугла первое попавшееся про то, что такое REST API:
Всего в REST есть шесть требований к проектированию API. Пять из них обязательные, одно — опциональное:
Клиент-серверная модель (client-server model).
Отсутствие состояния (statelessness).
Кэширование (cacheability).
Единообразие интерфейса (uniform interface).
Многоуровневая система (layered system).
Код по требованию (code on demand) — необязательно.
Если нужно просто передать текст SQL запроса и получить ответ SQL сервера, то тут уже писали как это сделать. Там действительно всё просто. Аутентикацию, как Вы и сказали, можно сделать средствами apache через htaccess
Я и все остальные писали здесь про REST API и принципы его построения... В вопросе именно про это было указано.
(22) Как Вы будете JSON ответ скармливать в 1С я не очень себе представляю.
Лично я понял вопрос как то, что Вы хотите заменить полноценный ODBC на полноценный REST API. Без программирования это не получится сделать. Этого даже в более продвинутых Java средах нет. Там только есть "мастер" (wizard) для генерации скелета REST API. А дальше надо программировать.
Я бы взял Python (Flask или Django). Если Python не нравится, то уже написал Вам про Symfony.
А просто отсылать текст запроса и получать текст ответа, без валидации, без кэширования, без обработок - тто Вы это сами напишите за полчаса на коленке, раз, как Вы уже упомянули, у Вас есть опыт разработки сайа на php.
(23) полноценный мне не нужен. Структура базы мне известна.Нужно просто из нее дергать данные.
Из JSON элементарно.
Увы, писать некогда.
Пока под текущего клиента сделаю на ODBC, позже, если будет спрос, сделаю REST API
Мне кажется, отсутствие Rest API на PHP следствие кризиса IT
(24) Это самое правильное решение в таком случае. Дойдет дело до фреша, тогда и надо заморачиваться с решением "как обойтись без ODBC". А кроме фреша оно и с ODBC будет прекрасно работать. Я бы так и сделал. Желаю удачи Вам в разработке еще одного дополнения в кучу 1С! :)
(25) на худой конец можно на своем или облачном сервере, где есть OBDC (не на базе с разделителями) поднять 1с-базу посредника, которая будет транслировать HTTP-запросы к базе MySQL.
(1) Сергей, возможно я предложу не очень хорошее решение, но я лично думаю, что на перспективу и простоту будет 100 очков форы)
вот драйвер ODBC для MYSQL
https://dev.mysql.com/downloads/connector/odbc/ ставите на РМ в 1С и решаете любой вопрос в непринужденной форме.
Хорошего дня Вам и всему дружному коллективу:)
Блин, делал такое для текдока лет 20 назад. Но там на пыхе на коленке написал АПИ, 1С-ка еще 7-ка была. Просто поиск аналогов. Чета минут 40 заняло, включая посмотреть в интернетах. Сейчас какой-нить дипсик или любая другая нейронка тебе напишет код минут за 20. Не понимаю, чего ты тут об этом спрашиваешь? Питон там есть, пыха тоже. На питоне вроде как попроще, по крайней мере какой-нить дипсик без ошибок пишет для него код.
ODBC-компоненты для линуха есть, кстати. Для MySQL точно.
(4) условно говоря, если я захочу тиражировать свое решение, то на фреш его не закинешь, если доступ будет по MySQL. мне же не дадут на фреше ODBC ставить, не так ли?
А вот HTTP запросы - легко.
Напиши на языке python простой rest-api для mysql. Достаточно запросов на sel ect.
Вот пример простого REST API на Python с использованием Flask и MySQL для выполнения запроса SEL ECT. Этот код позволяет создать серверное приложение, которое взаимодействует с базой данных MySQL через SQL-запросы и возвращает результаты в формате JSON.
Шаг 1: Установите необходимые библиотеки
Для работы примера вам понадобятся следующие библиотеки:
Flask — для создания веб-сервера и обработки HTTP-запросов.
mysql-connector-python — для взаимодействия с базой данных MySQL.
Установите эти пакеты с помощью pip:
pip install flask mysql-connector-python
Шаг 2: Напишите скрипт
Создайте файл app.py и вставьте следующий код:
fr om flask import Flask, request, jsonify
import mysql.connector
# Настройки подключения к базе данных
config = {
'host': 'localhost',
'port': 3306,
'user': 'your_username', # Замените на ваше имя пользователя
'password': 'your_password', # Замените на ваш пароль
'database': 'your_database_name' # Замените на название вашей базы данных
}
# Создаем объект приложения Flask
app = Flask(__name__)
# Функция для выполнения SQL-запросов
def execute_query(query):
try:
connection = mysql.connector.connect(**config)
cursor = connection.cursor()
cursor.execute(query)
result = cursor.fetchall()
cursor.close()
connection.close()
return result
except Exception as e:
print(f"Ошибка при выполнении запроса: {str(e)}")
return None
# Маршрут для получения всех записей из таблицы
@app.route('/get_all_records', methods=['GET'])
def get_all_records():
query = "SELECT * FR OM your_table_name;" # Замените your_table_name на имя вашей таблицы
results = execute_query(query)
if results is not None:
return jsonify(results), 200
else:
return jsonify({"error": "Не удалось получить данные"}), 500
if __name__ == '__main__':
app.run(debug=True)
Пояснения к коду:
Настройка подключения к базе данных: В переменной config укажите параметры вашего подключения к MySQL (хост, порт, имя пользователя, пароль и название базы данных).
Функция execute_query: Эта функция используется для выполнения SQL-запросов. Она устанавливает соединение с базой данных, выполняет запрос, получает результат и закрывает соединение.
Маршрут /get_all_records: Этот маршрут обрабатывает GET-запросы и возвращает все записи из указанной таблицы в формате JSON.
Запуск сервера: Строка app.run(debug=True) запускает сервер в режиме отладки. Вы можете отключить режим отладки, установив debug=False.
Запуск сервера
Чтобы запустить сервер, выполните команду:
Этот пример показывает базовую реализацию REST API для MySQL. Для более сложных проектов рекомендуется использовать ORM (например, SQLAlchemy) и добавить обработку ошибок и безопасности.
в идеале какое-то готовое решение на PHP, чтобы поставить на сервер и работало.
Центрифугу поставь, шину данных, ...))))
Ты соизмеряй потребности и возможности. По сути тебе шина нужна с коннектором к скулю. Но если это что-то универсальное, то ты замучаешься для него обертку писать на 1С. И если тебе с текдока надо, условно, список аналогов, то скульный скрипт ты и сам напишешь - там парочку соединений всего. А отдаватель результата этого скрипта с пыхи тебе ИИ напишет совершенно любой за минут 20.
Первое - если у тебя хостинг, то используй фреймворк Ларавел можно просто написать чистый АПИ бес каких либо проблем.
Второе - если ВДС то установи Линукс, настрой его, установи Апачи или НДЖИНКС, после используй любой фреймворк, либо на ПХП либо на Питоне, либо Джава.
Третье - покупай статический Айпи( белый айпи адрес) устанавливай 1с и пиши себе апи на 1С.
ок, напиши в личку, что ты конкретно хочешь я тебе сделаю.
по сути не проблема это совсем
стек понятен и комфортен, если делаем с base авторизацией, то в двойне комфортно.
можно в личку или звони:)