Создание простого веб-сервиса

Обсуждаются как существующие проекты (перевод документации, информационная система и т.п.), так и создание новых.

Модератор: Модераторы

wwswowsogon
постоялец
Сообщения: 157
Зарегистрирован: 23.12.2008 19:41:37

Создание простого веб-сервиса

Сообщение wwswowsogon »

Всем доброго времени суток!

По-видимому, скоро у меня дойдут руки до реализации проекта, описанного здесь.

Соответственно, возникает вопрос: как реализовать промежуточное звено - веб-сервис/сервер?

Требования к его функционалу несложные: он должен принять в сайта/html-странички набор параметров в количестве буквально нескольких штук, передать их в БД основного проекта (Firebird! :)), возможно, прочитать что-то из БД и отдать обратно результат в виде html-странички.

Ранее ничего подобного я не делал.

Варианты вижу следующие:

1) поднять любой стандартный веб-сервер, сделать пару модулей на PHP, отвечающих за приём/передачу и взаимодействие с БД. Всё :)
2) сделать некий свой веб-сервис, на Python / C++, делающий то же самое.

Более склоняюсь сейчас к первому варианту, как более простому, тем более, что PHP некоторым образом знаю.
Второй вариант рассматриваю больше как средство улучшить навыки программирования / строительства веб-интерфейсов на этих языках.

Возможно, я что-то упускаю.

Что скажете?
Аватара пользователя
Sharfik
энтузиаст
Сообщения: 836
Зарегистрирован: 20.07.2013 01:04:30

Сообщение Sharfik »

ИМХО, естественно все делать надо на FPC+Lazarus. Конкуренты нам не нужны. :) Но если "слабо")), то PHP смотрится лучше. Более гибкое, открытое решение способное на лету дорабатываться.
Если нужен "хайп", то C++ и Python. Но через пару лет придумают какой ни будь Slon++ или GO выстрелит и все будут орать что только на нем надо делать, и Питон плохой. А Java уже не модно, хотя обалденный язык. В одной книге по ассемблеру был замечательный абзац со следующим смыслом - у каждого языка программирования есть свое назначение. Каждый создавался под определенные задачи.
Вот, нарыл https://pythonist.ru/pochemu-iz-vseh-ya ... no-python/
Если верить этому материалу, то о Питоне можно сказать что он для тех кто любит помедленней и чтобы поменьше думать.

Оговорка: Я не помню что там у PHP с многопоточностью. Если нужно разделить будет по потокам обработку, то надо учитывать.
Аватара пользователя
Ichthyander
энтузиаст
Сообщения: 701
Зарегистрирован: 04.04.2007 08:32:43
Откуда: Астрахань
Контактная информация:

Сообщение Ichthyander »

Я не пойму почему бэкенд не на FPC-то не рассматриваете?. Есть нативная либа fcl-web, есть много других фреймворков. Я использую brookframework (brook4freepascal) https://github.com/risoflora/brookfreepascal https://github.com/risoflora/brookframework
wwswowsogon
постоялец
Сообщения: 157
Зарегистрирован: 23.12.2008 19:41:37

Сообщение wwswowsogon »

Sharfik писал(а):ИМХО, естественно все делать надо на FPC+Lazarus. Конкуренты нам не нужны. :)
Ichthyander писал(а):Я не пойму почему бэкенд не на FPC-то не рассматриваете?.
Что я ожидал увидеть, задав вопрос на форуме FPC :D

Ничего против FPC для этой цели не имею, сам его люблю и постоянно использую. Однако подозреваю, что документирование этой темы для указанных языков сильно лучше, чем для FPC. Соответственно, легче достичь желаемого. Про FCL-web слышал, но как с ней работать, не представляю на данный момент.

Многопоточность не нужна, сервис предполагается очень простым.
Аватара пользователя
Ichthyander
энтузиаст
Сообщения: 701
Зарегистрирован: 04.04.2007 08:32:43
Откуда: Астрахань
Контактная информация:

Сообщение Ichthyander »

wwswowsogon писал(а):то я ожидал увидеть, задав вопрос на форуме FPC :D
Тогда вопрос: зачем узнавать как сделать сервер не на FPC на форуме FPC? )
wwswowsogon писал(а):Ничего против FPC для этой цели не имею, сам его люблю и постоянно использую. Однако подозреваю, что документирование этой темы для указанных языков сильно лучше, чем для FPC
Из плюсов реализации: скорость и работа в той среде, к которому есть любовь и навык. Я бекенды делал и на PHP и FPC. Скажу, что FPC не так уж и плох как может показаться для разработки бекенда в Lazarus.
Просто многопоточность не понимаю к чему тут: можно сделать и так и сяк. Вообщем, дерзайте. Но, к примеру, создавая сервис на Питон логичнее было бы это сделать на форуме Питона
S_Gur
постоялец
Сообщения: 133
Зарегистрирован: 30.12.2018 21:17:42

Сообщение S_Gur »

https://wiki.lazarus.freepascal.org/fpWeb_Tutorial/ru

Я делал по этой технологии, в том числе и многопоточный. Особых проблем не нашел, все, что нужно, вроде бы фунциклирует
wwswowsogon
постоялец
Сообщения: 157
Зарегистрирован: 23.12.2008 19:41:37

Сообщение wwswowsogon »

Ichthyander писал(а):Тогда вопрос: зачем узнавать как сделать сервер не на FPC на форуме FPC? )
1) повторюсь, ничего не имею против FPC. Более того , я считаю его одним из лучших современных средств разработки, в сумме с Lazarus, особенно когда речь идет о нативном коде;
2) на этом форуме я давно, а на форме Пайтона меня нет :) ну и это раздел "Разное";
3) здесь довольно адекватные люди, к тому же у большинства из них уровень получше моего. Поэтому интересно выслушать мнения, кто как подходил бы к решению этой задачи.
Ichthyander писал(а):FPC не так уж и плох как может показаться для разработки бекенда в Lazarus.
не спорю, просто есть опасение наглухо застрять где-нибудь на полпути из-за элементарного незнания матчасти и какой-нибудь незаметной мелочи. Почему-то я почти уверен, что с PHP,
например, такого не произойдёт.

Возможно, сделаю и на FPC. Ну и, если что, придётся снова обращаться за помощью сюда :)

Добавлено спустя 2 минуты 44 секунды:
S_Gur писал(а):https://wiki.lazarus.freepascal.org/fpWeb_Tutorial/ru

Я делал по этой технологии, в том числе и многопоточный. Особых проблем не нашел, все, что нужно, вроде бы фунциклирует
Интересно, спасибо. Надо почитать мануалы.
S_Gur
постоялец
Сообщения: 133
Зарегистрирован: 30.12.2018 21:17:42

Сообщение S_Gur »

wwswowsogon, я делал на основе этого:

Код: Выделить всё

Пример веб-сервера

Это пример простого кроссплатформенного многопоточного веб-сервера.

program webserver;
 
{$mode objfpc}{$H+}
 
uses
  {$ifdef UNIX}
    cthreads, cmem,
  {$endif} 
  fphttpapp, httpdefs, httproute;
 
procedure route1(aReq: TRequest; aResp: TResponse);
begin
  aResp.content:='<html><body><h1>Route 1 The Default</h1></body></html>'
end;
 
procedure route2(aReq: TRequest; aResp: TResponse);
begin
  aResp.content:='<html><body><h1>Route 2</h1></body></html>'
end;
 
begin
  HTTPRouter.registerRoute('/', @route1, true);
  HTTPRouter.registerRoute('/route2', @route2);
  Application.port := 8080;
  Application.threaded := true;
  Application.initialize;
  Application.run;
end.
grot
новенький
Сообщения: 82
Зарегистрирован: 13.02.2010 15:33:03

Сообщение grot »

Ichthyander писал(а):Я не пойму почему бэкенд не на FPC-то не рассматриваете?. Есть нативная либа fcl-web, есть много других фреймворков. Я использую brookframework (brook4freepascal) https://github.com/risoflora/brookfreepascal https://github.com/risoflora/brookframework
Сам использую fcl-web -
но смотрел на brookframework "по-диагонали" и слету не заметил ничего примечательного ...

Итак, а почему brookframework ?
Аватара пользователя
Ichthyander
энтузиаст
Сообщения: 701
Зарегистрирован: 04.04.2007 08:32:43
Откуда: Астрахань
Контактная информация:

Сообщение Ichthyander »

Удобней и логичней чем fcl-web, более закончен для создание веб приложений.
Если брать brrokframework - рассчитан и отпимизирован на большую нагрузку. (на нем сделанвеб-сервис, наподобии конструктора сайта с тысячами сайтов), создающую минимальную нагрузку на рядовой виртуальный сервер.
Хорошо документирован не в пример другим либам FPC https://risoflora.github.io/brookfreepa ... index.html
При этом максимально близок к нативному fcl-web по структуре, во многим просто расширенная версия его.
Много примеров и куча плагинов (да, включая и мой)

Добавлено спустя 1 минуту 59 секунд:
Забыл написать: мастер создание веб-приложения от брук поможет выбрать тип (встроенные сервер, с демонизатором, fast-cgi, cgi и т.д.)
Alex2013
долгожитель
Сообщения: 3211
Зарегистрирован: 03.04.2013 11:59:44

Сообщение Alex2013 »

Смотри мою старую тему ( Извиняюсь картинки еще не все исправил ( старый хост картинок похоже тупо взломали ) ) .
Мыслить глобально ! (Среда разрабтки веб приложений )
За основу взял проект некого Тимура Абдулова :arrow: https://sites.google.com/site/timpascallib/veb-server
Аватара пользователя
sunjob
постоялец
Сообщения: 176
Зарегистрирован: 12.01.2011 14:19:54

Сообщение sunjob »

S_Gur писал(а):https://wiki.lazarus.freepascal.org/fpWeb_Tutorial/ru
Я делал по этой технологии, в том числе и многопоточный
день добрый.
потестировал fpWeb - так и не смог запустить даже на минимуме (плюс минус что-то можно запустить, но HtmlWebModule так и не осилил, падает либо сам лазарь во время создания проекта, либо приложение...)
могу предположить, что из-за линукса
поделитесь, кто на линухе разковырял это модуль?

исходные

Код: Выделить всё

- lazarus-3.6.0/3.8.0 gtk2/qt5
- fpc-3.2.2
- slackware 15.0
xchgeaxeax
постоялец
Сообщения: 198
Зарегистрирован: 11.05.2023 02:51:40

Сообщение xchgeaxeax »

А можно хоть чуть по подробнее описать последовательность действий для воспроизведения проблемы? Или может проект приложить, который падает.

Добавлено спустя 3 минуты 30 секунд:
Хотя зря я спрашивал. У меня вот TFPHttpServer даже при указании Port 8089 упорно биндится на 80, хотя у меня там nginx.

Добавлено спустя 2 минуты 11 секунд:
Тут я могу лишь посоветовать взять Brook framework и работать на нем. В нем более адекватный WebServer
MaratIsk
постоялец
Сообщения: 125
Зарегистрирован: 20.08.2009 18:15:20

Сообщение MaratIsk »

так web-service или web-service client?
Аватара пользователя
Ichthyander
энтузиаст
Сообщения: 701
Зарегистрирован: 04.04.2007 08:32:43
Откуда: Астрахань
Контактная информация:

Сообщение Ichthyander »

sunjob писал(а):потестировал fpWeb - так и не смог запустить даже на минимуме (плюс минус что-то можно запустить, но HtmlWebModule так и не осилил, падает либо сам лазарь во время создания проекта, либо приложение...)
Пробовал демо программы на fpWeb - вроде все работает, ничто не валится. Но в проде не использовал. В проде использую BrookFramework и BrookFreePascal.

Чисто интиутивно могу подсказать: поставить перехват ошибок, возможно просто тупо у вас исключения не ловятся, которые могут например возникать при разрыве соединений, парсинге JSON, неправильным HTTP запросе, да и что угодно еще

Добавлено спустя 1 минуту 9 секунд:
МОжет вам нужно libssl-dev в Linux установить. Только гадать
Ответить