Добро пожаловать в форум, Guest  >>   Войти | Регистрация | Поиск | Правила | В избранное | Подписаться
Все форумы / Delphi Новый топик    Ответить
Топик располагается на нескольких страницах: [1] 2   вперед  Ctrl      все
 API у десктопного приложения - как сделать?  [new]
m52
Member

Откуда:
Сообщений: 691
Здравствуйте,

Программа написана на Delphi XE8
У меня спрашивают: "Если ли API у вашей программы" ? Ответ: нет

Возникает вопрос: Как сделать API у десктопного приложения? В виде DLL или COM/OLE/ActiveX-технологии или может быть передавать через IP/порт ?
Может сейчас есть более современные технологии?

Приложения, которые будут получать/передавать данные в программу - это могут быть любые приложения, написанные на чем угодно.
Передавать в программу нужно будет строки и возможно изображения (хотя изображение можно представить в виде текста).

Какие будут идеи?

Заранее благодарен.
4 ноя 17, 10:27    [20926723]     Ответить | Цитировать Сообщить модератору
 Re: API у десктопного приложения - как сделать?  [new]
JaDi
Member

Откуда: Сызрань, Россия
Сообщений: 3156
Может просто импорт-экспорт данных из программы сделать, например, в json-xml? Иногда под апи именно это подразумевают.
4 ноя 17, 10:31    [20926731]     Ответить | Цитировать Сообщить модератору
 Re: API у десктопного приложения - как сделать?  [new]
m52
Member

Откуда:
Сообщений: 691
Кстати, а это мысль!
Только после сохранения xml на диск надо как-то моей программе автоматически затащить данные из xml-файла. А как программа узнает, что xml для импорта подготовлен? Это уже конечно второй вопрос.
4 ноя 17, 11:05    [20926797]     Ответить | Цитировать Сообщить модератору
 Re: API у десктопного приложения - как сделать?  [new]
sql2012
Member

Откуда: РФ
Сообщений: 551
m52
Кстати, а это мысль!
Только после сохранения xml на диск надо как-то моей программе автоматически затащить данные из xml-файла. А как программа узнает, что xml для импорта подготовлен? Это уже конечно второй вопрос.


В программе, в настройках, хранить путь к папке и расширение файла (.xml или другое).
Опрашивать при запуске + периодически\подписаться на события файловой системы (создание файла, например).
4 ноя 17, 11:08    [20926801]     Ответить | Цитировать Сообщить модератору
 Re: API у десктопного приложения - как сделать?  [new]
m52
Member

Откуда:
Сообщений: 691
Да, думал уже об этом, но не хотелось бы нагружать программу дополнительным мониторингом ожидания появления xml-файлов в опред.папке. А подписка на события, наверное, не будет работать, если папка лежит на FAT-32 (например на флешке). Для подписки на события ведь нужен NFTS?
4 ноя 17, 11:17    [20926816]     Ответить | Цитировать Сообщить модератору
 Re: API у десктопного приложения - как сделать?  [new]
JaDi
Member

Откуда: Сызрань, Россия
Сообщений: 3156
Да какие подписки -- тупо проверять наличие файлов в папке по нажатию на кнопки или через какой-то промежуток времени. А потом эти файлы перемещать в папку с очередью на обработку - обработанными - ошибочными.
4 ноя 17, 11:21    [20926823]     Ответить | Цитировать Сообщить модератору
 Re: API у десктопного приложения - как сделать?  [new]
m52
Member

Откуда:
Сообщений: 691
Ну похоже, что так и придется.

Только
if FileExists(файл)=true
еще не означает, что файл существует и готов для импорта. Файл может быть не дописан до конца другой программой (лежать огрызок). Например, если вы в момент копирования длинного фильма проверите FileExists, то выдаст true, но файл еще до конца не скопирован.
4 ноя 17, 11:38    [20926852]     Ответить | Цитировать Сообщить модератору
 Re: API у десктопного приложения - как сделать?  [new]
sql2012
Member

Откуда: РФ
Сообщений: 551
m52,

так проверь - занят он еще или уже нет.
4 ноя 17, 11:44    [20926862]     Ответить | Цитировать Сообщить модератору
 Re: API у десктопного приложения - как сделать?  [new]
МихаилР
Member

Откуда: Ижевск
Сообщений: 246
m52
Как сделать API у десктопного приложения?

Зависит от того, кто и как будет использовать.
Если это:
- .Net / скрипты на WSH (JScript / VBS) / Office (VBA), то лучше сделать COM, причем с Dispatch интерфейсами
- скрипты cmd / bash - лучше сделать CLI (command line interface).
- PowerShell нужен модуль с Cmdlets (ну или WMI объект)
- Java / C / ... какая-то экзотика (Python/...) лучше сделать DLL, и binding для соответсвующего языка - практически все они так или иначе поддерживают вызов из Dll

m52
передавать через IP/порт ?

От вас ведь просят API, а не протокол обмена (который, во-первых, надо еще правильно реализовать и проверить, а во-вторых, вы в какой-то момент можете захотеть изменить).

m52
Какие будут идеи?

Я бы сделал для начала минимальный по затаратам, но максимальный по распространенности вариант - DLL с парой функций. Сам протокол обмена (через сокеты, разделяемую папку, named pipe, shared папку, ... ) скрыть за этой библиотекой.
Если будут потом просить binding к конкретному языку / среде - делать уже по запросу (как обертку над этой dll или же напрямую, используя внутреннее API самого протокола).
4 ноя 17, 12:51    [20926986]     Ответить | Цитировать Сообщить модератору
 Re: API у десктопного приложения - как сделать?  [new]
YuRock
Member

Откуда: Донецк
Сообщений: 2360
m52
Только
if FileExists(файл)=true

еще не означает, что файл существует и готов для импорта. Файл может быть не дописан до конца
Ну так сказали же. Перед обработкой твоя программа "перемещает файл в свою папку".
4 ноя 17, 13:39    [20927057]     Ответить | Цитировать Сообщить модератору
 Re: API у десктопного приложения - как сделать?  [new]
X11
Member

Откуда: Kharkiv, Ukraine
Сообщений: 11346
Можно в программе использовать TTCPServer/TIdTCPServer и принимать различные команды по сети.
Или даже TIdHttpServer.
4 ноя 17, 17:54    [20927377]     Ответить | Цитировать Сообщить модератору
 Re: API у десктопного приложения - как сделать?  [new]
Dimitry Sibiryakov
Member

Откуда:
Сообщений: 43819

m52
Как сделать API у десктопного приложения?

Сначала надо решить какие функции твоего приложения должны быть доступны левым приложениям
через это API и какие приложения это могут быть. Если, например, это 1С, то выбора нет:
OLE Automation Server, другого эта штука не умеет. Если это какая-то уэб-хренотень, то
SOAP сотоварищи. И т.д. и т.п.

Posted via ActualForum NNTP Server 1.5

4 ноя 17, 18:08    [20927392]     Ответить | Цитировать Сообщить модератору
 Re: API у десктопного приложения - как сделать?  [new]
ziv-2014
Member

Откуда:
Сообщений: 63
Реализовать плагинную систему на основе COM interface без регистрации com объектов.
В принципе можно прикрутить любой язык программирования.
4 ноя 17, 18:56    [20927466]     Ответить | Цитировать Сообщить модератору
 Re: API у десктопного приложения - как сделать?  [new]
чччД
Guest
m52
Здравствуйте,

Программа написана на Delphi XE8
У меня спрашивают: "Если ли API у вашей программы" ? Ответ: нет

Возникает вопрос: Как сделать API у десктопного приложения? В виде DLL или COM/OLE/ActiveX-технологии или может быть передавать через IP/порт ?
Может сейчас есть более современные технологии?

Приложения, которые будут получать/передавать данные в программу - это могут быть любые приложения, написанные на чем угодно.
Передавать в программу нужно будет строки и возможно изображения (хотя изображение можно представить в виде текста).

Какие будут идеи?

Заранее благодарен.

Сильно зависит от того, кто будет пользоваться твоим API.
Например, сервис обратится к тебе как к СОМ серверу, ты запускаешься под тем же пользователем со всеми вытекающими (без доступа к рабочему столу и т.п.).
Если есть возможность - реализуйся как автономная длл (с дублированием кода). Или как вебсервис, но придется решить вопрос с первоначальным запуском и подчисткой гуя (диалогов и т.п.)
4 ноя 17, 19:52    [20927523]     Ответить | Цитировать Сообщить модератору
 Re: API у десктопного приложения - как сделать?  [new]
Здравствуйте
Guest
оповещение программы (например, о том, что входной файл для неё готов и нужно его обработать) можно сделать через user windows message, которое главное окно программы должно обрабатывать

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

файлы при этом лучше использовать отображаемые в память (mmf) - так можно полностью избежать физической записи этих файлов на диск

рассматривая вариант c .dll (скорее, с экспортируемыми вашим .exe функциями), следует помнить о невозможности такого взаимодействия между 32-битными и 64-битными процессами
5 ноя 17, 00:44    [20927999]     Ответить | Цитировать Сообщить модератору
 Re: API у десктопного приложения - как сделать?  [new]
m52
Member

Откуда:
Сообщений: 691
Клиенты у моей CRM-программы разные и я не знаю, кто и как хочет взаимодействовать с программой. Кто-то хочет,чтобы программа в 1С что-то отправляла, кто-то хочет со своего сайта клиентов заносить в программу. Поэтому мне сложно понять, какой API будет востребованней.

Пока рассматриваю или DLL или COM.

автор
рассматривая вариант c .dll (скорее, с экспортируемыми вашим .exe функциями), следует помнить о невозможности такого взаимодействия между 32-битными и 64-битными процессами


У меня приложение 32-битное. Это значит, что стороннее 64-битное приложение не сможет использовать мою DLL ?
5 ноя 17, 11:55    [20928307]     Ответить | Цитировать Сообщить модератору
 Re: API у десктопного приложения - как сделать?  [new]
S.G.
Member

Откуда: cartoon network
Сообщений: 27434
Здравствуйте
или программа-клиент может запустить копию вашей программы с параметрами ком. строки,
тоже хотел про этот вариант сказать.

а то, сейчас API- модное слово, конечный потребитель не знает что это такое, но ему кто-то сказал, что это необходимо. как же, программа без апи, это плохо!
5 ноя 17, 12:00    [20928312]     Ответить | Цитировать Сообщить модератору
 Re: API у десктопного приложения - как сделать?  [new]
YuRock
Member

Откуда: Донецк
Сообщений: 2360
m52
У меня приложение 32-битное. Это значит, что стороннее 64-битное приложение не сможет использовать мою DLL ?
Не сможет
5 ноя 17, 12:36    [20928341]     Ответить | Цитировать Сообщить модератору
 Re: API у десктопного приложения - как сделать?  [new]
Dimitry Sibiryakov
Member

Откуда:
Сообщений: 43819

m52
Клиенты у моей CRM-программы разные и я не знаю, кто и как хочет взаимодействовать с
программой.

Ну так выясни. Устрой аукцион: кто за какой способ взаимодействия больше заплатит.

YuRock
Не сможет

Сможет, если это будет standalone COM server, но это тот ещё геморрой.

Posted via ActualForum NNTP Server 1.5

5 ноя 17, 14:12    [20928457]     Ответить | Цитировать Сообщить модератору
 Re: API у десктопного приложения - как сделать?  [new]
X-Cite
Member

Откуда: Минск
Сообщений: 928
Если под приложением есть БД, то 2 варианта.
1) Если надо что-то делать через API без запуска приложения, то пишется служба и выбрасывается API в виде SOAP + RESTfull
2) Если достаточно, когда приложение запущено, то делается то же самое только в приложении.

Кстати, самый главный вопрос. А что будет в API ?
5 ноя 17, 14:42    [20928496]     Ответить | Цитировать Сообщить модератору
 Re: API у десктопного приложения - как сделать?  [new]
Dimitry Sibiryakov
Member

Откуда:
Сообщений: 43819

X-Cite
Если под приложением есть БД, то 2 варианта.

Не, если под приложением есть БД, то никакого API вообще не требуется, достаточно просто
документировать таблицы.

Posted via ActualForum NNTP Server 1.5

5 ноя 17, 15:23    [20928553]     Ответить | Цитировать Сообщить модератору
 Re: API у десктопного приложения - как сделать?  [new]
Кроик Семён
Member

Откуда: СПб --> Dortmund
Сообщений: 5971
m52
Возникает вопрос: Как сделать API у десктопного приложения?


Конечно, можно в программе реализовать web-сервисы.
Но если по-простому, то предлагаю такое решение:

1) как уже говорили выше, для передачи данных вашей программе можно выделить какую-то папку и класть туда json/xml/csv/sqlite/любые другие файлы с оговоренной структурой. Папку можно не вшивать жестко в EXE-шник, а например задавать в настройках программы и хранить в реестре

2) точно так же ваша программа может отдавать файлами в ту же папку

3) далее, надо сообщить вашей программе, что есть файлы для обмена.
И тут предлагаю отлавливать windows - сообщения, отправляемые по SendMessage.
Можно отправить либо просто числовой код команды, либо вообще WM_COPYDATA с данными.
Кстати, SendMessage позволяет вернуть код
И еще, можно для вызова SendMessage сторонними программами, например из batch-скрипта, можно написать небольшую консольную утилитку, транслирующую параметры командной строки в параметр для SendMessage и возвращающую кодом возврата результат вызова функции.
6 ноя 17, 03:33    [20929433]     Ответить | Цитировать Сообщить модератору
 Re: API у десктопного приложения - как сделать?  [new]
X-Cite
Member

Откуда: Минск
Сообщений: 928
m52
Приложения, которые будут получать/передавать данные в программу - это могут быть любые приложения, написанные на чем угодно.
Передавать в программу нужно будет строки и возможно изображения (хотя изображение можно представить в виде текста).

Если это будет android приложение (написанное на Xamarin или Java или FireMonkey) которое с телефона должно передать изображение или строки в вашу программу, то варианты через шары, COM, Dll можно забыть. Только SOAP или REST. Или в виде отдельного сервиса или встраивать в ваше приложение непосредственно. Технологии уходят вперед, пора уже задумываться о SOA...
6 ноя 17, 21:37    [20930812]     Ответить | Цитировать Сообщить модератору
 Re: API у десктопного приложения - как сделать?  [new]
amsdev
Member

Откуда:
Сообщений: 39
Использовать RealThinClient SDK, с ним очень легко встроить в приложение http сервер который будет принимать команды АПИ в виде JSON.
10 ноя 17, 20:28    [20944886]     Ответить | Цитировать Сообщить модератору
 Re: API у десктопного приложения - как сделать?  [new]
Dimitry Sibiryakov
Member

Откуда:
Сообщений: 43819

amsdev
с ним очень легко встроить в приложение http сервер который будет принимать команды АПИ в
виде JSON.

Останется один вопрос: зачем мучиться с API вообще, если для его работы всё равно придётся
иметь запущенное приложение.

Posted via ActualForum NNTP Server 1.5

10 ноя 17, 20:59    [20944951]     Ответить | Цитировать Сообщить модератору
Топик располагается на нескольких страницах: [1] 2   вперед  Ctrl      все
Все форумы / Delphi Ответить