Dimonchik, Я не думаю что там будет больше гигабайта данных в текстовом виде. Или редис использует x50 памяти от содержащихся данных? Мне не надо постоянное хранение истории, только текущие данные, с обновлением раз в пару секунд основных, и раз в минуту остальных (которых больше). Или запись жрет много памяти? По кликхаусу мало данных чтобы понять нужен он мне или нет. Либо нужно очень сильно вникать, поверхностно не разберешь можно ли применить под мою схему.
Román Mirilaczvili, я уже почитал насчёт хранения в памяти программы, то есть в переменных/картах что это быстрее даже редиса. Хоть убедился что редис сюда больше подходит и я в правильном направлении думаю)
Сохранность временная, на 2 секунды или минуту. Так как все равно уйдёт запрос к апи и информация снова появится. Насчёт хранения в памяти даже не подумал, спасибо.
Alexander, Да, я это тоже видел. Но мало опыта в C# чтобы приняться за это. Поэтому основной вопрос расшифровки в PHP. На крайний случай серверный JS. Но все равно спасибо. А так же спасибо за совет по фрилансу, тоже задумался об этом, и возможно поищу человека для исполнения этой задачи. Правда опыта в поиске фрилансеров вообще 0 :)))
Мне не обязательно поправлять программу. Там задействовано много компонентов, поэтому нет смысла ее пересобирать, это не стоит затраченного времени. Просто ищу возможность расшифровать это в других ЯП. Кто-то когда то ведь это делал на таком алгоритме.
FanatPHP, Это есть. Но я думал что он может быть постоянным, я не понимаю сейчас что значит "регистрировать". Либо я понял это не так, что при каждом запросе передавать колбэк.
Он будет прописан у меня в коде, его предоставит сам клиент.
FanatPHP, Я думаю да, можно такое сравнение провести. Подписывать ответ, вы имеете ввиду хэшем? Колбек для того, чтобы после записи изменений у клиента - мне пришел ответ что у клиента все изменено успешно?
Adamos, То что отдает, нужно ли это защищать? Или тут и так все происходит на бэкендах и никто не имеет доступа к этому если только не получил доступ к серверу.
Запрос к моему серверу при первом запуске я уже примерно понял как защитить. API key и шифрование openssl и расшифровка на моем сервере. Не имея ключ нельзя подменить логин на другого пользователя в GET параметре.
Осталось только отрезать запросы со сторонних ресурсов. HTTP_REFERER я уже почитал что можно подменить. Как разрешить вызовы только с определенного домена пока не знаю. Можно ведь сделать локальным домен.
Я так понял что если ключ будет другим - то расшифровки не произойдет, пробовал сейчас в коде изменять ключ, не идет расшифровка. Я думал что с другим ключом он просто расшифрует как набор символов. Походу все вопросы допер. В споре рождается истина)
FanatPHP, Я уже писал что клиент - это человек, который берет у меня API. Я не имею доступа ни к его коду ни к его базе ни к бэкенду. Я шлю ему данные после расчетов в приложении, которое работает на его сайте через iframe. И у него нет доступа к моему коду.
FanatPHP, О боже. Что сложного? Приложение находится на моем сервере. Логика на моем сервере. Клиент открывает приложение, и что то там делает. Приложение открывается через iframe, и использует логику на моем сервере. Когда данные изменились - как изменить их в базе у клиента? Только отправив запрос через CURL с моего сервера на бэкенд клиента. Он получает эти данные и записывает себе в базу. По моему тяжелые наркотики принимаете вы. Это не простая API пересылающая массивы json. Логика приложения находится на сервере. Как только логика сделала расчет - она отправляет это на эндпоинт у клиента, он пишет себе в базу изменения которые пользователь произвел в моем приложении.
FanatPHP, API сервер имеет общение с бэкендом клиента. Он отправляет туда измененные данные. которые изменяются благодаря действиям пользователя в приложении. Я не могу напрямую у клиента изменять данные через приложение. Или могу?
FanatPHP, IP затем чтобы нельзя было запустить приложение с другого сервера, даже зная ключ. Хотя конечно если знать ключ то можно натворить других дел.
Подменить данные. То есть если я с API сервера отправил (user: test, data: datasheet) То можно ли как то сделать чтобы на сервер клиента пришло (user: admin, data: delete_all) ? Или я параною?
FanatPHP, То есть по сути можно сделать так же используя API ключ!? На API сервере сопоставить API ключ определенному домену или IP. И этот ключ есть у клиента, и параметры GET будут зашифрованы этим ключом. На сервере пришедшие параметры будут расшифрованы используя тот же ключ API. Использовать openssl_encrypt и openssl_decrypt наверное!? Или есть что то попроще может. А общение сервера с бэкендом клиента никак не подменить ведь? Это просто моя параноя?)
FanatPHP, с моим сервером и так будет общаться бэкенд клиента. Но мне нужен первый запуск. Инициализация приложения. Чтобы оно запустилось - нужно получить логин пользователя который его запустил. я вижу это только через GET параметр. В iframe грузится blade шаблон который запускает приложение.
FanatPHP, Потому что человек должен открыть iframe. Это не сервер. Это браузер. Как понять какой именно пользователь открыл iframe чтобы подгрузить его данные через запрос к серверу клиента(человека)?
Клиент - (человек) сайт который взял мое API. Они грузят приложение во фрейме и приложение меняет данные в их системе.
API сервер - я, просто Laravel, фронт - это админка. Нет ничего больше кроме запросов и ответов.
Клиент открывает во фрейме приложение. Там есть поля, он может изменить какие то из них - и в базе на клиенте изменятся данные этого пользователя. Этими данными он может пользоваться на этом же сайте в других разделах.
Моя задача как API просто рассчитать эти данные и вернуть. Как они будут их использовать это уже не мое дело.
Но я должен знать что я рассчитываю данные конкретно под того пользователя который открыл приложение. То есть передать в GET параметре его логин. Чтобы после расчета послать на клиент данные привязанные к этому логину, на бэкенд клиента (человека).
Если я в браузере изменю параметр GET - то расчет будет произведен для другого пользователя. Вот я и думаю как это предотвратить. Иметь а бэкенде клиента АПИ-ключ и на своем сервере, и использовать его чтобы шифровать GET параметры и расшифровывать. Правильно ли это?
И можно ли подменить что то, если я со своего бэкенда, через CURL отправляю на бэкенд клиента(человека) информацию. Или чтобы что то подменить обязательно нужно чтобы было общение через браузер?
Внесу ясность. Есть сайт который берет у меня приложение по API. База пользователей находится у них. Мне копировать базу к себе нет смысла. Просто используя мое приложение меняются данные в их базе у их пользователей. У меня есть только сервер и админ панель. У клиента есть фронтенд и бэкенд. Вот во фронтенде открывается фрейм, в котором грузится приложение. Используя алгоритмы на моем сервере, происходит изменение данных. Эти данные должны меняться у пользователей на стороннем сайте.
P.S. Я понимаю что это не массив а строка. Я имел ввиду массив $_SERVER. Просто дописал какой конкретно элемент массива я использую для проверки что запрос пришел именно с разрешенного домена.
Михаил Е, да, единственное что надо наверное не с датой работать а с временем, таймстамп допустим, тогда единовременно может быть активна одна запись только.