C++ เจตเจฟเฉฑเจš เจฎเจพเจˆเจ•เฉเจฐเฉ‹ เจธเจฐเจตเจฟเจธเจฟเจœเจผเฅค เจ•เจฒเจชเจจเจพ เจœเจพเจ‚ เจ…เจธเจฒเฉ€เจ…เจค?

C++ เจตเจฟเฉฑเจš เจฎเจพเจˆเจ•เฉเจฐเฉ‹ เจธเจฐเจตเจฟเจธเจฟเจœเจผเฅค เจ•เจฒเจชเจจเจพ เจœเจพเจ‚ เจ…เจธเจฒเฉ€เจ…เจค?

เจ‡เจธ เจฒเฉ‡เจ– เจตเจฟเฉฑเจš เจฎเฉˆเจ‚ เจ‡เจธ เจฌเจพเจฐเฉ‡ เจ—เฉฑเจฒ เจ•เจฐเจพเจ‚เจ—เจพ เจ•เจฟ เจฎเฉˆเจ‚ เจ‡เฉฑเจ• เจŸเฉˆเจ‚เจชเจฒเฉ‡เจŸ (เจ•เฉ‚เจ•เฉ€เจ•เจŸเจฐ) เจ•เจฟเจตเฉ‡เจ‚ เจฌเจฃเจพเจ‡เจ† เจ…เจคเฉ‡ เจกเฉŒเจ•เจฐ/เจกเฉŒเจ•เจฐ-เจ•เฉฐเจชเฉ‹เจœเจผ เจ…เจคเฉ‡ เจ•เฉŒเจจเจจ เจชเฉˆเจ•เฉ‡เจœ เจฎเฉˆเจจเฉ‡เจœเจฐ เจฆเฉ€ เจตเจฐเจคเฉ‹เจ‚ เจ•เจฐเจ•เฉ‡ C++ เจตเจฟเฉฑเจš เจ‡เฉฑเจ• REST API เจธเฉ‡เจตเจพ เจฒเจฟเจ–เจฃ เจฒเจˆ เจ‡เฉฑเจ• เจตเจพเจคเจพเจตเจฐเจฃ เจธเจฅเจพเจชเจค เจ•เฉ€เจคเจพเฅค

เจ…เจ—เจฒเฉ‡ เจนเฉˆเจ•เจพเจฅเจจ เจฆเฉ‡ เจฆเฉŒเจฐเจพเจจ, เจœเจฟเจธ เจตเจฟเฉฑเจš เจฎเฉˆเจ‚ เจ‡เฉฑเจ• เจฌเฉˆเจ•เจเจ‚เจก เจกเจฟเจตเฉˆเจฒเจชเจฐ เจตเจœเฉ‹เจ‚ เจนเจฟเฉฑเจธเจพ เจฒเจฟเจ† เจธเฉ€, เจ‡เจน เจธเจตเจพเจฒ เจ‰เฉฑเจ เจฟเจ† เจ•เจฟ เจ…เจ—เจฒเฉ€ เจฎเจพเจˆเจ•เฉเจฐเฉ‹เจธเจฐเจตเจฟเจธ เจจเฉ‚เฉฐ เจฒเจฟเจ–เจฃ เจฒเจˆ เจ•เฉ€ เจตเจฐเจคเจฃเจพ เจนเฉˆเฅค เจนเฉเจฃ เจคเฉฑเจ• เจœเฉ‹ เจตเฉ€ เจฒเจฟเจ–เจฟเจ† เจ—เจฟเจ† เจนเฉˆ, เจ‰เจน เจธเจญ เจ•เฉเจ เจฎเฉ‡เจฐเฉ‡ เจ…เจคเฉ‡ เจฎเฉ‡เจฐเฉ‡ เจฆเฉเจ†เจฐเจพ เจฒเจฟเจ–เจฟเจ† เจ—เจฟเจ† เจธเฉ€ เจ•เจพเจฎเจฐเฉ‡เจก เจชเจพเจˆเจฅเจจ เจตเจฟเฉฑเจš, เจ•เจฟเจ‰เจ‚เจ•เจฟ เจฎเฉ‡เจฐเจพ เจธเจนเจฟเจ•เจฐเจฎเฉ€ เจ‡เจธ เจ–เฉ‡เจคเจฐ เจตเจฟเฉฑเจš เจ‡เฉฑเจ• เจฎเจพเจนเจฐ เจธเฉ€ เจ…เจคเฉ‡ เจชเฉ‡เจธเจผเฉ‡เจตเจฐ เจคเฉŒเจฐ 'เจคเฉ‡ เจฌเฉˆเจ•เจเจ‚เจก เจตเจฟเจ•เจธเจค เจ•เฉ€เจคเจพ เจ—เจฟเจ† เจธเฉ€, เจœเจฆเฉ‹เจ‚ เจ•เจฟ เจฎเฉˆเจ‚ เจ†เจฎ เจคเฉŒเจฐ 'เจคเฉ‡ เจ‡เฉฑเจ• เจเจฎเจฌเฉ‡เจกเจก เจธเจฟเจธเจŸเจฎ เจกเจฟเจตเฉˆเจฒเจชเจฐ เจธเฉ€ เจ…เจคเฉ‡ เจฎเจนเจพเจจ เจ…เจคเฉ‡ เจญเจฟเจ†เจจเจ• C++ เจตเจฟเฉฑเจš เจฒเจฟเจ–เจฟเจ† เจธเฉ€, เจ…เจคเฉ‡ เจฎเฉˆเจ‚ เจนเฉเจฃเฉ‡ เจฏเฉ‚เจจเฉ€เจตเจฐเจธเจฟเจŸเฉ€ เจตเจฟเฉฑเจš เจชเจพเจˆเจฅเจจ เจธเจฟเฉฑเจ–เจฟเจ† เจนเฉˆเฅค

เจ‡เจธ เจฒเจˆ, เจธเจพเจจเฉ‚เฉฐ เจ‡เฉฑเจ• เจ‰เฉฑเจš-เจฒเฉ‹เจก เจธเฉ‡เจตเจพ เจฒเจฟเจ–เจฃ เจฆเฉ‡ เจ•เฉฐเจฎ เจฆเจพ เจธเจพเจนเจฎเจฃเจพ เจ•เจฐเจจเจพ เจชเจฟเจ†, เจœเจฟเจธเจฆเจพ เจฎเฉเฉฑเจ– เจ•เฉฐเจฎ เจ‡เจธ เจตเจฟเฉฑเจš เจ†เจ‰เจฃ เจตเจพเจฒเฉ‡ เจกเฉ‡เจŸเจพ เจจเฉ‚เฉฐ เจชเฉเจฐเฉ€เจชเฉเจฐเฉ‹เจธเฉˆเจธ เจ•เจฐเจจเจพ เจ…เจคเฉ‡ เจ‡เจธเจจเฉ‚เฉฐ เจกเฉ‡เจŸเจพเจฌเฉ‡เจธ เจตเจฟเฉฑเจš เจฒเจฟเจ–เจฃเจพ เจธเฉ€เฅค เจ…เจคเฉ‡ เจ‡เฉฑเจ• เจนเฉ‹เจฐ เจธเจฎเฉ‹เจ• เจฌเฉเจฐเฉ‡เจ• เจคเฉ‹เจ‚ เจฌเจพเจ…เจฆ, เจ‡เฉฑเจ• เจฆเฉ‹เจธเจค เจจเฉ‡ เจธเฉเจเจพเจ… เจฆเจฟเฉฑเจคเจพ เจ•เจฟ เจฎเฉˆเจ‚, เจ‡เฉฑเจ• C++ เจกเจฟเจตเฉˆเจฒเจชเจฐ เจตเจœเฉ‹เจ‚, เจ‡เจธ เจธเฉ‡เจตเจพ เจจเฉ‚เฉฐ เจชเฉ‡เจธเจผเจฟเจ†เจ‚ เจฆเฉ€ เจตเจฐเจคเฉ‹เจ‚ เจ•เจฐเจ•เฉ‡ เจฒเจฟเจ–เจพเจ‚เฅค เจ‡เจธ เจฆเฉ€ เจฆเจฒเฉ€เจฒ เจ‡เจน เจนเฉˆ เจ•เจฟ เจ‡เจน เจคเฉ‡เจœเจผ, เจตเจงเฉ‡เจฐเฉ‡ เจฒเจพเจญเจ•เจพเจฐเฉ€, เจ…เจคเฉ‡ เจ†เจฎ เจคเฉŒเจฐ 'เจคเฉ‡, เจœเจฟเจŠเจฐเฉ€ เจ‡เจธ เจ—เฉฑเจฒ เจคเฉ‹เจ‚ เจ–เฉเจธเจผ เจนเฉ‹เจตเฉ‡เจ—เฉ€ เจ•เจฟ เจ…เจธเฉ€เจ‚ เจŸเฉ€เจฎ เจฆเฉ‡ เจธเจฐเฉ‹เจคเจพเจ‚ เจฆเจพ เจชเฉเจฐเจฌเฉฐเจงเจจ เจ•เจฟเจตเฉ‡เจ‚ เจ•เจฐเจจเจพ เจœเจพเจฃเจฆเฉ‡ เจนเจพเจ‚เฅค เจœเจฟเจธ เจฆเจพ เจฎเฉˆเจ‚ เจœเจตเจพเจฌ เจฆเจฟเฉฑเจคเจพ เจ•เจฟ เจฎเฉˆเจ‚ C++ เจตเจฟเฉฑเจš เจ…เจœเจฟเจนเจพ เจ•เฉฐเจฎ เจ•เจฆเฉ‡ เจจเจนเฉ€เจ‚ เจ•เฉ€เจคเจพ เจธเฉ€ เจ…เจคเฉ‡ เจฌเจพเจ•เฉ€ เจฌเจšเฉ‡ 20+ เจ˜เฉฐเจŸเฉ‡ เจ†เจธเจพเจจเฉ€ เจจเจพเจฒ เจขเฉเจ•เจตเฉ€เจ‚ เจฒเจพเจ‡เจฌเฉเจฐเฉ‡เจฐเฉ€เจ†เจ‚ เจจเฉ‚เฉฐ เจ–เฉ‹เจœเจฃ, เจ•เฉฐเจชเจพเจ‡เจฒ เจ•เจฐเจจ เจ…เจคเฉ‡ เจฒเจฟเฉฐเจ• เจ•เจฐเจจ เจฒเจˆ เจฒเจ—เจพ เจธเจ•เจฆเจพ เจธเฉ€เฅค เจฌเจธ เจชเจพเจ“, เจฎเฉˆเจจเฉ‚เฉฐ เจฌเจพเจนเจฐ chickened. เจ‡เจน เจ‰เจน เจนเฉˆ เจœเจฟเจธ 'เจคเฉ‡ เจ…เจธเฉ€เจ‚ เจซเฉˆเจธเจฒเจพ เจ•เฉ€เจคเจพ เจ…เจคเฉ‡ เจชเจพเจˆเจฅเจจ เจตเจฟเฉฑเจš เจธเจญ เจ•เฉเจ เจธเจผเจพเจ‚เจคเฉ€ เจจเจพเจฒ เจชเฉ‚เจฐเจพ เจ•เฉ€เจคเจพเฅค

เจนเฉเจฃ, เจœเจผเจฌเจฐเจฆเจธเจคเฉ€ เจธเจตเฉˆ-เจ…เจฒเฉฑเจ—-เจฅเจฒเฉฑเจ— เจนเฉ‹เจฃ เจฆเฉ‡ เจฆเฉŒเจฐเจพเจจ, เจฎเฉˆเจ‚ เจ‡เจน เจชเจคเจพ เจฒเจ—เจพเจ‰เจฃ เจฆเจพ เจซเฉˆเจธเจฒเจพ เจ•เฉ€เจคเจพ เจนเฉˆ เจ•เจฟ C++ เจตเจฟเฉฑเจš เจธเฉ‡เจตเจพเจตเจพเจ‚ เจ•เจฟเจตเฉ‡เจ‚ เจฒเจฟเจ–เจฃเฉ€เจ†เจ‚ เจนเจจเฅค เจธเจญ เจคเฉ‹เจ‚ เจชเจนเจฟเจฒเจพเจ‚ เจ‡เฉฑเจ• เจขเฉเจ•เจตเฉ€เจ‚ เจฒเจพเจ‡เจฌเฉเจฐเฉ‡เจฐเฉ€ เจฆเจพ เจซเฉˆเจธเจฒเจพ เจ•เจฐเจจเจพ เจธเฉ€เฅค เจฎเฉ‡เจฐเฉ€ เจชเจธเฉฐเจฆ 'เจคเฉ‡ เจกเจฟเฉฑเจ— เจ—เจฟเจ† POCO, เจ•เจฟเจ‰เจ‚เจ•เจฟ เจ‡เจน เจ‡เฉฑเจ• เจตเจธเจคเฉ‚-เจ…เจงเจพเจฐเจฟเจค เจธเจผเฉˆเจฒเฉ€ เจตเจฟเฉฑเจš เจฒเจฟเจ–เจฟเจ† เจ—เจฟเจ† เจธเฉ€ เจ…เจคเฉ‡ เจ†เจฎ เจฆเจธเจคเจพเจตเฉ‡เจœเจผเจพเจ‚ เจฆเฉ€ เจตเฉ€ เจธเจผเฉ‡เจ–เฉ€ เจฎเจพเจฐเจฆเจพ เจนเฉˆเฅค เจจเจพเจฒ เจนเฉ€, เจ…เจธเฉˆเจ‚เจฌเจฒเฉ€ เจชเฉเจฐเจฃเจพเจฒเฉ€ เจฆเฉ€ เจšเฉ‹เจฃ เจ•เจฐเจจ เจฌเจพเจฐเฉ‡ เจตเฉ€ เจธเจตเจพเจฒ เจ‰เฉฑเจ เจฟเจ†เฅค เจ‡เจธ เจฌเจฟเฉฐเจฆเฉ‚ เจคเฉฑเจ• เจฎเฉˆเจ‚ เจธเจฟเจฐเจซ เจตเจฟเจœเจผเฉ‚เจ…เจฒ เจธเจŸเฉ‚เจกเฉ€เจ“, เจ†เจˆเจเจ†เจฐ เจ…เจคเฉ‡ เจฌเฉ‡เจ…เจฐ เจฎเฉ‡เจ•เจซเจพเจˆเจฒเจพเจ‚ เจจเจพเจฒ เจ•เฉฐเจฎ เจ•เฉ€เจคเจพ เจนเฉˆเฅค เจ…เจคเฉ‡ เจ‡เจนเจจเจพเจ‚ เจตเจฟเฉฑเจšเฉ‹เจ‚ เจ•เจฟเจธเฉ‡ เจตเฉ€ เจธเจฟเจธเจŸเจฎ เจจเฉ‡ เจฎเฉˆเจจเฉ‚เฉฐ เจ…เจชเฉ€เจฒ เจจเจนเฉ€เจ‚ เจ•เฉ€เจคเฉ€, เจ•เจฟเจ‰เจ‚เจ•เจฟ เจฎเฉˆเจ‚ เจชเฉ‚เจฐเฉ€ เจธเฉ‡เจตเจพ เจจเฉ‚เฉฐ เจกเฉŒเจ•เจฐ เจ•เฉฐเจŸเฉ‡เจจเจฐ เจตเจฟเฉฑเจš เจšเจฒเจพเจ‰เจฃ เจฆเฉ€ เจฏเฉ‹เจœเจจเจพ เจฌเจฃเจพเจˆ เจธเฉ€เฅค เจซเจฟเจฐ เจฎเฉˆเจ‚ cmake เจ…เจคเฉ‡ เจ‡เฉฑเจ• เจฆเจฟเจฒเจšเจธเจช เจชเฉˆเจ•เฉ‡เจœ เจฎเฉˆเจจเฉ‡เจœเจฐ เจฆเจพ เจชเจคเจพ เจฒเจ—เจพเจ‰เจฃ เจฆเฉ€ เจ•เฉ‹เจธเจผเจฟเจธเจผ เจ•เจฐเจจ เจฆเจพ เจซเฉˆเจธเจฒเจพ เจ•เฉ€เจคเจพ Conan. เจ‡เจธ เจชเฉˆเจ•เฉ‡เจœ เจฎเฉˆเจจเฉ‡เจœเจฐ เจจเฉ‡ เจคเฉเจนเจพเจจเฉ‚เฉฐ เจธเจพเจฐเฉ€เจ†เจ‚ เจจเจฟเจฐเจญเจฐเจคเจพเจตเจพเจ‚ เจจเฉ‚เฉฐ เจ‡เฉฑเจ• เจซเจพเจˆเจฒ เจตเจฟเฉฑเจš เจฐเจœเจฟเจธเจŸเจฐ เจ•เจฐเจจ เจฆเฉ€ เจ‡เจœเจพเจœเจผเจค เจฆเจฟเฉฑเจคเฉ€ เจนเฉˆ

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 เจ•เจฒเจพเจธ เจจเฉ‚เฉฐ เจชเฉเจฐเจพเจชเจค เจ•เจฐเจจเจพ เจšเจพเจนเฉ€เจฆเจพ เจนเฉˆ เจ…เจคเฉ‡ เจฎเฉเฉฑเจ– เจตเจฟเจงเฉ€ เจจเฉ‚เฉฐ เจ“เจตเจฐเจฐเจพเจˆเจก เจ•เจฐเจจเจพ เจšเจพเจนเฉ€เจฆเจพ เจนเฉˆเฅค

เจŸเฉˆเจ‚เจชเจฒเฉ‡เจŸ เจธเจฐเจตเจฐ เจเจช

#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 เจซเจพเจˆเจฒ เจฌเจฃเจพเจ‰เจฃ เจ…เจคเฉ‡ เจธเฉฐเจฐเจšเจฟเจค เจ•เจฐเจจ เจฆเฉ€ เจตเฉ€ เจฒเฉ‹เฉœ เจนเฉˆเฅค

.env

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

'เจคเฉ‡ เจคเฉเจธเฉ€เจ‚ เจธเจพเจฐเจพ เจ•เฉ‹เจก เจฆเฉ‡เจ– เจธเจ•เจฆเฉ‡ เจนเฉ‹ github.

C++ เจตเจฟเฉฑเจš เจฎเจพเจˆเจ•เฉเจฐเฉ‹ เจธเจฐเจตเจฟเจธเจฟเจœเจผเฅค เจ•เจฒเจชเจจเจพ เจœเจพเจ‚ เจ…เจธเจฒเฉ€เจ…เจค?

เจ…เจคเฉ‡ เจนเฉเจฃ dockerfile เจ…เจคเฉ‡ docker-compose.yml เจฒเจฟเจ–เจฃ เจฆเจพ เจ…เฉฐเจคเจฎ เจชเฉœเจพเจ… เจ†เจ‰เจ‚เจฆเจพ เจนเฉˆเฅค เจ‡เจฎเจพเจจเจฆเจพเจฐ เจนเฉ‹เจฃ เจฒเจˆ, เจ‡เจธ เจตเจฟเฉฑเจš เจœเจผเจฟเจ†เจฆเจพเจคเจฐ เจธเจฎเจพเจ‚ เจฒเฉฑเจ—เจฟเจ†, เจ…เจคเฉ‡ เจจเจพ เจธเจฟเจฐเจซ เจ‡เจธ เจฒเจˆ เจ•เจฟ เจฎเฉˆเจ‚ เจ‡เฉฑเจ• เจจเฉŒเจฌ เจนเจพเจ‚, เจ•เจฟเจ‰เจ‚เจ•เจฟ เจนเจฐ เจตเจพเจฐ เจฒเจพเจ‡เจฌเฉเจฐเฉ‡เจฐเฉ€เจ†เจ‚ เจจเฉ‚เฉฐ เจฆเฉเจฌเจพเจฐเจพ เจฌเจฃเจพเจ‰เจฃเจพ เจœเจผเจฐเฉ‚เจฐเฉ€ เจธเฉ€, เจชเจฐ เจ•เฉŒเจจเจจ เจฆเฉ€เจ†เจ‚ เจ•เจฎเฉ€เจ†เจ‚ เจ•เจพเจฐเจจ. เจ‰เจฆเจพเจนเจฐเจจ เจฒเจˆ, เจ•เฉ‹เจจเจจ เจจเฉ‚เฉฐ เจฒเฉ‹เฉœเฉ€เจ‚เจฆเฉ€ เจจเจฟเจฐเจญเจฐเจคเจพ เจจเฉ‚เฉฐ เจกเจพเจŠเจจเจฒเฉ‹เจก เจ•เจฐเจจ, เจธเจฅเจพเจชเจค เจ•เจฐเจจ เจ…เจคเฉ‡ เจฌเจฃเจพเจ‰เจฃ เจฒเจˆ, "conan install" เจจเฉ‚เฉฐ เจกเจพเจŠเจจเจฒเฉ‹เจก เจ•เจฐเจจ เจฒเจˆ เจ‡เจน เจ•เจพเจซเจผเฉ€ เจจเจนเฉ€เจ‚ เจนเฉˆ, เจ‡เจธ เจจเฉ‚เฉฐ -s compiler.libcxx=libstdc++11 เจชเฉˆเจฐเจพเจฎเฉ€เจŸเจฐ เจชเจพเจธ เจ•เจฐเจจ เจฆเฉ€ เจตเฉ€ เจฒเฉ‹เฉœ เจนเฉˆ, เจจเจนเฉ€เจ‚ เจคเจพเจ‚ เจคเฉเจนเจพเจกเฉ€ เจเจชเจฒเฉ€เจ•เฉ‡เจธเจผเจจ เจจเฉ‚เฉฐ เจฒเจฟเฉฐเจ• เจ•เจฐเจจ เจฆเฉ‡ เจชเฉœเจพเจ… 'เจคเฉ‡ เจคเฉเจนเจพเจจเฉ‚เฉฐ เจฌเจนเฉเจค เจธเจพเจฐเฉ€เจ†เจ‚ เจ—เจฒเจคเฉ€เจ†เจ‚ เจนเฉ‹เจฃ เจฆเจพ เจ–เจผเจคเจฐเจพ เจนเฉˆเฅค เจฎเฉˆเจ‚ เจ•เจˆ เจ˜เฉฐเจŸเจฟเจ†เจ‚ เจคเฉ‹เจ‚ เจ‡เจธ เจ—เจฒเจคเฉ€ เจจเจพเจฒ เจซเจธเจฟเจ† เจนเฉ‹เจ‡เจ† เจนเจพเจ‚ เจ…เจคเฉ‡ เจฎเฉˆเจจเฉ‚เฉฐ เจ‰เจฎเฉ€เจฆ เจนเฉˆ เจ•เจฟ เจ‡เจน เจฒเฉ‡เจ– เจ˜เฉฑเจŸ เจธเจฎเฉ‡เจ‚ เจตเจฟเฉฑเจš เจ‡เจธ เจธเจฎเฉฑเจธเจฟเจ† เจจเฉ‚เฉฐ เจนเฉฑเจฒ เจ•เจฐเจจ เจตเจฟเฉฑเจš เจนเฉ‹เจฐ เจฒเฉ‹เจ•เจพเจ‚ เจฆเฉ€ เจฎเจฆเจฆ เจ•เจฐเฉ‡เจ—เจพเฅค

เจ…เฉฑเจ—เฉ‡, docker-compose.yml เจฒเจฟเจ–เจฃ เจคเฉ‹เจ‚ เจฌเจพเจ…เจฆ, เจฎเฉ‡เจฐเฉ‡ เจฆเฉ‹เจธเจค เจฆเฉ€ เจธเจฒเจพเจน 'เจคเฉ‡, เจฎเฉˆเจ‚ เจธเจฎเจฐเจฅเจจ เจœเฉ‹เฉœเจฟเจ† เจ•เฉเจ•เฉ€เจ•เจŸเจฐ เจ…เจคเฉ‡ เจนเฉเจฃ เจคเฉเจธเฉ€เจ‚ เจ†เจชเจฃเฉ‡ เจ†เจช เจจเฉ‚เฉฐ C++ เจตเจฟเฉฑเจš เจ‡เฉฑเจ• REST API เจธเฉ‡เจตเจพ เจฒเจˆ เจ‡เฉฑเจ• เจธเฉฐเจชเฉ‚เจฐเจจ เจŸเฉˆเจฎเจชเจฒเฉ‡เจŸ เจชเฉเจฐเจพเจชเจค เจ•เจฐ เจธเจ•เจฆเฉ‡ เจนเฉ‹, เจ‡เฉฑเจ• เจ…เจจเฉเจ•เฉ‚เจฒเจฟเจค เจตเจพเจคเจพเจตเจฐเจฃ เจฆเฉ‡ เจจเจพเจฒ, เจ…เจคเฉ‡ PostgreSQL เจธเจฅเจพเจชเจค เจ•เฉ€เจคเจพ เจ—เจฟเจ† เจนเฉˆ, เจฌเจธ เจ•เฉฐเจธเฉ‹เจฒ เจตเจฟเฉฑเจš "เจ•เฉ‚เจ•เฉ€เจ•เจŸเจฐ" เจฆเจพเจ–เจฒ เจ•เจฐเจ•เฉ‡ https://github.com/KovalevVasiliy/cpp_rest_api_template.git" เจ…เจคเฉ‡ เจซเจฟเจฐ โ€œเจกเฉŒเจ•เจฐ-เจ•เฉฐเจชเฉ‹เจœเจผ เจ…เฉฑเจช โ€”เจฌเจฟเจฒเจกโ€เฅค

เจฎเฉˆเจจเฉ‚เฉฐ เจ‰เจฎเฉ€เจฆ เจนเฉˆ เจ•เจฟ เจ‡เจน เจŸเฉˆเจฎเจชเจฒเฉ‡เจŸ เจธเจผเฉเจฐเฉ‚เจ†เจค เจ•เจฐเจจ เจตเจพเจฒเจฟเจ†เจ‚ เจจเฉ‚เฉฐ เจฎเจนเจพเจจ เจ…เจคเฉ‡ เจธเจผเจ•เจคเฉ€เจธเจผเจพเจฒเฉ€, เจชเจฐ C++ เจตเจฐเจ—เฉ€ เจฌเฉ‡เจขเฉฐเจ—เฉ€ เจญเจพเจธเจผเจพ เจตเจฟเฉฑเจš REST API เจเจชเจฒเฉ€เจ•เฉ‡เจธเจผเจจเจพเจ‚ เจจเฉ‚เฉฐ เจตเจฟเจ•เจธเจค เจ•เจฐเจจ เจฆเฉ‡ เจ‰เจจเฉเจนเจพเจ‚ เจฆเฉ‡ เจ”เจ–เฉ‡ เจฎเจพเจฐเจ— 'เจคเฉ‡ เจฎเจฆเจฆ เจ•เจฐเฉ‡เจ—เจพเฅค
เจจเจพเจฒ เจนเฉ€, เจฎเฉˆเจ‚ เจ‡เฉฑเจฅเฉ‡ เจชเฉœเฉเจนเจจ เจฆเฉ€ เจœเจผเฉ‹เจฐเจฆเจพเจฐ เจธเจฟเจซเจพเจฐเจธเจผ เจ•เจฐเจฆเจพ เจนเจพเจ‚ เจ‡เจน เจฒเฉ‡เจ–เฅค เจ‡เจน เจตเจงเฉ‡เจฐเฉ‡ เจตเจฟเจธเจฅเจพเจฐ เจตเจฟเฉฑเจš เจฆเฉฑเจธเจฆเจพ เจนเฉˆ เจ•เจฟ POCO เจจเจพเจฒ เจ•เจฟเจตเฉ‡เจ‚ เจ•เฉฐเจฎ เจ•เจฐเจจเจพ เจนเฉˆ เจ…เจคเฉ‡ เจ†เจชเจฃเฉ€ เจ–เฉเจฆ เจฆเฉ€ REST API เจธเฉ‡เจตเจพ เจ•เจฟเจตเฉ‡เจ‚ เจฒเจฟเจ–เจฃเฉ€ เจนเฉˆเฅค

เจธเจฐเฉ‹เจค: www.habr.com

เจ‡เฉฑเจ• เจŸเจฟเฉฑเจชเจฃเฉ€ เจœเฉ‹เฉœเฉ‹