แƒ›แƒ˜แƒ™แƒ แƒแƒกแƒ”แƒ แƒ•แƒ˜แƒกแƒ”แƒ‘แƒ˜ C++-แƒจแƒ˜. แƒคแƒ˜แƒฅแƒชแƒ˜แƒ แƒ—แƒฃ แƒ แƒ”แƒแƒšแƒแƒ‘แƒ?

แƒ›แƒ˜แƒ™แƒ แƒแƒกแƒ”แƒ แƒ•แƒ˜แƒกแƒ”แƒ‘แƒ˜ C++-แƒจแƒ˜. แƒคแƒ˜แƒฅแƒชแƒ˜แƒ แƒ—แƒฃ แƒ แƒ”แƒแƒšแƒแƒ‘แƒ?

แƒแƒ› แƒกแƒขแƒแƒขแƒ˜แƒแƒจแƒ˜ แƒ•แƒ˜แƒกแƒแƒฃแƒ‘แƒ แƒ”แƒ‘ แƒ˜แƒ›แƒแƒ–แƒ”, แƒ—แƒฃ แƒ แƒแƒ’แƒแƒ  แƒจแƒ”แƒ•แƒฅแƒ›แƒ”แƒœแƒ˜ แƒจแƒแƒ‘แƒšแƒแƒœแƒ˜ (แƒฅแƒฃแƒฅแƒ˜-แƒคแƒแƒ˜แƒšแƒ”แƒ‘แƒ˜) แƒ“แƒ แƒ“แƒแƒ•แƒแƒงแƒ”แƒœแƒ” แƒ’แƒแƒ แƒ”แƒ›แƒ C++-แƒจแƒ˜ REST API แƒกแƒ”แƒ แƒ•แƒ˜แƒกแƒ˜แƒก แƒ“แƒแƒกแƒแƒฌแƒ”แƒ แƒแƒ“ docker/docker-compose-แƒ˜แƒก แƒ“แƒ แƒ™แƒแƒœแƒแƒœแƒ˜แƒก แƒžแƒแƒ™แƒ”แƒขแƒ˜แƒก แƒ›แƒ”แƒœแƒ”แƒฏแƒ”แƒ แƒ˜แƒก แƒ’แƒแƒ›แƒแƒงแƒ”แƒœแƒ”แƒ‘แƒ˜แƒ—.

แƒจแƒ”แƒ›แƒ“แƒ”แƒ’แƒ˜ แƒฐแƒแƒ™แƒแƒ—แƒแƒœแƒ˜แƒก แƒ“แƒ แƒแƒก, แƒ แƒแƒ›แƒ”แƒšแƒจแƒ˜แƒช แƒ›แƒ” แƒ›แƒ˜แƒ•แƒ˜แƒฆแƒ” แƒ›แƒแƒœแƒแƒฌแƒ˜แƒšแƒ”แƒแƒ‘แƒ, แƒ แƒแƒ’แƒแƒ แƒช แƒ‘แƒ”แƒฅแƒ”แƒœแƒ“แƒ˜แƒก แƒ“แƒ”แƒ•แƒ”แƒšแƒแƒžแƒ”แƒ แƒ˜, แƒ’แƒแƒฉแƒœแƒ“แƒ แƒ™แƒ˜แƒ—แƒฎแƒ•แƒ, แƒ แƒ แƒ’แƒแƒ›แƒแƒ•แƒ˜แƒงแƒ”แƒœแƒ แƒจแƒ”แƒ›แƒ“แƒ”แƒ’แƒ˜ แƒ›แƒ˜แƒ™แƒ แƒแƒกแƒ”แƒ แƒ•แƒ˜แƒกแƒ˜แƒก แƒ“แƒแƒกแƒแƒฌแƒ”แƒ แƒแƒ“. แƒ แƒแƒช แƒแƒฅแƒแƒ›แƒ“แƒ” แƒ“แƒแƒ˜แƒฌแƒ”แƒ แƒ แƒงแƒ•แƒ”แƒšแƒแƒคแƒ”แƒ แƒ˜ แƒ›แƒ” แƒ“แƒ แƒฉแƒ”แƒ›แƒ˜ แƒ“แƒแƒ•แƒฌแƒ”แƒ แƒ” แƒแƒ›แƒฎแƒแƒœแƒแƒ’แƒ˜ แƒžแƒ˜แƒ—แƒแƒœแƒจแƒ˜, แƒ แƒแƒ“แƒ’แƒแƒœ แƒฉแƒ”แƒ›แƒ˜ แƒ™แƒแƒšแƒ”แƒ’แƒ แƒ˜แƒงแƒ แƒแƒ› แƒ“แƒแƒ แƒ’แƒ˜แƒก แƒ”แƒฅแƒกแƒžแƒ”แƒ แƒขแƒ˜ แƒ“แƒ แƒžแƒ แƒแƒคแƒ”แƒกแƒ˜แƒแƒœแƒแƒšแƒฃแƒ แƒแƒ“ แƒแƒ•แƒ˜แƒ—แƒแƒ แƒ”แƒ‘แƒ“แƒ แƒ‘แƒ”แƒฅแƒ”แƒœแƒ“แƒ”แƒ‘แƒก, แƒ›แƒ” แƒ™แƒ˜ แƒ–แƒแƒ’แƒแƒ“แƒแƒ“ แƒฉแƒแƒจแƒ”แƒœแƒ”แƒ‘แƒฃแƒšแƒ˜ แƒกแƒ˜แƒกแƒขแƒ”แƒ›แƒ”แƒ‘แƒ˜แƒก แƒ“แƒ”แƒ•แƒ”แƒšแƒแƒžแƒ”แƒ แƒ˜ แƒ•แƒ˜แƒงแƒแƒ•แƒ˜ แƒ“แƒ แƒ•แƒฌแƒ”แƒ แƒ“แƒ˜ แƒ“แƒ˜แƒ“ แƒ“แƒ แƒกแƒแƒจแƒ˜แƒœแƒ”แƒš C++-แƒจแƒ˜, แƒฎแƒแƒšแƒ แƒžแƒ˜แƒ—แƒแƒœแƒ˜ แƒแƒฎแƒšแƒแƒฎแƒแƒœ แƒ•แƒ˜แƒกแƒฌแƒแƒ•แƒšแƒ” แƒฃแƒœแƒ˜แƒ•แƒ”แƒ แƒกแƒ˜แƒขแƒ”แƒขแƒจแƒ˜.

แƒแƒกแƒ” แƒ แƒแƒ›, แƒฉแƒ•แƒ”แƒœ แƒ“แƒแƒ’แƒ•แƒฎแƒ•แƒ“แƒ แƒ›แƒแƒฆแƒแƒšแƒ˜ แƒ“แƒแƒขแƒ•แƒ˜แƒ แƒ—แƒ•แƒ˜แƒก แƒกแƒ”แƒ แƒ•แƒ˜แƒกแƒ˜แƒก แƒ“แƒแƒฌแƒ”แƒ แƒ˜แƒก แƒแƒ›แƒแƒชแƒแƒœแƒ, แƒ แƒแƒ›แƒšแƒ˜แƒก แƒ›แƒ—แƒแƒ•แƒแƒ แƒ˜ แƒแƒ›แƒแƒชแƒแƒœแƒ แƒ˜แƒงแƒ แƒ›แƒแƒกแƒจแƒ˜ แƒจแƒ”แƒ›แƒแƒกแƒฃแƒšแƒ˜ แƒ›แƒแƒœแƒแƒชแƒ”แƒ›แƒ”แƒ‘แƒ˜แƒก แƒฌแƒ˜แƒœแƒแƒกแƒฌแƒแƒ  แƒ“แƒแƒ›แƒฃแƒจแƒแƒ•แƒ”แƒ‘แƒ แƒ“แƒ แƒ›แƒแƒœแƒแƒชแƒ”แƒ›แƒ—แƒ แƒ‘แƒแƒ–แƒแƒจแƒ˜ แƒฉแƒแƒฌแƒ”แƒ แƒ. แƒ“แƒ แƒ›แƒแƒ แƒ˜แƒ’แƒ˜ แƒ™แƒ•แƒแƒ›แƒšแƒ˜แƒก แƒจแƒ”แƒกแƒ•แƒ”แƒœแƒ”แƒ‘แƒ˜แƒก แƒจแƒ”แƒ›แƒ“แƒ”แƒ’, แƒ›แƒ”แƒ’แƒแƒ‘แƒแƒ แƒ›แƒ แƒจแƒ”แƒ›แƒแƒ›แƒ—แƒแƒ•แƒแƒ–แƒ, แƒ แƒแƒ› แƒ›แƒ”, แƒ แƒแƒ’แƒแƒ แƒช C++ แƒ“แƒ”แƒ•แƒ”แƒšแƒแƒžแƒ”แƒ แƒ›แƒ, แƒ“แƒแƒ›แƒ”แƒฌแƒ”แƒ แƒ แƒ”แƒก แƒกแƒ”แƒ แƒ•แƒ˜แƒกแƒ˜ แƒžแƒ แƒแƒคแƒ”แƒกแƒ˜แƒแƒœแƒแƒšแƒ—แƒ แƒ’แƒแƒ›แƒแƒงแƒ”แƒœแƒ”แƒ‘แƒ˜แƒ—. แƒแƒ›แƒ˜แƒก แƒ›แƒขแƒ™แƒ˜แƒชแƒ”แƒ‘แƒ แƒแƒ แƒ˜แƒก แƒ˜แƒก, แƒ แƒแƒ› แƒ”แƒก แƒ˜แƒฅแƒœแƒ”แƒ‘แƒ แƒฃแƒคแƒ แƒ แƒกแƒฌแƒ แƒแƒคแƒ˜, แƒฃแƒคแƒ แƒ แƒžแƒ แƒแƒ“แƒฃแƒฅแƒขแƒ˜แƒฃแƒšแƒ˜ แƒ“แƒ แƒ–แƒแƒ’แƒแƒ“แƒแƒ“, แƒŸแƒ˜แƒฃแƒ แƒ˜ แƒแƒฆแƒคแƒ แƒ—แƒแƒ•แƒแƒœแƒ”แƒ‘แƒฃแƒšแƒ˜ แƒ˜แƒฅแƒœแƒ”แƒ‘แƒ แƒ˜แƒ›แƒ˜แƒ—, แƒ—แƒฃ แƒ แƒแƒ’แƒแƒ  แƒ•แƒ˜แƒชแƒ˜แƒ— แƒ แƒแƒ’แƒแƒ  แƒ•แƒ›แƒแƒ แƒ—แƒแƒ— แƒ’แƒฃแƒœแƒ“แƒ˜แƒก แƒ แƒ”แƒกแƒฃแƒ แƒกแƒ”แƒ‘แƒ˜. แƒ แƒแƒ–แƒ”แƒช แƒ›แƒ” แƒ•แƒฃแƒžแƒแƒกแƒฃแƒฎแƒ”, แƒ แƒแƒ› แƒแƒ แƒแƒกแƒ“แƒ แƒแƒก แƒ’แƒแƒ›แƒ˜แƒ™แƒ”แƒ—แƒ”แƒ‘แƒ˜แƒ แƒ›แƒกแƒ’แƒแƒ•แƒกแƒ˜ แƒ แƒแƒ› C++-แƒจแƒ˜ แƒ“แƒ แƒแƒ“แƒ•แƒ˜แƒšแƒแƒ“ แƒจแƒ”แƒ›แƒ”แƒซแƒšแƒ แƒ“แƒแƒ แƒฉแƒ”แƒœแƒ˜แƒš 20+ แƒกแƒแƒแƒ—แƒก แƒ“แƒแƒ•แƒ—แƒ›แƒแƒ“แƒ˜ แƒจแƒ”แƒกแƒแƒ‘แƒแƒ›แƒ˜แƒกแƒ˜ แƒ‘แƒ˜แƒ‘แƒšแƒ˜แƒแƒ—แƒ”แƒ™แƒ”แƒ‘แƒ˜แƒก แƒซแƒ˜แƒ”แƒ‘แƒแƒก, แƒจแƒ”แƒ“แƒ’แƒ”แƒœแƒแƒกแƒ แƒ“แƒ แƒ“แƒแƒ™แƒแƒ•แƒจแƒ˜แƒ แƒ”แƒ‘แƒแƒก. แƒ›แƒแƒ แƒขแƒ˜แƒ•แƒแƒ“ แƒ แƒแƒ› แƒ•แƒ—แƒฅแƒ•แƒแƒ—, แƒ›แƒ” แƒ“แƒแƒ•แƒขแƒแƒ•แƒ”. แƒกแƒฌแƒแƒ แƒ”แƒ“ แƒ”แƒก แƒ’แƒแƒ“แƒแƒ•แƒฌแƒงแƒ•แƒ˜แƒขแƒ”แƒ— แƒ“แƒ แƒ›แƒจแƒ•แƒ˜แƒ“แƒแƒ“ แƒ“แƒแƒ•แƒแƒกแƒ แƒฃแƒšแƒ”แƒ— แƒงแƒ•แƒ”แƒšแƒแƒคแƒ”แƒ แƒ˜ แƒžแƒ˜แƒ—แƒแƒœแƒจแƒ˜.

แƒแƒฎแƒšแƒ, แƒ˜แƒซแƒฃแƒšแƒ”แƒ‘แƒ˜แƒ—แƒ˜ แƒ—แƒ•แƒ˜แƒ—แƒ˜แƒ–แƒแƒšแƒแƒชแƒ˜แƒ˜แƒก แƒ“แƒ แƒแƒก, แƒ’แƒแƒ“แƒแƒ•แƒฌแƒงแƒ•แƒ˜แƒขแƒ” แƒ’แƒแƒ›แƒ”แƒ’แƒ, แƒ แƒแƒ’แƒแƒ  แƒ“แƒแƒ•แƒฌแƒ”แƒ แƒ แƒกแƒ”แƒ แƒ•แƒ˜แƒกแƒ”แƒ‘แƒ˜ C++-แƒจแƒ˜. แƒžแƒ˜แƒ แƒ•แƒ”แƒšแƒ˜ แƒ แƒแƒช แƒฃแƒœแƒ“แƒ แƒ’แƒแƒ”แƒ™แƒ”แƒ—แƒ”แƒ‘แƒ˜แƒœแƒ แƒ˜แƒงแƒ แƒจแƒ”แƒกแƒแƒคแƒ”แƒ แƒ˜แƒกแƒ˜ แƒ‘แƒ˜แƒ‘แƒšแƒ˜แƒแƒ—แƒ”แƒ™แƒ˜แƒก แƒแƒ แƒฉแƒ”แƒ•แƒ. แƒฉแƒ”แƒ›แƒ˜ แƒแƒ แƒฉแƒ”แƒ•แƒแƒœแƒ˜ แƒ“แƒแƒ”แƒชแƒ POCO, แƒ•แƒ˜แƒœแƒแƒ˜แƒ“แƒแƒœ แƒ˜แƒ’แƒ˜ แƒ“แƒแƒฌแƒ”แƒ แƒ˜แƒšแƒ˜ แƒ˜แƒงแƒ แƒแƒ‘แƒ˜แƒ”แƒฅแƒขแƒ–แƒ” แƒแƒ แƒ˜แƒ”แƒœแƒขแƒ˜แƒ แƒ”แƒ‘แƒฃแƒš แƒกแƒขแƒ˜แƒšแƒจแƒ˜ แƒ“แƒ แƒแƒกแƒ”แƒ•แƒ” แƒ˜แƒฌแƒแƒœแƒ”แƒ‘แƒ“แƒ แƒœแƒแƒ แƒ›แƒแƒšแƒฃแƒ  แƒ“แƒแƒ™แƒฃแƒ›แƒ”แƒœแƒขแƒแƒชแƒ˜แƒแƒก. แƒแƒกแƒ”แƒ•แƒ”, แƒ’แƒแƒฉแƒœแƒ“แƒ แƒ™แƒ˜แƒ—แƒฎแƒ•แƒ แƒแƒกแƒแƒ›แƒ‘แƒšแƒ”แƒ˜แƒก แƒกแƒ˜แƒกแƒขแƒ”แƒ›แƒ˜แƒก แƒแƒ แƒฉแƒ”แƒ•แƒ˜แƒก แƒจแƒ”แƒกแƒแƒฎแƒ”แƒ‘. แƒแƒ› แƒ›แƒแƒ›แƒ”แƒœแƒขแƒแƒ›แƒ“แƒ” แƒ›แƒ” แƒ›แƒฎแƒแƒšแƒแƒ“ Visual Studio-แƒกแƒ—แƒแƒœ, IAR-แƒ—แƒแƒœ แƒ“แƒ แƒจแƒ˜แƒจแƒ•แƒ”แƒš แƒ›แƒแƒ™แƒ”แƒคแƒแƒ˜แƒšแƒ”แƒ‘แƒ—แƒแƒœ แƒ›แƒ˜แƒ›แƒฃแƒจแƒแƒ•แƒ˜แƒ. แƒ“แƒ แƒแƒ แƒชแƒ”แƒ แƒ—แƒ˜ แƒ”แƒก แƒกแƒ˜แƒกแƒขแƒ”แƒ›แƒ แƒแƒ  แƒ›แƒแƒ›แƒฎแƒ˜แƒ‘แƒšแƒแƒ•แƒ“แƒ, แƒ แƒแƒ“แƒ’แƒแƒœ แƒ›แƒ” แƒ•แƒ’แƒ”แƒ’แƒ›แƒแƒ•แƒ“แƒ˜ แƒ›แƒ—แƒ”แƒšแƒ˜ แƒกแƒ”แƒ แƒ•แƒ˜แƒกแƒ˜แƒก แƒ’แƒแƒจแƒ•แƒ”แƒ‘แƒแƒก แƒ“แƒแƒ™แƒ”แƒ แƒ˜แƒก แƒ™แƒแƒœแƒขแƒ”แƒ˜แƒœแƒ”แƒ แƒจแƒ˜. แƒจแƒ”แƒ›แƒ“แƒ”แƒ’ แƒ’แƒแƒ“แƒแƒ•แƒฌแƒงแƒ•แƒ˜แƒขแƒ” แƒ’แƒแƒ›แƒแƒ›แƒ”แƒ™แƒ•แƒšแƒ˜แƒ 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-แƒ—แƒแƒœ แƒ›แƒฃแƒจแƒแƒแƒ‘แƒ˜แƒกแƒ—แƒ•แƒ˜แƒก, แƒ แƒแƒ“แƒ’แƒแƒœ แƒ”แƒก แƒ˜แƒงแƒ แƒ‘แƒ˜แƒ‘แƒšแƒ˜แƒแƒ—แƒ”แƒ™แƒ, แƒ แƒแƒ›แƒ”แƒšแƒ—แƒแƒœแƒแƒช แƒ›แƒฃแƒจแƒแƒแƒ‘แƒ˜แƒก แƒ›แƒชแƒ˜แƒ แƒ” แƒ’แƒแƒ›แƒแƒชแƒ“แƒ˜แƒšแƒ”แƒ‘แƒ แƒ›แƒฅแƒแƒœแƒ“แƒ แƒ“แƒ แƒแƒกแƒ”แƒ•แƒ” แƒ˜แƒงแƒ แƒ˜แƒก, แƒ แƒแƒ›แƒšแƒ”แƒ‘แƒ—แƒแƒœแƒแƒช แƒฉแƒ•แƒ”แƒœแƒ˜ Python แƒกแƒ”แƒ แƒ•แƒ˜แƒกแƒ”แƒ‘แƒ˜ แƒฃแƒ แƒ—แƒ˜แƒ”แƒ แƒ—แƒแƒ‘แƒ“แƒœแƒ”แƒœ. แƒ“แƒ แƒ˜แƒชแƒ˜ แƒ แƒ แƒ•แƒ˜แƒกแƒฌแƒแƒ•แƒšแƒ”? แƒ˜แƒก POCO-แƒจแƒ˜แƒ! แƒ›แƒแƒ’แƒ แƒแƒ› แƒ™แƒแƒœแƒแƒœแƒ›แƒ แƒแƒ  แƒ˜แƒชแƒ˜แƒก, แƒ แƒแƒ› แƒ˜แƒก แƒแƒ แƒ˜แƒก POCO-แƒจแƒ˜ แƒ“แƒ แƒแƒ  แƒ˜แƒชแƒ˜แƒก แƒ แƒแƒ’แƒแƒ  แƒแƒแƒจแƒ”แƒœแƒแƒก แƒ˜แƒ’แƒ˜; แƒกแƒแƒชแƒแƒ•แƒจแƒ˜ แƒแƒ แƒ˜แƒก แƒ›แƒแƒซแƒ•แƒ”แƒšแƒ”แƒ‘แƒฃแƒšแƒ˜ แƒ™แƒแƒœแƒคแƒ˜แƒ’แƒฃแƒ แƒแƒชแƒ˜แƒ˜แƒก แƒคแƒแƒ˜แƒšแƒ˜ (แƒแƒ› แƒจแƒ”แƒชแƒ“แƒแƒ›แƒ˜แƒก แƒจแƒ”แƒกแƒแƒฎแƒ”แƒ‘ แƒฃแƒ™แƒ•แƒ” แƒ“แƒแƒ•แƒฌแƒ”แƒ แƒ” POCO-แƒก แƒจแƒ”แƒ›แƒฅแƒ›แƒœแƒ”แƒšแƒ”แƒ‘แƒก). แƒ”แƒก แƒœแƒ˜แƒจแƒœแƒแƒ•แƒก, แƒ แƒแƒ› แƒ—แƒฅแƒ•แƒ”แƒœ แƒ›แƒแƒ’แƒ˜แƒฌแƒ”แƒ•แƒ— แƒกแƒฎแƒ•แƒ แƒ‘แƒ˜แƒ‘แƒšแƒ˜แƒแƒ—แƒ”แƒ™แƒ˜แƒก แƒซแƒ”แƒ‘แƒœแƒ.

แƒจแƒ”แƒ›แƒ“แƒ”แƒ’ แƒ™แƒ˜ แƒฉแƒ”แƒ›แƒ˜ แƒแƒ แƒฉแƒ”แƒ•แƒแƒœแƒ˜ แƒœแƒแƒ™แƒšแƒ”แƒ‘แƒแƒ“ แƒžแƒแƒžแƒฃแƒšแƒแƒ แƒฃแƒš แƒ‘แƒ˜แƒ‘แƒšแƒ˜แƒแƒ—แƒ”แƒ™แƒแƒ–แƒ” แƒ“แƒแƒ”แƒชแƒ libpg. แƒ›แƒ” แƒ™แƒ˜ แƒฌแƒแƒ แƒ›แƒแƒฃแƒ“แƒ’แƒ”แƒœแƒšแƒแƒ“ แƒ’แƒแƒ›แƒ˜แƒ›แƒแƒ แƒ—แƒšแƒ, แƒ˜แƒก แƒฃแƒ™แƒ•แƒ” แƒ™แƒแƒœแƒแƒœแƒจแƒ˜ แƒ˜แƒงแƒ แƒ“แƒ แƒแƒฌแƒงแƒแƒ‘แƒ˜แƒšแƒ˜ แƒ“แƒ แƒแƒฌแƒงแƒแƒ‘แƒ˜แƒšแƒ˜แƒช แƒ™แƒ˜ แƒ˜แƒงแƒ.

แƒจแƒ”แƒ›แƒ“แƒ”แƒ’แƒ˜ แƒœแƒแƒ‘แƒ˜แƒฏแƒ˜ แƒ˜แƒงแƒ แƒกแƒ”แƒ แƒ•แƒ˜แƒกแƒ˜แƒก แƒจแƒแƒ‘แƒšแƒแƒœแƒ˜แƒก แƒ“แƒแƒฌแƒ”แƒ แƒ, แƒ แƒแƒ›แƒ”แƒšแƒกแƒแƒช แƒจแƒ”แƒฃแƒซแƒšแƒ˜แƒ แƒ›แƒแƒ—แƒฎแƒแƒ•แƒœแƒ”แƒ‘แƒ˜แƒก แƒ“แƒแƒ›แƒฃแƒจแƒแƒ•แƒ”แƒ‘แƒ.
แƒฉแƒ•แƒ”แƒœ แƒฃแƒœแƒ“แƒ แƒ›แƒ”แƒ›แƒ™แƒ•แƒ˜แƒ“แƒ แƒ”แƒแƒ‘แƒ˜แƒ— แƒ›แƒ˜แƒ•แƒ˜แƒฆแƒแƒ— แƒฉแƒ•แƒ”แƒœแƒ˜ TemplateServerApp แƒ™แƒšแƒแƒกแƒ˜ 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(). แƒฃแƒคแƒ แƒ แƒ แƒ—แƒฃแƒšแƒ˜ แƒ›แƒแƒ—แƒฎแƒแƒ•แƒœแƒ”แƒ‘แƒ˜แƒก แƒแƒœ แƒ›แƒแƒœแƒแƒชแƒ”แƒ›แƒ”แƒ‘แƒ˜แƒก แƒ›แƒ˜แƒกแƒแƒฆแƒ”แƒ‘แƒแƒ“, แƒ—แƒฅแƒ•แƒ”แƒœ แƒ›แƒแƒ’แƒ˜แƒฌแƒ”แƒ•แƒ— แƒ™แƒแƒ•แƒจแƒ˜แƒ แƒ˜แƒก แƒ›แƒ˜แƒฆแƒ”แƒ‘แƒ GetConnection () แƒ“แƒ แƒ’แƒแƒ›แƒแƒ˜แƒงแƒ”แƒœแƒ”แƒ— 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

แƒ—แƒฅแƒ•แƒ”แƒœ แƒจแƒ”แƒ’แƒ˜แƒซแƒšแƒ˜แƒแƒ— แƒœแƒแƒฎแƒแƒ— แƒงแƒ•แƒ”แƒšแƒ แƒ™แƒแƒ“แƒ˜ แƒแƒฅ github.

แƒ›แƒ˜แƒ™แƒ แƒแƒกแƒ”แƒ แƒ•แƒ˜แƒกแƒ”แƒ‘แƒ˜ C++-แƒจแƒ˜. แƒคแƒ˜แƒฅแƒชแƒ˜แƒ แƒ—แƒฃ แƒ แƒ”แƒแƒšแƒแƒ‘แƒ?

แƒ“แƒ แƒแƒฎแƒšแƒ แƒ›แƒแƒ“แƒ˜แƒก dockerfile แƒ“แƒ docker-compose.yml แƒ“แƒแƒฌแƒ”แƒ แƒ˜แƒก แƒ‘แƒแƒšแƒ แƒ”แƒขแƒแƒžแƒ˜. แƒ›แƒแƒ แƒ—แƒแƒšแƒ˜ แƒ’แƒ˜แƒ—แƒฎแƒ แƒแƒ—, แƒแƒ›แƒแƒก แƒงแƒ•แƒ”แƒšแƒแƒ–แƒ” แƒ›แƒ”แƒขแƒ˜ แƒ“แƒ แƒ แƒ“แƒแƒกแƒญแƒ˜แƒ แƒ“แƒ แƒ“แƒ แƒแƒ แƒ แƒ›แƒฎแƒแƒšแƒแƒ“ แƒ˜แƒ›แƒ˜แƒขแƒแƒ›, แƒ แƒแƒ› แƒ›แƒ” แƒ•แƒแƒ  แƒœแƒแƒ‘แƒ˜, แƒ แƒแƒ“แƒ’แƒแƒœ แƒกแƒแƒญแƒ˜แƒ แƒ แƒ˜แƒงแƒ แƒงแƒแƒ•แƒ”แƒš แƒฏแƒ”แƒ แƒ–แƒ” แƒ‘แƒ˜แƒ‘แƒšแƒ˜แƒแƒ—แƒ”แƒ™แƒ”แƒ‘แƒ˜แƒก แƒแƒฆแƒ“แƒ’แƒ”แƒœแƒ, แƒแƒ แƒแƒ›แƒ”แƒ“ แƒ™แƒแƒœแƒแƒœแƒ˜แƒก แƒฎแƒแƒ แƒ•แƒ”แƒ–แƒ”แƒ‘แƒ˜แƒก แƒ’แƒแƒ›แƒ. แƒ›แƒแƒ’แƒแƒšแƒ˜แƒ—แƒแƒ“, แƒ˜แƒ›แƒ˜แƒกแƒแƒ—แƒ•แƒ˜แƒก, แƒ แƒแƒ› Conan-แƒ›แƒ แƒฉแƒแƒ›แƒแƒขแƒ•แƒ˜แƒ แƒ—แƒแƒก, แƒ“แƒแƒแƒ˜แƒœแƒกแƒขแƒแƒšแƒ˜แƒ แƒแƒก แƒ“แƒ แƒแƒแƒจแƒ”แƒœแƒแƒก แƒกแƒแƒญแƒ˜แƒ แƒ แƒ“แƒแƒ›แƒแƒ™แƒ˜แƒ“แƒ”แƒ‘แƒฃแƒšแƒ”แƒ‘แƒ”แƒ‘แƒ˜, แƒแƒ  แƒแƒ แƒ˜แƒก แƒกแƒแƒ™แƒ›แƒแƒ แƒ˜แƒกแƒ˜ แƒ˜แƒ›แƒ˜แƒกแƒแƒ—แƒ•แƒ˜แƒก, แƒ แƒแƒ› แƒ’แƒแƒ“แƒ›แƒแƒฌแƒ”แƒ แƒแƒก โ€œconan install .โ€, แƒ›แƒแƒœ แƒแƒกแƒ”แƒ•แƒ” แƒฃแƒœแƒ“แƒ แƒ’แƒแƒ˜แƒแƒ แƒแƒก -s compiler.libcxx=libstdc++11 แƒžแƒแƒ แƒแƒ›แƒ”แƒขแƒ แƒ˜, แƒฌแƒ˜แƒœแƒแƒแƒฆแƒ›แƒ“แƒ”แƒ’ แƒจแƒ”แƒ›แƒ—แƒฎแƒ•แƒ”แƒ•แƒแƒจแƒ˜. แƒ—แƒฅแƒ•แƒ”แƒœแƒ˜ แƒ’แƒแƒœแƒแƒชแƒฎแƒแƒ“แƒ˜แƒก แƒ“แƒแƒ™แƒแƒ•แƒจแƒ˜แƒ แƒ”แƒ‘แƒ˜แƒก แƒ”แƒขแƒแƒžแƒ–แƒ” แƒ—แƒฅแƒ•แƒ”แƒœ แƒ แƒ˜แƒกแƒ™แƒแƒ•แƒ— แƒจแƒ”แƒชแƒ“แƒแƒ›แƒ”แƒ‘แƒ˜แƒก แƒ—แƒแƒ˜แƒ’แƒฃแƒšแƒ˜แƒก แƒ›แƒ˜แƒฆแƒ”แƒ‘แƒแƒก. แƒ›แƒ” แƒ แƒแƒ›แƒ“แƒ”แƒœแƒ˜แƒ›แƒ” แƒกแƒแƒแƒ—แƒ˜แƒก แƒ’แƒแƒœแƒ›แƒแƒ•แƒšแƒแƒ‘แƒแƒจแƒ˜ แƒ“แƒแƒ•แƒ แƒฉแƒ˜ แƒแƒ› แƒจแƒ”แƒชแƒ“แƒแƒ›แƒ˜แƒ— แƒ“แƒ แƒ˜แƒ›แƒ”แƒ“แƒ˜ แƒ›แƒแƒฅแƒ•แƒก, แƒ แƒแƒ› แƒ”แƒก แƒกแƒขแƒแƒขแƒ˜แƒ แƒ“แƒแƒ”แƒฎแƒ›แƒแƒ แƒ”แƒ‘แƒ แƒกแƒฎแƒ•แƒ แƒแƒ“แƒแƒ›แƒ˜แƒแƒœแƒ”แƒ‘แƒก แƒแƒ› แƒžแƒ แƒแƒ‘แƒšแƒ”แƒ›แƒ˜แƒก แƒ›แƒแƒ’แƒ•แƒแƒ แƒ”แƒ‘แƒแƒจแƒ˜ แƒœแƒแƒ™แƒšแƒ”แƒ‘ แƒ“แƒ แƒแƒจแƒ˜.

แƒจแƒ”แƒ›แƒ“แƒ”แƒ’, docker-compose.yml-แƒ˜แƒก แƒ“แƒแƒฌแƒ”แƒ แƒ˜แƒก แƒจแƒ”แƒ›แƒ“แƒ”แƒ’, แƒฉแƒ”แƒ›แƒ˜ แƒ›แƒ”แƒ’แƒแƒ‘แƒ แƒ˜แƒก แƒ แƒฉแƒ”แƒ•แƒ˜แƒ—, แƒ“แƒแƒ•แƒแƒ›แƒแƒขแƒ” แƒ›แƒฎแƒแƒ แƒ“แƒแƒญแƒ”แƒ แƒ แƒคแƒฃแƒœแƒ—แƒฃแƒจแƒ แƒ™แƒแƒขแƒแƒ แƒฆแƒ แƒ“แƒ แƒแƒฎแƒšแƒ แƒ—แƒฅแƒ•แƒ”แƒœ แƒจแƒ”แƒ’แƒ˜แƒซแƒšแƒ˜แƒแƒ— แƒ›แƒ˜แƒ˜แƒฆแƒแƒ— แƒกแƒ แƒฃแƒšแƒคแƒแƒกแƒแƒ•แƒแƒœแƒ˜ แƒจแƒแƒ‘แƒšแƒแƒœแƒ˜ REST API แƒกแƒ”แƒ แƒ•แƒ˜แƒกแƒ˜แƒกแƒ—แƒ•แƒ˜แƒก C++-แƒจแƒ˜, แƒ›แƒแƒ แƒ’แƒ”แƒ‘แƒฃแƒšแƒ˜ แƒ’แƒแƒ แƒ”แƒ›แƒแƒ—แƒ˜ แƒ“แƒ แƒ“แƒแƒ˜แƒœแƒกแƒขแƒแƒšแƒ˜แƒ แƒ”แƒ‘แƒฃแƒšแƒ˜ PostgreSQL, แƒฃแƒ‘แƒ แƒแƒšแƒแƒ“ แƒ™แƒแƒœแƒกแƒแƒšแƒจแƒ˜ โ€žแƒฅแƒฃแƒฅแƒ˜-แƒคแƒแƒ˜แƒšแƒ”แƒ‘แƒ˜แƒกโ€œ แƒจแƒ”แƒงแƒ•แƒแƒœแƒ˜แƒ—. https://github.com/KovalevVasiliy/cpp_rest_api_template.git" แƒ“แƒ แƒจแƒ”แƒ›แƒ“แƒ”แƒ’ "แƒ“แƒแƒ™แƒ”แƒ -แƒ™แƒแƒ›แƒžแƒแƒ–แƒ˜แƒชแƒ˜แƒ - แƒแƒจแƒ”แƒœแƒ”แƒ‘แƒ".

แƒ˜แƒ›แƒ”แƒ“แƒ˜ แƒ›แƒแƒฅแƒ•แƒก, แƒ แƒแƒ› แƒ”แƒก แƒจแƒแƒ‘แƒšแƒแƒœแƒ˜ แƒ“แƒแƒ”แƒฎแƒ›แƒแƒ แƒ”แƒ‘แƒ แƒ“แƒแƒ›แƒฌแƒงแƒ”แƒ‘แƒ—แƒแƒ—แƒ•แƒ˜แƒก REST API แƒแƒžแƒšแƒ˜แƒ™แƒแƒชแƒ˜แƒ”แƒ‘แƒ˜แƒก แƒจแƒ”แƒ›แƒฃแƒจแƒแƒ•แƒ”แƒ‘แƒ˜แƒก แƒ แƒ—แƒฃแƒš แƒ’แƒ–แƒแƒ–แƒ” แƒ“แƒ˜แƒ“ แƒ“แƒ แƒซแƒšแƒ˜แƒ”แƒ , แƒ›แƒแƒ’แƒ แƒแƒ› แƒ˜แƒกแƒ”แƒ— แƒ›แƒแƒฃแƒฎแƒ”แƒ แƒฎแƒ”แƒ‘แƒ”แƒš แƒ”แƒœแƒแƒ–แƒ”, แƒ แƒแƒ’แƒแƒ แƒ˜แƒชแƒแƒ C++.
แƒแƒกแƒ”แƒ•แƒ”, แƒ’แƒ˜แƒ แƒฉแƒ”แƒ•แƒ— แƒแƒฅ แƒฌแƒแƒ˜แƒ™แƒ˜แƒ—แƒฎแƒแƒ— แƒ”แƒก แƒกแƒขแƒแƒขแƒ˜แƒ. แƒ˜แƒ’แƒ˜ แƒฃแƒคแƒ แƒ แƒ“แƒ”แƒขแƒแƒšแƒฃแƒ แƒแƒ“ แƒ’แƒแƒœแƒ›แƒแƒ แƒขแƒแƒ•แƒก, แƒ—แƒฃ แƒ แƒแƒ’แƒแƒ  แƒฃแƒœแƒ“แƒ แƒ˜แƒ›แƒฃแƒจแƒแƒแƒ— POCO-แƒกแƒ—แƒแƒœ แƒ“แƒ แƒ“แƒแƒฌแƒ”แƒ แƒแƒ— แƒ—แƒฅแƒ•แƒ”แƒœแƒ˜ REST API แƒกแƒ”แƒ แƒ•แƒ˜แƒกแƒ˜.

แƒฌแƒงแƒแƒ แƒ: www.habr.com

แƒแƒฎแƒแƒšแƒ˜ แƒ™แƒแƒ›แƒ”แƒœแƒขแƒแƒ แƒ˜แƒก แƒ“แƒแƒ›แƒแƒขแƒ”แƒ‘แƒ