C++ เดฒเต† เดฎเตˆเด•เตเดฐเต‹เดธเตผเดตเต€เดธเตเด•เตพ. เดซเดฟเด•เตเดทเดจเต‹ เดฏเดพเดฅเดพเตผเดคเตเดฅเตเดฏเดฎเต‹?

C++ เดฒเต† เดฎเตˆเด•เตเดฐเต‹เดธเตผเดตเต€เดธเตเด•เตพ. เดซเดฟเด•เตเดทเดจเต‹ เดฏเดพเดฅเดพเตผเดคเตเดฅเตเดฏเดฎเต‹?

เดˆ เดฒเต‡เด–เดจเดคเตเดคเดฟเตฝ เดžเดพเตป เดŽเด™เตเด™เดจเต† เด’เดฐเต เดŸเต†เด‚เดชเตเดฒเต‡เดฑเตเดฑเต (เด•เตเด•เตเด•เดฟเด•เดŸเตเดŸเตผ) เดธเตƒเดทเตเดŸเดฟเดšเตเดšเตเดตเต†เดจเตเดจเตเด‚ เดกเต‹เด•เตเด•เตผ/เดกเต‹เด•เตเด•เตผ-เด•เดฎเตเดชเต‹เดธเตเด‚ เด•เต‹เดจเตป เดชเดพเด•เตเด•เต‡เดœเต เดฎเดพเดจเต‡เดœเดฑเตเด‚ เด‰เดชเดฏเต‹เด—เดฟเดšเตเดšเต C++ เตฝ เด’เดฐเต REST API เดธเต‡เดตเดจเด‚ เดŽเดดเตเดคเตเดจเตเดจเดคเดฟเดจเตเดณเตเดณ เด’เดฐเต เด…เดจเตเดคเดฐเต€เด•เตเดทเด‚ เดŽเด™เตเด™เดจเต† เดธเดœเตเดœเต€เด•เดฐเดฟเดšเตเดšเตเดตเต†เดจเตเดจเตเด‚ เดธเด‚เดธเดพเดฐเดฟเด•เตเด•เตเด‚.

เด’เดฐเต เดฌเดพเด•เตเด•เต†เตปเดกเต เดกเต†เดตเดฒเดชเตเดชเดฑเดพเดฏเดฟ เดžเดพเตป เดชเด™เตเด•เต†เดŸเตเดคเตเดค เด…เดŸเตเดคเตเดค เดนเดพเด•เตเด•เดคเตเดคเดฃเดฟเตฝ, เด…เดŸเตเดคเตเดค เดฎเตˆเด•เตเดฐเต‹เดธเตผเดตเต€เดธเต เดŽเดดเตเดคเดพเตป เดŽเดจเตเดคเต เด‰เดชเดฏเต‹เด—เดฟเด•เตเด•เดฃเด‚ เดŽเดจเตเดจ เดšเต‹เดฆเตเดฏเด‚ เด‰เดฏเตผเดจเตเดจเต. เด‡เดคเตเดตเดฐเต† เดŽเดดเตเดคเดฟเดฏเดคเต†เดฒเตเดฒเดพเด‚ เดžเดพเดจเตเด‚ เดžเดพเดจเตเด‚ เดšเต‡เตผเดจเตเดจเต เดŽเดดเตเดคเดฟเดฏเดคเดพเดฃเต เดธเด–เดพเดตเต เดชเตˆเดคเตเดคเดฃเดฟเตฝ, เดŽเดจเตเดฑเต† เดธเดนเดชเตเดฐเดตเตผเดคเตเดคเด•เตป เดˆ เดฎเต‡เด–เดฒเดฏเดฟเตฝ เดตเดฟเดฆเด—เตเดฆเตเดงเดจเตเด‚ เดชเตเดฐเตŠเดซเดทเดฃเดฒเดพเดฏเดฟ เดตเดฟเด•เดธเดฟเดชเตเดชเดฟเดšเตเดš เดฌเดพเด•เตเด•เต†เตปเดกเตเด•เดณเตเด‚ เด†เดฏเดคเดฟเดจเดพเตฝ, เดžเดพเตป เดชเตŠเดคเตเดตเต† เด’เดฐเต เดŽเด‚เดฌเดกเดกเต เดธเดฟเดธเตเดฑเตเดฑเด‚ เดกเต†เดตเดฒเดชเตเดชเดฑเดพเดฏเดฟเดฐเดฟเด•เตเด•เต†, เดฎเดนเดคเตเดคเดพเดฏเดคเตเด‚ เดญเดฏเด™เตเด•เดฐเดตเตเดฎเดพเดฏ C++ เตฝ เดŽเดดเตเดคเตเด•เดฏเตเด‚, เดžเดพเตป เดฏเต‚เดฃเดฟเดตเต‡เดดเตเดธเดฟเดฑเตเดฑเดฟเดฏเดฟเตฝ เดจเดฟเดจเตเดจเต เดชเตˆเดคเตเดคเตบ เดชเด เดฟเด•เตเด•เตเด•เดฏเตเด‚ เดšเต†เดฏเตเดคเต.

เด…เดคเดฟเดจเดพเตฝ, เด‰เดฏเตผเดจเตเดจ เดฒเต‹เดกเต เดธเต‡เดตเดจเด‚ เดŽเดดเตเดคเดพเดจเตเดณเตเดณ เดšเตเดฎเดคเดฒ เดžเด™เตเด™เตพ เด…เดญเดฟเดฎเตเด–เต€เด•เดฐเดฟเดšเตเดšเต, เด…เดคเดฟเดฒเต‡เด•เตเด•เต เดตเดฐเตเดจเตเดจ เดกเดพเดฑเตเดฑ เดฎเตเตปเด•เต‚เดŸเตเดŸเดฟ เดชเตเดฐเต‹เดธเดธเตเดธเต เดšเต†เดฏเตเดฏเตเด•เดฏเตเด‚ เดกเดพเดฑเตเดฑเดพเดฌเต‡เดธเดฟเดฒเต‡เด•เตเด•เต เดŽเดดเตเดคเตเด•เดฏเตเด‚ เดšเต†เดฏเตเดฏเตเด• เดŽเดจเตเดจเดคเดพเดฏเดฟเดฐเตเดจเตเดจเต เดชเตเดฐเดงเดพเดจ เดšเตเดฎเดคเดฒ. เดฎเดฑเตเดฑเตŠเดฐเต เดธเตเดฎเต‹เด•เตเด•เต เดฌเตเดฐเต‡เด•เตเด•เดฟเดจเต เดถเต‡เดทเด‚, เด’เดฐเต C++ เดกเต†เดตเดฒเดชเตเดชเตผ เดŽเดจเตเดจ เดจเดฟเดฒเดฏเดฟเตฝ, เดชเตเดฐเต‹เดธเต เด‰เดชเดฏเต‹เด—เดฟเดšเตเดšเต เดˆ เดธเต‡เดตเดจเด‚ เดŽเดดเตเดคเดพเตป เด’เดฐเต เดธเตเดนเตƒเดคเตเดคเต เดจเดฟเตผเดฆเตเดฆเต‡เดถเดฟเดšเตเดšเต. เด‡เดคเต เดตเต‡เด—เดฎเต‡เดฑเดฟเดฏเดคเตเด‚ เด•เต‚เดŸเตเดคเตฝ เด‰เตฝเดชเตเดชเดพเดฆเดจเด•เตเดทเดฎเดคเดฏเตเดณเตเดณเดคเตเดฎเดพเดฏเดฟเดฐเดฟเด•เตเด•เตเด‚, เดชเตŠเดคเตเดตเต‡, เดŸเต€เดฎเดฟเดจเตเดฑเต† เดตเดฟเดญเดตเด™เตเด™เตพ เดŽเด™เตเด™เดจเต† เด•เตˆเด•เดพเดฐเตเดฏเด‚ เดšเต†เดฏเตเดฏเดฃเดฎเต†เดจเตเดจเต เดžเด™เตเด™เตพเด•เตเด•เต เด…เดฑเดฟเดฏเดพเดฎเต†เดจเตเดจเดคเดฟเตฝ เดœเต‚เดฑเดฟ เดธเดจเตเดคเต‹เดทเดฟเด•เตเด•เตเด‚. เด…เดคเดฟเดจเต เดžเดพเตป C++-เตฝ เด’เดฐเดฟเด•เตเด•เดฒเตเด‚ เด‡เดคเตเดคเดฐเด‚ เด•เดพเดฐเตเดฏเด™เตเด™เตพ เดšเต†เดฏเตเดคเดฟเดŸเตเดŸเดฟเดฒเตเดฒเต†เดจเตเดจเตเด‚ เดฌเดพเด•เตเด•เดฟเดฏเตเดณเตเดณ 20+ เดฎเดฃเดฟเด•เตเด•เต‚เตผ เด…เดจเตเดฏเต‹เดœเตเดฏเดฎเดพเดฏ เดฒเตˆเดฌเตเดฐเดฑเดฟเด•เตพ เดคเดฟเดฐเดฏเตเดจเตเดจเดคเดฟเดจเตเด‚ เด•เด‚เดชเตˆเตฝ เดšเต†เดฏเตเดฏเตเดจเตเดจเดคเดฟเดจเตเด‚ เดฒเดฟเด™เตเด•เต เดšเต†เดฏเตเดฏเตเดจเตเดจเดคเดฟเดจเตเด‚ เดŽเดณเตเดชเตเดชเดคเตเดคเดฟเตฝ เดตเดฟเดจเดฟเดฏเต‹เด—เดฟเด•เตเด•เดพเดฎเต†เดจเตเดจเตเด‚ เดžเดพเตป เดฎเดฑเตเดชเดŸเดฟ เดจเตฝเด•เดฟ. เดฒเดณเดฟเดคเดฎเดพเดฏเดฟ เดชเดฑเดžเตเดžเดพเตฝ, เดžเดพเตป เด•เต‹เดดเดฟเดฏเดฟเดฑเดšเตเดšเดฟ. เด…เดคเดพเดฃเต เดžเด™เตเด™เตพ เดคเต€เดฐเตเดฎเดพเดจเดฟเดšเตเดšเดคเตเด‚ เดถเดพเดจเตเดคเดฎเดพเดฏเดฟ เดชเตˆเดคเตเดคเดฃเดฟเตฝ เดŽเดฒเตเดฒเดพเด‚ เดชเต‚เตผเดคเตเดคเดฟเดฏเดพเด•เตเด•เดฟเดฏเดคเตเด‚.

เด‡เดชเตเดชเต‹เตพ, เดจเดฟเตผเดฌเดจเตเดงเดฟเดค เดธเตเดตเดฏเด‚ เด’เดฑเตเดฑเดชเตเดชเต†เดŸเตฝ เดธเดฎเดฏเดคเตเดคเต, C++ เตฝ เดธเต‡เดตเดจเด™เตเด™เตพ เดŽเด™เตเด™เดจเต† เดŽเดดเตเดคเดพเดฎเต†เดจเตเดจเต เด•เดฃเตเดŸเตเดชเดฟเดŸเดฟเด•เตเด•เดพเตป เดžเดพเตป เดคเต€เดฐเตเดฎเดพเดจเดฟเดšเตเดšเต. เด…เดจเตเดฏเต‹เดœเตเดฏเดฎเดพเดฏ เดฒเตˆเดฌเตเดฐเดฑเดฟ เดคเต€เดฐเตเดฎเดพเดจเดฟเด•เตเด•เตเด•เดฏเดพเดฏเดฟเดฐเตเดจเตเดจเต เด†เดฆเตเดฏเด‚ เดšเต†เดฏเตเดฏเต‡เดฃเตเดŸเดคเต. เดŽเดจเตเดฑเต† เดคเดฟเดฐเดžเตเดžเต†เดŸเตเดชเตเดชเต เดตเต€เดฃเต เดธเตเดจเต‡เดนเดถเดฒเดญเด‚, เด‡เดคเต เด’เดฌเตเดœเด•เตเดฑเตเดฑเต เด“เดฑเดฟเดฏเดจเตเดฑเดกเต เดถเตˆเดฒเดฟเดฏเดฟเตฝ เดŽเดดเตเดคเดฟเดฏเดคเดฟเดจเดพเตฝ เดธเดพเดงเดพเดฐเดฃ เดกเต‹เด•เตเดฏเตเดฎเต†เดจเตเดฑเต‡เดทเดจเตเด‚ เดชเตเดฐเดถเด‚เดธเดจเต€เดฏเดฎเดพเดฃเต. เด•เต‚เดŸเดพเดคเต†, เด’เดฐเต เด…เดธเด‚เดฌเตเดฒเดฟ เดธเด‚เดตเดฟเดงเดพเดจเด‚ เดคเดฟเดฐเดžเตเดžเต†เดŸเตเด•เตเด•เตเดจเตเดจเดคเดฟเดจเต†เด•เตเด•เตเดฑเดฟเดšเตเดšเต เดšเต‹เดฆเตเดฏเด‚ เด‰เดฏเตผเดจเตเดจเต. เดˆ เดธเดฎเดฏเด‚ เดตเดฐเต† เดžเดพเตป เดตเดฟเดทเตเดตเตฝ เดธเตเดฑเตเดฑเตเดกเดฟเดฏเต‹, IAR, เดตเต†เดฑเตเด‚ เดฎเต‡เด•เตเด•เต เดซเดฏเดฒเตเด•เตพ เดŽเดจเตเดจเดฟเดตเดฏเดฟเตฝ เดฎเดพเดคเตเดฐเดฎเต‡ เดชเตเดฐเดตเตผเดคเตเดคเดฟเดšเตเดšเดฟเดŸเตเดŸเตเดณเตเดณเต‚. เดˆ เดธเด‚เดตเดฟเดงเดพเดจเด™เตเด™เดณเตŠเดจเตเดจเตเด‚ เดŽเดจเตเดจเต† เด†เด•เตผเดทเดฟเดšเตเดšเดฟเดฒเตเดฒ, เด•เดพเดฐเดฃเด‚ เดฎเตเดดเตเดตเตป เดธเต‡เดตเดจเดตเตเด‚ เด’เดฐเต เดกเต‹เด•เตเด•เตผ เด•เดฃเตเดŸเต†เดฏเตโ€Œเดจเดฑเดฟเตฝ เดชเตเดฐเดตเตผเดคเตเดคเดฟเดชเตเดชเดฟเด•เตเด•เดพเตป เดžเดพเตป เดชเดฆเตเดงเดคเดฟเดฏเดฟเดŸเตเดŸเดฟเดฐเตเดจเตเดจเต. เด…เดชเตเดชเต‹เตพ เดžเดพเตป cmake เด‰เด‚ เดฐเดธเด•เดฐเดฎเดพเดฏ เด’เดฐเต เดชเดพเด•เตเด•เต‡เดœเต เดฎเดพเดจเต‡เดœเดฑเตเด‚ เด•เดฃเตเดŸเตเดชเดฟเดŸเดฟเด•เตเด•เดพเตป เดถเตเดฐเดฎเดฟเด•เตเด•เดพเตป เดคเต€เดฐเตเดฎเดพเดจเดฟเดšเตเดšเต เด•เต‹เดจเตป. เดŽเดฒเตเดฒเดพ เดกเดฟเดชเตปเดกเตปเดธเดฟเด•เดณเตเด‚ เด’เดฐเต เดซเดฏเดฒเดฟเตฝ เดฐเดœเดฟเดธเตเดฑเตเดฑเตผ เดšเต†เดฏเตเดฏเดพเตป เดˆ เดชเดพเด•เตเด•เต‡เดœเต เดฎเดพเดจเต‡เดœเตผ เดจเดฟเด™เตเด™เดณเต† เด…เดจเตเดตเดฆเดฟเดšเตเดšเต

conanfile.txt
[เด†เดตเดถเตเดฏเดฎเดพเดฃเต] poco/1.9.3
libpq/11.5

[เดœเดจเดฑเต‡เดฑเตเดฑเดฑเตเด•เตพ] cmake

เด•เต‚เดŸเดพเดคเต† เด’เดฐเต เดฒเดณเดฟเดคเดฎเดพเดฏ เด•เดฎเดพเตปเดกเต เด‰เดชเดฏเต‹เด—เดฟเดšเตเดšเต "conan install ." เด†เดตเดถเตเดฏเดฎเดพเดฏ เดฒเตˆเดฌเตเดฐเดฑเดฟเด•เตพ เด‡เตปเดธเตเดฑเตเดฑเดพเตพ เดšเต†เดฏเตเดฏเตเด•. เดธเตเดตเดพเดญเดพเดตเดฟเด•เดฎเดพเดฏเตเด‚, เด…เดคเดฟเตฝ เดฎเดพเดฑเตเดฑเด™เตเด™เตพ เดตเดฐเตเดคเตเดคเต‡เดฃเตเดŸเดคเตเด‚ เด†เดตเดถเตเดฏเดฎเดพเดฃเต

CMakeLists.txt

include(build/conanbuildinfo.cmake)
conan_basic_setup()
target_link_libraries(<target_name> ${CONAN_LIBS})

เด…เดคเดฟเดจเตเดถเต‡เดทเด‚, PostgreSQL-เดจเตŠเดชเตเดชเด‚ เดชเตเดฐเดตเตผเดคเตเดคเดฟเด•เตเด•เดพเตป เดžเดพเตป เด’เดฐเต เดฒเตˆเดฌเตเดฐเดฑเดฟ เดคเดฟเดฐเดฏเดพเตป เดคเตเดŸเด™เตเด™เดฟ, เด•เดพเดฐเดฃเด‚ เดŽเดจเดฟเด•เตเด•เต เดœเต‹เดฒเดฟ เดชเดฐเดฟเดšเดฏเด‚ เด•เตเดฑเดตเดพเดฏเดฟเดฐเตเดจเตเดจเต, เดžเด™เตเด™เดณเตเดŸเต† เดชเตˆเดคเตเดคเตบ เดธเต‡เดตเดจเด™เตเด™เดณเตเดฎเดพเดฏเดฟ เดธเด‚เดตเดฆเดฟเดšเตเดšเดคเตเด‚ เด‡เดคเดพเดฏเดฟเดฐเตเดจเตเดจเต. เดชเดฟเดจเตเดจเต† เดžเดพเตป เดŽเดจเตเดคเดพเดฃเต เดชเด เดฟเดšเตเดšเดคเต†เดจเตเดจเต เดจเดฟเด™เตเด™เตพเด•เตเด•เดฑเดฟเดฏเดพเดฎเต‹? เด‡เดคเต POCO-เดฏเดฟเดฒเดพเดฃเต! เดŽเดจเตเดจเดพเตฝ เด‡เดคเต POCO-เดฏเดฟเดฒเดพเดฃเต†เดจเตเดจเตเด‚ เด…เดคเต เดŽเด™เตเด™เดจเต† เดจเดฟเตผเดฎเตเดฎเดฟเด•เตเด•เดฃเดฎเต†เดจเตเดจเต เด…เดฑเดฟเดฏเดฟเดฒเตเดฒเต†เดจเตเดจเตเด‚ เด•เต‹เดจเดจเต เด…เดฑเดฟเดฏเดฟเดฒเตเดฒ; เดฑเดฟเดชเตเดชเต‹เดธเดฟเดฑเตเดฑเดฑเดฟเดฏเดฟเตฝ เด•เดพเดฒเดนเดฐเดฃเดชเตเดชเต†เดŸเตเดŸ เด’เดฐเต เด•เต‹เตบเดซเดฟเด—เดฑเต‡เดทเตป เดซเดฏเตฝ เด‰เดฃเตเดŸเต (เดˆ เดชเดฟเดถเด•เดฟเดจเต†เด•เตเด•เตเดฑเดฟเดšเตเดšเต เดžเดพเตป เด‡เดคเดฟเดจเด•เด‚ เดคเดจเตเดจเต† POCO เดฏเตเดŸเต† เดธเตเดฐเดทเตโ€ŒเดŸเดพเด•เตเด•เตพเด•เตเด•เต เดŽเดดเตเดคเดฟเดฏเดฟเดŸเตเดŸเตเดฃเตเดŸเต). เด‡เดคเดฟเดจเตผเดคเตเดฅเด‚ เดจเดฟเด™เตเด™เตพ เดฎเดฑเตเดฑเตŠเดฐเต เดฒเตˆเดฌเตเดฐเดฑเดฟ เดคเต‡เดŸเต‡เดฃเตเดŸเดฟเดตเดฐเตเดฎเต†เดจเตเดจเดพเดฃเต.

เดชเดฟเดจเตเดจเต† เดŽเดจเตเดฑเต† เดคเดฟเดฐเดžเตเดžเต†เดŸเตเดชเตเดชเต เดœเดจเดชเตเดฐเต€เดคเดฟ เด•เตเดฑเดžเตเดž เด’เดฐเต เดฒเตˆเดฌเตเดฐเดฑเดฟเดฏเดฟเตฝ เดตเต€เดฃเต libpg. เดžเดพเตป เด…เดตเดฟเดถเตเดตเดธเดจเต€เดฏเดฎเดพเด‚เดตเดฟเดงเด‚ เดญเดพเด—เตเดฏเดตเดพเดจเดพเดฏเดฟเดฐเตเดจเตเดจเต, เด…เดคเต เด‡เดคเดฟเดจเด•เด‚ เด•เต‹เดจเดจเดฟเดฒเดพเดฏเดฟเดฐเตเดจเตเดจเต, เด•เต‚เดŸเดพเดคเต† เด’เดคเตเดคเตเดšเต‡เดฐเตเด•เดฏเตเด‚ เด•เต‚เดŸเตเดŸเดฟเดšเตเดšเต‡เตผเด•เตเด•เตเด•เดฏเตเด‚ เดšเต†เดฏเตเดคเต.

เด…เดญเตเดฏเตผเดคเตเดฅเดจเด•เตพ เดชเตเดฐเต‹เดธเดธเตเดธเต เดšเต†เดฏเตเดฏเดพเตป เด•เดดเดฟเดฏเตเดจเตเดจ เด’เดฐเต เดธเต‡เดตเดจ เดŸเต†เด‚เดชเตเดฒเต‡เดฑเตเดฑเต เดŽเดดเตเดคเตเด• เดŽเดจเตเดจเดคเดพเดฏเดฟเดฐเตเดจเตเดจเต เด…เดŸเตเดคเตเดค เด˜เดŸเตเดŸเด‚.
Poco::Util::ServerApplication-เตฝ เดจเดฟเดจเตเดจเต เดžเด™เตเด™เดณเตเดŸเต† TemplateServerApp เด•เตเดฒเดพเดธเต เด…เดตเด•เดพเดถเดฎเดพเด•เตเด•เตเด•เดฏเตเด‚ เดชเตเดฐเดงเดพเดจ เดฐเต€เดคเดฟ เด…เดธเดพเดงเตเดตเดพเด•เตเด•เตเด•เดฏเตเด‚ เดตเต‡เดฃเด‚.

TemplateServerApp

#pragma once

#include <string>
#include <vector>
#include <Poco/Util/ServerApplication.h>

class TemplateServerApp : public Poco::Util::ServerApplication
{
    protected:
        int main(const std::vector<std::string> &);
};

int TemplateServerApp::main(const vector<string> &)
{
    HTTPServerParams* pParams = new HTTPServerParams;

    pParams->setMaxQueued(100);
    pParams->setMaxThreads(16);

    HTTPServer s(new TemplateRequestHandlerFactory, ServerSocket(8000), pParams);

    s.start();
    cerr << "Server started" << endl;

    waitForTerminationRequest();  // wait for CTRL-C or kill

    cerr << "Shutting down..." << endl;
    s.stop();

    return Application::EXIT_OK;
}

เดชเตเดฐเดงเดพเดจ เดฐเต€เดคเดฟเดฏเดฟเตฝ เดจเดฎเตเดฎเตพ เดชเดฐเดพเดฎเต€เดฑเตเดฑเดฑเตเด•เตพ เดธเดœเตเดœเดฎเดพเด•เตเด•เดฃเด‚: เดชเต‹เตผเดŸเตเดŸเต, เดคเตเดฐเต†เดกเตเด•เดณเตเดŸเต† เดŽเดฃเตเดฃเด‚, เด•เตเดฏเต‚ เดตเดฒเตเดชเตเดชเด‚. เดเดฑเตเดฑเดตเตเด‚ เดชเตเดฐเดงเดพเดจเดฎเดพเดฏเดฟ, เด‡เตปเด•เดฎเดฟเด‚เด—เต เด…เดญเตเดฏเตผเดคเตเดฅเดจเด•เตพเด•เตเด•เดพเดฏเดฟ เดจเดฟเด™เตเด™เตพ เด’เดฐเต เดนเดพเตปเดกเตโ€Œเดฒเตผ เดตเตเดฏเด•เตเดคเดฎเดพเด•เตเด•เดฃเด‚. เด’เดฐเต เดซเดพเด•เตเดŸเดฑเดฟ เดธเตƒเดทเตเดŸเดฟเดšเตเดšเดพเดฃเต เด‡เดคเต เดšเต†เดฏเตเดฏเตเดจเตเดจเดคเต

TemplateRequestHandlerFactory

class TemplateRequestHandlerFactory : public HTTPRequestHandlerFactory
{
public:
    virtual HTTPRequestHandler* createRequestHandler(const HTTPServerRequest & request)
    {
        return new TemplateServerAppHandler;
    }
};

เดŽเดจเตเดฑเต† เด•เดพเดฐเตเดฏเดคเตเดคเดฟเตฝ, เด‡เดคเต เดŽเดฒเตเดฒเดพ เดธเดฎเดฏเดคเตเดคเตเด‚ เด’เดฐเต‡ เดนเดพเตปเดกเตโ€Œเดฒเตผ เดธเตƒเดทเตเดŸเดฟเด•เตเด•เตเดจเตเดจเต - TemplateServerAppHandler. เด‡เดตเดฟเดŸเต†เดฏเดพเดฃเต เดจเดฎเตเด•เตเด•เต เดจเดฎเตเดฎเตเดŸเต† เดฌเดฟเดธเดฟเดจเดธเตเดธเต เดฏเตเด•เตเดคเดฟ เดธเตเดฅเดพเดชเดฟเด•เตเด•เดพเตป เด•เดดเดฟเดฏเตเดจเตเดจเดคเต.

TemplateServerAppHandler

class TemplateServerAppHandler : public HTTPRequestHandler
{
public:
    void handleRequest(HTTPServerRequest &req, HTTPServerResponse &resp)
    {
        URI uri(req.getURI());
        string method = req.getMethod();

        cerr << "URI: " << uri.toString() << endl;
        cerr << "Method: " << req.getMethod() << endl;

        StringTokenizer tokenizer(uri.getPath(), "/", StringTokenizer::TOK_TRIM);
        HTMLForm form(req,req.stream());

        if(!method.compare("POST"))
        {
            cerr << "POST" << endl;
        }
        else if(!method.compare("PUT"))
        {
            cerr << "PUT" << endl;
        }
        else if(!method.compare("DELETE"))
        {
            cerr << "DELETE" << endl;
        }

        resp.setStatus(HTTPResponse::HTTP_OK);
        resp.setContentType("application/json");
        ostream& out = resp.send();

        out << "{"hello":"heh"}" << endl;
        out.flush();
    }
};

PostgreSQL-เตฝ เดชเตเดฐเดตเตผเดคเตเดคเดฟเด•เตเด•เดพเตป เดžเดพเตป เด’เดฐเต เด•เตเดฒเดพเดธเต เดŸเต†เด‚เดชเตเดฒเต‡เดฑเตเดฑเตเด‚ เดธเตƒเดทเตเดŸเดฟเดšเตเดšเต. เด’เดฐเต เดชเดŸเตเดŸเดฟเด• เดธเตƒเดทเตเดŸเดฟเด•เตเด•เตเดจเตเดจเดคเต เดชเต‹เดฒเต†เดฏเตเดณเตเดณ เดฒเดณเดฟเดคเดฎเดพเดฏ SQL เดจเดฟเตผเดตเดนเดฟเด•เตเด•เตเดจเตเดจเดคเดฟเดจเต, เด’เดฐเต เดฐเต€เดคเดฟเดฏเตเดฃเตเดŸเต ExecuteSQL(). เด•เต‚เดŸเตเดคเตฝ เดธเด™เตเด•เต€เตผเดฃเตเดฃเดฎเดพเดฏ เด…เดจเตเดตเต‡เดทเดฃเด™เตเด™เตพเด•เตเด•เต‹ โ€‹โ€‹เดกเดพเดฑเตเดฑ เดตเต€เดฃเตเดŸเต†เดŸเตเด•เตเด•เดฒเดฟเดจเต‹, เดจเดฟเด™เตเด™เตพ เดตเดดเดฟ เด’เดฐเต เด•เดฃเด•เตเดทเตป เดจเต‡เดŸเต‡เดฃเตเดŸเดคเตเดฃเตเดŸเต เด—เต†เดฑเตเดฑเตเด•เดฃเด•เตเดทเตป() เด•เต‚เดŸเดพเดคเต† libpg API เด‰เดชเดฏเต‹เด—เดฟเด•เตเด•เตเด•. (เด’เดฐเตเดชเด•เตเดทเต‡ เดชเดฟเดจเตเดจเต€เดŸเต เดžเดพเตป เดˆ เด…เดจเต€เดคเดฟ เดคเดฟเดฐเตเดคเตเดคเตเด‚).

เดกเดพเดฑเตเดฑเดพเดฌเต‡เดธเต

#pragma once

#include <memory>
#include <mutex>
#include <libpq-fe.h>

class Database
{
public:
    Database();
    std::shared_ptr<PGconn> GetConnection() const;
    bool ExecuteSQL(const std::string& sql);

private:
    void establish_connection();
    void LoadEnvVariables();

    std::string m_dbhost;
    int         m_dbport;
    std::string m_dbname;
    std::string m_dbuser;
    std::string m_dbpass;

    std::shared_ptr<PGconn>  m_connection;
};

เดกเดพเดฑเตเดฑเดพเดฌเต‡เดธเดฟเดฒเต‡เด•เตเด•เต เดฌเดจเตเดงเดฟเดชเตเดชเดฟเด•เตเด•เตเดจเตเดจเดคเดฟเดจเตเดณเตเดณ เดŽเดฒเตเดฒเดพ เดชเดพเดฐเดพเดฎเต€เดฑเตเดฑเดฑเตเด•เดณเตเด‚ เดชเดฐเดฟเดธเตเดฅเดฟเดคเดฟเดฏเดฟเตฝ เดจเดฟเดจเตเดจเต เดŽเดŸเตเดคเตเดคเดคเดพเดฃเต, เด…เดคเดฟเดจเดพเตฝ เดจเดฟเด™เตเด™เตพ .env เดซเดฏเตฝ เดธเตƒเดทเตเดŸเดฟเด•เตเด•เตเด•เดฏเตเด‚ เด•เต‹เตบเดซเดฟเด—เตผ เดšเต†เดฏเตเดฏเตเด•เดฏเตเด‚ เดšเต†เดฏเตเดฏเต‡เดฃเตเดŸเดคเตเดฃเตเดŸเต.

.เดŽเด‚เดตเต

DATABASE_NAME=template
DATABASE_USER=user
DATABASE_PASSWORD=password
DATABASE_HOST=postgres
DATABASE_PORT=5432

เดจเดฟเด™เตเด™เตพเด•เตเด•เต เดŽเดฒเตเดฒเดพ เด•เต‹เดกเตเด‚ เด‡เดตเดฟเดŸเต† เด•เดพเดฃเดพเด‚ เด—เดฟเดคเตเดคเดฌเต.

C++ เดฒเต† เดฎเตˆเด•เตเดฐเต‹เดธเตผเดตเต€เดธเตเด•เตพ. เดซเดฟเด•เตเดทเดจเต‹ เดฏเดพเดฅเดพเตผเดคเตเดฅเตเดฏเดฎเต‹?

เด‡เดชเตเดชเต‹เตพ dockerfile, docker-compose.yml เดŽเดจเตเดจเดฟเดต เดŽเดดเตเดคเตเดจเตเดจเดคเดฟเดจเตเดฑเต† เด…เดตเดธเดพเดจ เด˜เดŸเตเดŸเด‚ เดตเดฐเตเดจเตเดจเต. เดธเดคเตเดฏเด‚ เดชเดฑเดžเตเดžเดพเตฝ, เด‡เดคเดฟเดจเต เด•เต‚เดŸเตเดคเตฝ เดธเดฎเดฏเดฎเต†เดŸเตเดคเตเดคเต, เดžเดพเตป เด’เดฐเต เดจเต‹เดฌเดพเดฏเดคเดฟเดจเดพเตฝ เดฎเดพเดคเตเดฐเดฎเดฒเตเดฒ, เด“เดฐเต‹ เดคเดตเดฃเดฏเตเด‚ เดฒเตˆเดฌเตเดฐเดฑเดฟเด•เตพ เดชเตเดจเตผเดจเดฟเตผเดฎเตเดฎเดฟเด•เตเด•เต‡เดฃเตเดŸเดคเต เด†เดตเดถเตเดฏเดฎเดพเดฏเดฟเดฐเตเดจเตเดจเต, เดฎเดฑเดฟเดšเตเดšเต เด•เต‹เดจเดจเตเดฑเต† เด•เตเดดเดชเตเดชเด™เตเด™เตพ เด•เดพเดฐเดฃเด‚. เด‰เดฆเดพเดนเดฐเดฃเดคเตเดคเดฟเดจเต, conan เดกเต—เตบเดฒเต‹เดกเต เดšเต†เดฏเตเดฏเตเดจเตเดจเดคเดฟเดจเตเด‚ เด‡เตปเดธเตเดฑเตเดฑเดพเตพ เดšเต†เดฏเตเดฏเตเดจเตเดจเดคเดฟเดจเตเด‚ เด†เดตเดถเตเดฏเดฎเดพเดฏ เดกเดฟเดชเตปเดกเตปเดธเดฟเด•เตพ เดจเดฟเตผเดฎเตเดฎเดฟเด•เตเด•เตเดจเตเดจเดคเดฟเดจเตเด‚, เด…เดคเต โ€œconan install .โ€ เดกเต—เตบเดฒเต‹เดกเต เดšเต†เดฏเตโ€Œเดคเดพเตฝ เดชเต‹เดฐเดพ, เด…เดคเต -s compiler.libcxx=libstdc++11 เดชเดพเดฐเดพเดฎเต€เดฑเตเดฑเตผ เด•เต‚เดŸเดฟ เดจเตฝเด•เต‡เดฃเตเดŸเดคเตเดฃเตเดŸเต, เด…เดฒเตเดฒเดพเดคเตเดคเดชเด•เตเดทเด‚ เดจเดฟเด™เตเด™เดณเตเดŸเต† เด†เดชเตเดฒเดฟเด•เตเด•เต‡เดทเตป เดฒเดฟเด™เตเด•เต เดšเต†เดฏเตเดฏเตเดจเตเดจ เด˜เดŸเตเดŸเดคเตเดคเดฟเตฝ เดจเดฟเด™เตเด™เตพเด•เตเด•เต เด’เดฐเต เด•เต‚เดŸเตเดŸเด‚ เดชเดฟเดถเด•เตเด•เตพ เด‰เดฃเตเดŸเดพเด•เดพเตป เดธเดพเดงเตเดฏเดคเดฏเตเดฃเตเดŸเต. เด•เตเดฑเดšเตเดšเต เดฎเดฃเดฟเด•เตเด•เต‚เดฑเตเด•เดณเดพเดฏเดฟ เดžเดพเตป เดˆ เดชเดฟเดถเด•เดฟเตฝ เด•เตเดŸเตเด™เตเด™เดฟเด•เตเด•เดฟเดŸเด•เตเด•เตเด•เดฏเดพเดฃเต, เด•เตเดฑเดžเตเดž เดธเดฎเดฏเดคเตเดคเดฟเดจเตเดณเตเดณเดฟเตฝ เดˆ เดชเตเดฐเดถเตเดจเด‚ เดชเดฐเดฟเดนเดฐเดฟเด•เตเด•เดพเตป เดˆ เดฒเต‡เด–เดจเด‚ เดฎเดฑเตเดฑเตเดณเตเดณเดตเดฐเต† เดธเดนเดพเดฏเดฟเด•เตเด•เตเดฎเต†เดจเตเดจเต เดžเดพเตป เดชเตเดฐเดคเต€เด•เตเดทเดฟเด•เตเด•เตเดจเตเดจเต.

เด…เดŸเตเดคเตเดคเดคเดพเดฏเดฟ, docker-compose.yml เดŽเดดเตเดคเดฟเดฏ เดถเต‡เดทเด‚, เดŽเดจเตเดฑเต† เดธเตเดนเตƒเดคเตเดคเดฟเดจเตเดฑเต† เด‰เดชเดฆเต‡เดถเดชเตเดฐเด•เดพเดฐเด‚, เดžเดพเตป เดชเดฟเดจเตเดคเตเดฃ เดšเต‡เตผเดคเตเดคเต เด•เตเด•เตเด•เดฟ เดฎเตเดฑเดฟเด•เตเด•เตเดจเตเดจ เด•เตบเดธเต‹เดณเดฟเตฝ "cookiecutter" เดŽเดจเตเดจเต เดจเตฝเด•เดฟเด•เตเด•เตŠเดฃเตเดŸเต, เด‡เดทเตโ€ŒเดŸเดพเดจเตเดธเตƒเดคเดฎเดพเด•เตเด•เดฟเดฏ เดชเดฐเดฟเดคเดธเตเดฅเดฟเดคเดฟเดฏเตเด‚ PostgreSQL เด‡เตปเดธเตเดฑเตเดฑเดพเดณเตเดฎเตเดณเตเดณ C++-เตฝ เด’เดฐเต REST API เดธเต‡เดตเดจเดคเตเดคเดฟเดจเดพเดฏเดฟ เด‡เดชเตเดชเต‹เตพ เดจเดฟเด™เตเด™เตพเด•เตเด•เต เด’เดฐเต เดชเต‚เตผเดฃเตเดฃเดฎเดพเดฏ เดŸเต†เด‚เดชเตเดฒเต‡เดฑเตเดฑเต เดธเตเดตเดจเตเดคเดฎเดพเด•เตเด•เดพเด‚. https://github.com/KovalevVasiliy/cpp_rest_api_template.git" เดคเตเดŸเตผเดจเตเดจเต "เดกเต‹เด•เตเด•เตผ-เด•เด‚เดชเต‹เดธเต เด…เดชเตเดชเต -เดฌเดฟเตฝเดกเต".

เดฎเดฟเด•เดšเตเดšเดคเตเด‚ เดถเด•เตเดคเดตเตเดฎเดพเดฏ, เดŽเดจเตเดจเดพเตฝ C++ เดชเต‹เดฒเตเดณเตเดณ เดตเดฟเดšเดฟเดคเตเดฐเดฎเดพเดฏ เดญเดพเดทเดฏเดฟเตฝ REST API เด†เดชเตเดฒเดฟเด•เตเด•เต‡เดทเดจเตเด•เตพ เดตเดฟเด•เดธเดฟเดชเตเดชเดฟเด•เตเด•เตเดจเตเดจเดคเดฟเดจเตเดณเตเดณ เดฌเตเดฆเตเดงเดฟเดฎเตเดŸเตเดŸเตเดณเตเดณ เดชเดพเดคเดฏเดฟเตฝ เดคเตเดŸเด•เตเด•เด•เตเด•เดพเตผเด•เตเด•เต เดˆ เดŸเต†เด‚เดชเตเดฒเต‡เดฑเตเดฑเต เดธเดนเดพเดฏเดฟเด•เตเด•เตเดฎเต†เดจเตเดจเต เดžเดพเตป เดชเตเดฐเดคเต€เด•เตเดทเดฟเด•เตเด•เตเดจเตเดจเต.
เด•เต‚เดŸเดพเดคเต†, เด‡เดตเดฟเดŸเต† เดตเดพเดฏเดฟเด•เตเด•เดพเตป เดžเดพเตป เดตเดณเดฐเต† เดถเตเดชเดพเตผเดถ เดšเต†เดฏเตเดฏเตเดจเตเดจเต เด‡เดคเต เดฒเต‡เด–เดจเด‚. POCO เด‰เดชเดฏเต‹เด—เดฟเดšเตเดšเต เดŽเด™เตเด™เดจเต† เดชเตเดฐเดตเตผเดคเตเดคเดฟเด•เตเด•เดพเดฎเต†เดจเตเดจเตเด‚ เดจเดฟเด™เตเด™เดณเตเดŸเต† เดธเตเดตเดจเตเดคเด‚ REST API เดธเต‡เดตเดจเด‚ เดŽเด™เตเด™เดจเต† เดŽเดดเตเดคเดพเดฎเต†เดจเตเดจเตเด‚ เด‡เดคเต เด•เต‚เดŸเตเดคเตฝ เดตเดฟเดถเดฆเดฎเดพเดฏเดฟ เดตเดฟเดถเดฆเต€เด•เดฐเดฟเด•เตเด•เตเดจเตเดจเต.

เด…เดตเดฒเด‚เดฌเด‚: www.habr.com

เด’เดฐเต เด…เดญเดฟเดชเตเดฐเดพเดฏเด‚ เดšเต‡เตผเด•เตเด•เตเด•