У меня на хостинге jino есть база MySQL, как сделать к ней Rest-API по-простейшему.

1. fixin 4284 09.03.25 21:19 Сейчас в теме
Потому что ODBC-компоненты не везде можно поставить, многие сервера сейчас на Линукс.
База большая, по автозапчастям.
Было бы идеально если бы к ней можно было бы обращаться через HTTP запросы (только на чтение достаточно).
Как реализовать?
Вознаграждение за ответ
Показать полностью
Ответы
Подписаться на ответы Инфостарт бот Сортировка: Древо развёрнутое
Свернуть все
7. user-z99999 78 10.03.25 11:13 Сейчас в теме
(1) Просто объясняется концепция
https://vc.ru/dev/104632-sozdanie-prostogo-rest-api-dlya-bazy-dannyh-sql-servera

Поднять apache
и сделать несколько файлов php (или любом другом языке, например Node.js )
11. fixin 4284 10.03.25 12:20 Сейчас в теме
(7) apache у провайдер уверен, уже поднят. ;-) большинство инструкций на свой сервер, а мне надо у провайдера. Wordpress же там как-то ставится.
12. Vseznaika 10.03.25 12:29 Сейчас в теме
(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.
18. fixin 4284 10.03.25 18:24 Сейчас в теме
(12) почему? Там только получить запрос и отдать результат в JSON. Можно даже без описания таблиц, она мне знакома, нужно просто где то хранить.
т.е. все API состоит из одного POST, с параметрами:
base - база
SQL - текст SQL запроса
offset
limit

Авторизацию для простоты можно сделать basic.
22. Vseznaika 10.03.25 19:24 Сейчас в теме
(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 и принципы его построения... В вопросе именно про это было указано.
23. Vseznaika 10.03.25 19:36 Сейчас в теме
(22) Как Вы будете JSON ответ скармливать в 1С я не очень себе представляю.
Лично я понял вопрос как то, что Вы хотите заменить полноценный ODBC на полноценный REST API. Без программирования это не получится сделать. Этого даже в более продвинутых Java средах нет. Там только есть "мастер" (wizard) для генерации скелета REST API. А дальше надо программировать.
Я бы взял Python (Flask или Django). Если Python не нравится, то уже написал Вам про Symfony.

А просто отсылать текст запроса и получать текст ответа, без валидации, без кэширования, без обработок - тто Вы это сами напишите за полчаса на коленке, раз, как Вы уже упомянули, у Вас есть опыт разработки сайа на php.
24. fixin 4284 10.03.25 19:42 Сейчас в теме
(23) полноценный мне не нужен. Структура базы мне известна.Нужно просто из нее дергать данные.
Из JSON элементарно.
Увы, писать некогда.
Пока под текущего клиента сделаю на ODBC, позже, если будет спрос, сделаю REST API
Мне кажется, отсутствие Rest API на PHP следствие кризиса IT
25. Vseznaika 10.03.25 19:47 Сейчас в теме
(24) Это самое правильное решение в таком случае. Дойдет дело до фреша, тогда и надо заморачиваться с решением "как обойтись без ODBC". А кроме фреша оно и с ODBC будет прекрасно работать. Я бы так и сделал. Желаю удачи Вам в разработке еще одного дополнения в кучу 1С! :)
26. fixin 4284 10.03.25 19:49 Сейчас в теме
(25) на худой конец можно на своем или облачном сервере, где есть OBDC (не на базе с разделителями) поднять 1с-базу посредника, которая будет транслировать HTTP-запросы к базе MySQL.
Vseznaika; +1 Ответить
28. user1936660 10.03.25 22:53 Сейчас в теме
(24)
если будет спрос, сделаю REST API
отсутствие Rest API на PHP следствие кризиса IT

Ну, то есть если мы так и не увидим этого API, то кризис в IT - это из-за гени.
27. starik-2005 3172 10.03.25 21:21 Сейчас в теме
(18)
Авторизацию
А зачем она тебе? Просто засовывай в какое-нить поле хидера какой-нить токен. Ну или md5 от даты, например.

Вот дипсик вместо фрилансера написал все за секунды. Готов тебе продолжение скинуть по цене фрилансера )))
Прикрепленные файлы:
32. Dmitriy302 01.04.25 08:50 Сейчас в теме
(1) Сергей, возможно я предложу не очень хорошее решение, но я лично думаю, что на перспективу и простоту будет 100 очков форы)
вот драйвер ODBC для MYSQL
https://dev.mysql.com/downloads/connector/odbc/
ставите на РМ в 1С и решаете любой вопрос в непринужденной форме.
Хорошего дня Вам и всему дружному коллективу:)
2. user1326147 09.03.25 22:03 Сейчас в теме
У меня нет сайта на jino, у них в Q and A? написано что можно включить скриптовые языки, например Python
поставить FastAPI и запрашивать базу данных
8. fixin 4284 10.03.25 12:04 Сейчас в теме
(2) там простой хостинг. PHP + MySQL
Linux 4.18.0-477.15.1.lve.2.el8.x86_64
10.6.21-MariaDB

Нужно что-то на PHP. Без новомодных питонов. Тем более только на чтение. Но да, по паролю. Всем давать нельзя в паблик.
19. fixin 4284 10.03.25 18:24 Сейчас в теме
(2) там в коробке PHP + MySQL. Wordpress можно на PHP.
Насчет питона думаю нет. Только если есть питон на PHP
4. starik-2005 3172 10.03.25 10:35 Сейчас в теме
Блин, делал такое для текдока лет 20 назад. Но там на пыхе на коленке написал АПИ, 1С-ка еще 7-ка была. Просто поиск аналогов. Чета минут 40 заняло, включая посмотреть в интернетах. Сейчас какой-нить дипсик или любая другая нейронка тебе напишет код минут за 20. Не понимаю, чего ты тут об этом спрашиваешь? Питон там есть, пыха тоже. На питоне вроде как попроще, по крайней мере какой-нить дипсик без ошибок пишет для него код.

ODBC-компоненты для линуха есть, кстати. Для MySQL точно.
10. fixin 4284 10.03.25 12:19 Сейчас в теме
(4) условно говоря, если я захочу тиражировать свое решение, то на фреш его не закинешь, если доступ будет по MySQL. мне же не дадут на фреше ODBC ставить, не так ли?
А вот HTTP запросы - легко.
5. starik-2005 3172 10.03.25 10:39 Сейчас в теме
Напиши на языке 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.
Запуск сервера
Чтобы запустить сервер, выполните команду:


python app.py
Теперь вы можете отправить GET-запрос на адрес http://127.0.0.1:5000/get_all_records, чтобы получить все записи из таблицы.

Этот пример показывает базовую реализацию REST API для MySQL. Для более сложных проектов рекомендуется использовать ORM (например, SQLAlchemy) и добавить обработку ошибок и безопасности.


Показать
9. fixin 4284 10.03.25 12:17 Сейчас в теме
(5) ага, ага, и все это на хостинге у провайдера где есть только PHP?
13. starik-2005 3172 10.03.25 13:55 Сейчас в теме
(9)
есть только PHP
Ну когда оное было отображено у меня в соседней вкладке, лого питона там тоже наблюдалось. На пыхе написать - тоже не проблема. Тот же гигачед:
<?php
// Настройки подключения к базе данных
$servername = "localhost";
$username = "your_username";
$password = "your_password";
$dbname = "your_database_name";

// Подключение к базе данных
$conn = new mysqli($servername, $username, $password, $dbname);

// Проверка соединения
if ($conn->connect_error) {
    die("Connection failed: " . $conn->connect_error);
}

// SQL-запрос для выборки данных
$sql = "SEL ECT * FR OM your_table_name";
$result = $conn->query($sql);

// Проверка результата запроса
if (!$result) {
    echo "Error: " . $sql . "" . $conn->error;
}

// Получение данных в виде ассоциативного массива
$data = array();
if ($result->num_rows > 0) {
    while($row = $result->fetch_assoc()) {
        $data[] = $row;
    }
}

// Закрытие соединения
$conn->close();

// Преобразование данных в JSON и вывод
header('Content-Type: application/json');
echo json_encode($data);
?>
Показать
14. fixin 4284 10.03.25 14:10 Сейчас в теме
(13) это сырое, нужен готовый скрыпт.
15. user1326147 10.03.25 14:15 Сейчас в теме
(14) Как можно написать готовый скрипт на абстрактный вопрос. Посоветовали же использовать python или php, на php просто больше писать.
16. starik-2005 3172 10.03.25 16:47 Сейчас в теме
(14)
нужен готовый скрыпт
Так задай вопрос, а не как "42". Мужик ты или не мужик?
17. fixin 4284 10.03.25 18:19 Сейчас в теме
(16) кому, ИИ Сонет? ггг...
в идеале какое-то готовое решение на PHP, чтобы поставить на сервер и работало.
20. starik-2005 3172 10.03.25 18:48 Сейчас в теме
(17)
в идеале какое-то готовое решение на PHP, чтобы поставить на сервер и работало.
Центрифугу поставь, шину данных, ...))))

Ты соизмеряй потребности и возможности. По сути тебе шина нужна с коннектором к скулю. Но если это что-то универсальное, то ты замучаешься для него обертку писать на 1С. И если тебе с текдока надо, условно, список аналогов, то скульный скрипт ты и сам напишешь - там парочку соединений всего. А отдаватель результата этого скрипта с пыхи тебе ИИ напишет совершенно любой за минут 20.
21. fixin 4284 10.03.25 18:50 Сейчас в теме
(20) я в (18) описал что нужно. Я писал в свое время свой сайт на PHP, там простейший код нужен. Может фрилансеру заказать, подумалось?
29. user2023330 10.03.25 23:38 Сейчас в теме
Первое - если у тебя хостинг, то используй фреймворк Ларавел можно просто написать чистый АПИ бес каких либо проблем.
Второе - если ВДС то установи Линукс, настрой его, установи Апачи или НДЖИНКС, после используй любой фреймворк, либо на ПХП либо на Питоне, либо Джава.
Третье - покупай статический Айпи( белый айпи адрес) устанавливай 1с и пиши себе апи на 1С.
30. Dmitriy302 31.03.25 12:53 Сейчас в теме
ок, напиши в личку, что ты конкретно хочешь я тебе сделаю.
по сути не проблема это совсем
стек понятен и комфортен, если делаем с base авторизацией, то в двойне комфортно.
можно в личку или звони:)
31. Dmitriy302 31.03.25 12:57 Сейчас в теме
+ ODBC можно и на linux поставить
и конечно могу пример скинуть решения как раз по замчастям)
Оставьте свое сообщение

Для получения уведомлений об ответах подключите телеграм бот:
Инфостарт бот