āĻāĻ āĻ¨āĻŋāĻŦāĻ¨ā§āĻ§ā§ āĻāĻŽāĻŋ āĻā§āĻāĻžāĻŦā§ āĻāĻāĻāĻŋ āĻā§āĻŽāĻĒā§āĻ˛ā§āĻ (āĻā§āĻāĻŋāĻāĻžāĻāĻžāĻ°) āĻ¤ā§āĻ°āĻŋ āĻāĻ°ā§āĻāĻŋ āĻāĻŦāĻ āĻĄāĻāĻžāĻ°/āĻĄāĻāĻžāĻ°-āĻāĻŽā§āĻĒā§āĻ āĻāĻŦāĻ āĻā§āĻ¨āĻžāĻ¨ āĻĒā§āĻ¯āĻžāĻā§āĻ āĻŽā§āĻ¯āĻžāĻ¨ā§āĻāĻžāĻ° āĻŦā§āĻ¯āĻŦāĻšāĻžāĻ° āĻāĻ°ā§ C++ āĻ āĻāĻāĻāĻŋ REST API āĻĒāĻ°āĻŋāĻˇā§āĻŦāĻž āĻ˛ā§āĻāĻžāĻ° āĻāĻ¨ā§āĻ¯ āĻāĻāĻāĻŋ āĻĒāĻ°āĻŋāĻŦā§āĻļ āĻ¸ā§āĻ āĻāĻĒ āĻāĻ°ā§āĻāĻŋ āĻ¸ā§ āĻ¸āĻŽā§āĻĒāĻ°ā§āĻā§ āĻāĻĨāĻž āĻŦāĻ˛āĻŦāĨ¤
āĻĒāĻ°āĻŦāĻ°ā§āĻ¤ā§ āĻšā§āĻ¯āĻžāĻāĻžāĻĨāĻ¨ā§āĻ° āĻ¸āĻŽāĻ¯āĻŧ, āĻ¯ā§āĻāĻŋāĻ¤ā§ āĻāĻŽāĻŋ āĻŦā§āĻ¯āĻžāĻāĻāĻ¨ā§āĻĄ āĻĄā§āĻā§āĻ˛āĻĒāĻžāĻ° āĻšāĻŋāĻ¸ā§āĻŦā§ āĻ
āĻāĻļāĻā§āĻ°āĻšāĻŖ āĻāĻ°ā§āĻāĻŋāĻ˛āĻžāĻŽ, āĻĒāĻ°āĻŦāĻ°ā§āĻ¤ā§ āĻŽāĻžāĻāĻā§āĻ°ā§āĻ¸āĻžāĻ°ā§āĻāĻŋāĻ¸ āĻ˛āĻŋāĻāĻ¤ā§ āĻā§ āĻŦā§āĻ¯āĻŦāĻšāĻžāĻ° āĻāĻ°āĻ¤ā§ āĻšāĻŦā§ āĻ¤āĻž āĻ¨āĻŋāĻ¯āĻŧā§ āĻĒā§āĻ°āĻļā§āĻ¨ āĻāĻ ā§āĻāĻŋāĻ˛āĨ¤ āĻ āĻĒāĻ°ā§āĻ¯āĻ¨ā§āĻ¤ āĻ¯āĻž āĻāĻŋāĻā§ āĻ˛ā§āĻāĻž āĻšāĻ¯āĻŧā§āĻā§ āĻ¸āĻŦāĻ āĻāĻŽāĻžāĻ° āĻāĻŦāĻ āĻāĻŽāĻžāĻ° āĻ˛ā§āĻāĻž
āĻ¸ā§āĻ¤āĻ°āĻžāĻ, āĻāĻŽāĻ°āĻž āĻāĻāĻāĻŋ āĻāĻā§āĻ-āĻ˛ā§āĻĄ āĻĒāĻ°āĻŋāĻˇā§āĻŦāĻž āĻ˛ā§āĻāĻžāĻ° āĻāĻžāĻāĻāĻŋāĻ° āĻŽā§āĻā§āĻŽā§āĻāĻŋ āĻšāĻ¯āĻŧā§āĻāĻŋāĻ˛āĻžāĻŽ, āĻ¯āĻžāĻ° āĻĒā§āĻ°āĻ§āĻžāĻ¨ āĻāĻžāĻ āĻāĻŋāĻ˛ āĻāĻāĻŋāĻ¤ā§ āĻāĻ¸āĻž āĻĄā§āĻāĻžāĻā§ āĻĒā§āĻ°āĻŋāĻĒā§āĻ°āĻ¸ā§āĻ¸ āĻāĻ°āĻž āĻāĻŦāĻ āĻāĻāĻŋ āĻĄāĻžāĻāĻžāĻŦā§āĻ¸ā§ āĻ˛ā§āĻāĻžāĨ¤ āĻāĻŦāĻ āĻāĻ°ā§āĻāĻāĻŋ āĻ§ā§āĻāĻ¯āĻŧāĻž āĻŦāĻŋāĻ°āĻ¤āĻŋāĻ° āĻĒāĻ°ā§, āĻāĻāĻāĻ¨ āĻŦāĻ¨ā§āĻ§ā§ āĻĒāĻ°āĻžāĻŽāĻ°ā§āĻļ āĻĻāĻŋāĻ¯āĻŧā§āĻāĻŋāĻ˛ āĻ¯ā§ āĻāĻŽāĻŋ, āĻāĻāĻāĻ¨ C++ āĻŦāĻŋāĻāĻžāĻļāĻāĻžāĻ°ā§ āĻšāĻŋāĻ¸āĻžāĻŦā§, āĻĒā§āĻļāĻžāĻĻāĻžāĻ°āĻĻā§āĻ° āĻŦā§āĻ¯āĻŦāĻšāĻžāĻ° āĻāĻ°ā§ āĻāĻ āĻĒāĻ°āĻŋāĻˇā§āĻŦāĻžāĻāĻŋ āĻ˛āĻŋāĻāĻŋāĨ¤ āĻāĻ āĻ¯ā§āĻā§āĻ¤āĻŋ āĻšāĻ˛ āĻ¯ā§ āĻāĻāĻŋ āĻĻā§āĻ°ā§āĻ¤āĻ¤āĻ°, āĻāĻ°āĻ āĻāĻ¤ā§āĻĒāĻžāĻĻāĻ¨āĻļā§āĻ˛ āĻšāĻŦā§ āĻāĻŦāĻ āĻ¸āĻžāĻ§āĻžāĻ°āĻŖāĻāĻžāĻŦā§, āĻāĻŽāĻ°āĻž āĻā§āĻāĻžāĻŦā§ āĻĻāĻ˛ā§āĻ° āĻ¸āĻāĻ¸ā§āĻĨāĻžāĻ¨āĻā§āĻ˛āĻŋ āĻĒāĻ°āĻŋāĻāĻžāĻ˛āĻ¨āĻž āĻāĻ°āĻ¤ā§ āĻāĻžāĻ¨āĻŋ āĻ¤āĻž āĻ¨āĻŋāĻ¯āĻŧā§ āĻā§āĻ°āĻŋāĻ°āĻž āĻāĻ¨āĻ¨ā§āĻĻāĻŋāĻ¤ āĻšāĻŦā§āĨ¤ āĻ¯āĻžāĻ° āĻāĻ¤ā§āĻ¤āĻ°ā§ āĻāĻŽāĻŋ āĻŦāĻ˛ā§āĻāĻŋāĻ˛āĻžāĻŽ āĻ¯ā§ āĻāĻŽāĻŋ C++ āĻ¤ā§ āĻāĻŽāĻ¨ āĻāĻŋāĻā§ āĻāĻ°āĻŋāĻ¨āĻŋ āĻāĻŦāĻ āĻŦāĻžāĻāĻŋ 20+ āĻāĻ¨ā§āĻāĻž āĻ¸āĻšāĻā§ āĻāĻĒāĻ¯ā§āĻā§āĻ¤ āĻ˛āĻžāĻāĻŦā§āĻ°ā§āĻ°āĻŋ āĻ āĻ¨ā§āĻ¸āĻ¨ā§āĻ§āĻžāĻ¨, āĻ¸āĻāĻāĻ˛āĻ¨ āĻāĻŦāĻ āĻ˛āĻŋāĻā§āĻ āĻāĻ°āĻžāĻ° āĻāĻ¨ā§āĻ¯ āĻŦā§āĻ¯āĻ¯āĻŧ āĻāĻ°āĻ¤ā§ āĻĒāĻžāĻ°āĻŋāĨ¤ āĻ¸āĻšāĻ āĻāĻĨāĻžāĻ¯āĻŧ, āĻāĻŽāĻŋ āĻāĻŋāĻā§āĻ¨ āĻāĻāĻ. āĻāĻāĻŋāĻ āĻāĻŽāĻ°āĻž āĻ¸āĻŋāĻĻā§āĻ§āĻžāĻ¨ā§āĻ¤ āĻ¨āĻŋāĻ¯āĻŧā§āĻāĻŋ āĻāĻŦāĻ āĻļāĻžāĻ¨ā§āĻ¤āĻāĻžāĻŦā§ āĻĒāĻžāĻāĻĨāĻ¨ā§ āĻ¸āĻŦāĻāĻŋāĻā§ āĻ¸āĻŽā§āĻĒāĻ¨ā§āĻ¨ āĻāĻ°ā§āĻāĻŋāĨ¤
āĻāĻāĻ¨, āĻā§āĻ°āĻĒā§āĻ°ā§āĻŦāĻ āĻ¸ā§āĻŦ-āĻŦāĻŋāĻā§āĻāĻŋāĻ¨ā§āĻ¨āĻ¤āĻžāĻ° āĻ¸āĻŽāĻ¯āĻŧ, āĻāĻŽāĻŋ āĻ¸āĻŋ++ āĻ āĻĒāĻ°āĻŋāĻˇā§āĻŦāĻžāĻā§āĻ˛āĻŋ āĻā§āĻāĻžāĻŦā§ āĻ˛āĻŋāĻāĻ¤ā§ āĻšāĻ¯āĻŧ āĻ¤āĻž āĻ¨āĻŋāĻ°ā§āĻ§āĻžāĻ°āĻŖ āĻāĻ°āĻžāĻ° āĻ¸āĻŋāĻĻā§āĻ§āĻžāĻ¨ā§āĻ¤ āĻ¨āĻŋāĻ¯āĻŧā§āĻāĻŋāĨ¤ āĻĒā§āĻ°āĻĨāĻŽ āĻāĻŋāĻ¨āĻŋāĻ¸āĻāĻŋ āĻāĻāĻāĻŋ āĻāĻĒāĻ¯ā§āĻā§āĻ¤ āĻā§āĻ°āĻ¨ā§āĻĨāĻžāĻāĻžāĻ°ā§āĻ° āĻŦāĻŋāĻˇāĻ¯āĻŧā§ āĻ¸āĻŋāĻĻā§āĻ§āĻžāĻ¨ā§āĻ¤ āĻ¨ā§āĻāĻ¯āĻŧāĻž āĻšāĻ¯āĻŧā§āĻāĻŋāĻ˛āĨ¤ āĻāĻŽāĻžāĻ° āĻĒāĻāĻ¨ā§āĻĻ āĻĒāĻĄāĻŧā§ āĻā§āĻ˛
conanfile.txt
[āĻĒā§āĻ°āĻ¯āĻŧā§āĻāĻ¨] poco/1.9.3
libpq/11.5
āĻāĻŦāĻ āĻāĻāĻāĻŋ āĻ¸āĻžāĻ§āĻžāĻ°āĻŖ āĻāĻŽāĻžāĻ¨ā§āĻĄ āĻĻāĻŋāĻ¯āĻŧā§ "conan install āĻāĻ°ā§āĻ¨āĨ¤" āĻĒā§āĻ°āĻ¯āĻŧā§āĻāĻ¨ā§āĻ¯āĻŧ āĻ˛āĻžāĻāĻŦā§āĻ°ā§āĻ°āĻŋ āĻāĻ¨āĻ¸ā§āĻāĻ˛ āĻāĻ°ā§āĻ¨āĨ¤ āĻ¸ā§āĻŦāĻžāĻāĻžāĻŦāĻŋāĻāĻāĻžāĻŦā§āĻ, āĻāĻāĻŋāĻ¤ā§āĻ āĻĒāĻ°āĻŋāĻŦāĻ°ā§āĻ¤āĻ¨ āĻāĻ°āĻž āĻĻāĻ°āĻāĻžāĻ° āĻāĻŋāĻ˛
CMakeLists.txt
include(build/conanbuildinfo.cmake)
conan_basic_setup()
target_link_libraries(<target_name> ${CONAN_LIBS})
āĻāĻ° āĻĒāĻ°ā§, āĻāĻŽāĻŋ PostgreSQL āĻāĻ° āĻ¸āĻžāĻĨā§ āĻāĻžāĻ āĻāĻ°āĻžāĻ° āĻāĻ¨ā§āĻ¯ āĻāĻāĻāĻŋ āĻ˛āĻžāĻāĻŦā§āĻ°ā§āĻ°āĻŋ āĻā§āĻāĻāĻ¤ā§ āĻļā§āĻ°ā§ āĻāĻ°āĻŋ, āĻ¯ā§āĻšā§āĻ¤ā§ āĻāĻāĻŋ āĻāĻŽāĻ¨ āĻāĻāĻāĻŋ āĻāĻŋāĻ˛ āĻ¯āĻžāĻ° āĻ¸āĻžāĻĨā§ āĻāĻŽāĻžāĻ° āĻāĻžāĻ āĻāĻ°āĻžāĻ° āĻ āĻāĻŋāĻā§āĻāĻ¤āĻž āĻāĻŽ āĻāĻŋāĻ˛ āĻāĻŦāĻ āĻāĻāĻŋ āĻāĻŽāĻžāĻĻā§āĻ° āĻĒāĻžāĻāĻĨāĻ¨ āĻĒāĻ°āĻŋāĻˇā§āĻŦāĻžāĻā§āĻ˛āĻŋāĻ° āĻ¸āĻžāĻĨā§ āĻ¯ā§āĻāĻžāĻ¯ā§āĻ āĻāĻ°ā§āĻāĻŋāĻ˛āĨ¤ āĻāĻŦāĻ āĻāĻŽāĻŋ āĻāĻŋ āĻļāĻŋāĻā§āĻāĻŋ āĻāĻžāĻ¨ā§āĻ¨? āĻāĻāĻž POCO āĻ¤ā§! āĻāĻŋāĻ¨ā§āĻ¤ā§ āĻā§āĻ¨āĻžāĻ¨ āĻāĻžāĻ¨ā§āĻ¨ āĻ¨āĻž āĻ¯ā§ āĻāĻāĻŋ POCO-āĻ¤ā§ āĻ°āĻ¯āĻŧā§āĻā§ āĻāĻŦāĻ āĻāĻāĻŋ āĻā§āĻāĻžāĻŦā§ āĻ¤ā§āĻ°āĻŋ āĻāĻ°āĻ¤ā§ āĻšāĻ¯āĻŧ āĻ¤āĻž āĻāĻžāĻ¨ā§āĻ¨ āĻ¨āĻž; āĻ¸āĻāĻā§āĻ°āĻšāĻ¸ā§āĻĨāĻ˛ā§ āĻāĻāĻāĻŋ āĻĒā§āĻ°āĻžāĻ¨ā§ āĻāĻ¨āĻĢāĻŋāĻāĻžāĻ°ā§āĻļāĻ¨ āĻĢāĻžāĻāĻ˛ āĻ°āĻ¯āĻŧā§āĻā§ (āĻāĻŽāĻŋ āĻāĻ¤āĻŋāĻŽāĻ§ā§āĻ¯ā§ POCO āĻ¨āĻŋāĻ°ā§āĻŽāĻžāĻ¤āĻžāĻĻā§āĻ° āĻāĻžāĻā§ āĻāĻ āĻ¤ā§āĻ°ā§āĻāĻŋ āĻ¸āĻŽā§āĻĒāĻ°ā§āĻā§ āĻ˛āĻŋāĻā§āĻāĻŋ)āĨ¤ āĻāĻ° āĻŽāĻžāĻ¨ā§ āĻāĻĒāĻ¨āĻžāĻā§ āĻ āĻ¨ā§āĻ¯ āĻ˛āĻžāĻāĻŦā§āĻ°ā§āĻ°āĻŋ āĻā§āĻāĻāĻ¤ā§ āĻšāĻŦā§āĨ¤
āĻāĻŦāĻ āĻ¤āĻžāĻ°āĻĒāĻ°ā§ āĻāĻŽāĻžāĻ° āĻĒāĻāĻ¨ā§āĻĻ āĻāĻāĻāĻŋ āĻāĻŽ āĻāĻ¨āĻĒā§āĻ°āĻŋāĻ¯āĻŧ āĻ˛āĻžāĻāĻŦā§āĻ°ā§āĻ°āĻŋāĻ¤ā§ āĻĒāĻĄāĻŧā§āĻāĻŋāĻ˛
āĻĒāĻ°āĻŦāĻ°ā§āĻ¤ā§ āĻĒāĻĻāĻā§āĻˇā§āĻĒāĻāĻŋ āĻāĻŋāĻ˛ āĻāĻāĻāĻŋ āĻĒāĻ°āĻŋāĻˇā§āĻŦāĻž āĻā§āĻŽāĻĒā§āĻ˛ā§āĻ āĻ˛ā§āĻāĻž āĻ¯āĻž āĻ
āĻ¨ā§āĻ°ā§āĻ§āĻā§āĻ˛āĻŋ āĻĒā§āĻ°āĻā§āĻ°āĻŋāĻ¯āĻŧāĻž āĻāĻ°āĻ¤ā§ āĻĒāĻžāĻ°ā§āĨ¤
āĻāĻŽāĻžāĻĻā§āĻ° āĻ
āĻŦāĻļā§āĻ¯āĻ 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;
}
āĻĒā§āĻ°āĻ§āĻžāĻ¨ āĻĒāĻĻā§āĻ§āĻ¤āĻŋāĻ¤ā§ āĻāĻŽāĻžāĻĻā§āĻ° āĻ āĻŦāĻļā§āĻ¯āĻ āĻĒāĻ°āĻžāĻŽāĻŋāĻ¤āĻŋāĻā§āĻ˛āĻŋ āĻ¸ā§āĻ āĻāĻ°āĻ¤ā§ āĻšāĻŦā§: āĻĒā§āĻ°ā§āĻ, āĻĨā§āĻ°ā§āĻĄā§āĻ° āĻ¸āĻāĻā§āĻ¯āĻž āĻāĻŦāĻ āĻ¸āĻžāĻ°āĻŋāĻ° āĻāĻāĻžāĻ°āĨ¤ āĻāĻŦāĻ āĻ¸āĻŦāĻā§āĻ¯āĻŧā§ āĻā§āĻ°ā§āĻ¤ā§āĻŦāĻĒā§āĻ°ā§āĻŖ, āĻāĻāĻ¤ āĻ āĻ¨ā§āĻ°ā§āĻ§ā§āĻ° āĻāĻ¨ā§āĻ¯ āĻāĻĒāĻ¨āĻžāĻā§ āĻ āĻŦāĻļā§āĻ¯āĻ āĻāĻāĻāĻŋ āĻšā§āĻ¯āĻžāĻ¨ā§āĻĄāĻ˛āĻžāĻ° āĻ¨āĻŋāĻ°ā§āĻĻāĻŋāĻˇā§āĻ āĻāĻ°āĻ¤ā§ āĻšāĻŦā§āĨ¤ āĻāĻāĻŋ āĻāĻāĻāĻŋ āĻāĻžāĻ°āĻāĻžāĻ¨āĻž āĻ¤ā§āĻ°āĻŋ āĻāĻ°ā§ āĻāĻ°āĻž āĻšāĻ¯āĻŧ
TemplateRequestHandler Factory
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 āĻāĻ° āĻ¸āĻžāĻĨā§ āĻāĻžāĻ āĻāĻ°āĻžāĻ° āĻāĻ¨ā§āĻ¯ āĻāĻŽāĻŋ āĻāĻāĻāĻŋ āĻā§āĻ˛āĻžāĻ¸ āĻā§āĻŽāĻĒā§āĻ˛ā§āĻāĻ āĻ¤ā§āĻ°āĻŋ āĻāĻ°ā§āĻāĻŋāĨ¤ āĻ¸āĻšāĻ āĻāĻ¸āĻāĻŋāĻāĻāĻ˛ āĻ¸āĻā§āĻāĻžāĻ˛āĻ¨ āĻāĻ°āĻžāĻ° āĻāĻ¨ā§āĻ¯, āĻ¯ā§āĻŽāĻ¨ āĻāĻāĻāĻŋ āĻā§āĻŦāĻŋāĻ˛ āĻ¤ā§āĻ°āĻŋ, āĻāĻāĻāĻŋ āĻĒāĻĻā§āĻ§āĻ¤āĻŋ āĻāĻā§ āĻāĻā§āĻ¸āĻŋāĻāĻŋāĻāĻ āĻāĻ¸āĻāĻŋāĻāĻāĻ˛(). āĻāĻ°āĻ āĻāĻāĻŋāĻ˛ āĻĒā§āĻ°āĻļā§āĻ¨ āĻŦāĻž āĻĄā§āĻāĻž āĻĒā§āĻ¨āĻ°ā§āĻĻā§āĻ§āĻžāĻ°ā§āĻ° āĻāĻ¨ā§āĻ¯, āĻāĻĒāĻ¨āĻžāĻā§ āĻāĻ° āĻŽāĻžāĻ§ā§āĻ¯āĻŽā§ āĻāĻāĻāĻŋ āĻ¸āĻāĻ¯ā§āĻ āĻĒā§āĻ¤ā§ āĻšāĻŦā§ āĻ¸āĻāĻ¯ā§āĻ āĻĒāĻžāĻ¨() āĻāĻŦāĻ 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
āĻāĻĒāĻ¨āĻŋ āĻ¸āĻŦ āĻā§āĻĄ āĻĻā§āĻāĻ¤ā§ āĻĒāĻžāĻ°ā§āĻ¨
āĻāĻŦāĻ āĻāĻāĻ¨ dockerfile āĻāĻŦāĻ docker-compose.yml āĻ˛ā§āĻāĻžāĻ° āĻā§āĻĄāĻŧāĻžāĻ¨ā§āĻ¤ āĻĒāĻ°ā§āĻ¯āĻžāĻ¯āĻŧā§ āĻāĻ¸ā§āĨ¤ āĻ¸āĻ¤ā§āĻ¯āĻŋ āĻŦāĻ˛āĻ¤ā§, āĻāĻāĻŋ āĻŦā§āĻļāĻŋāĻ°āĻāĻžāĻ āĻ¸āĻŽāĻ¯āĻŧ āĻ¨ā§āĻ¯āĻŧ, āĻāĻŦāĻ āĻļā§āĻ§ā§āĻŽāĻžāĻ¤ā§āĻ° āĻāĻŽāĻŋ āĻāĻāĻāĻ¨ āĻ¨ā§āĻŦ āĻŦāĻ˛ā§āĻ āĻ¨āĻ¯āĻŧ, āĻāĻžāĻ°āĻŖ āĻĒā§āĻ°āĻ¤āĻŋāĻŦāĻžāĻ° āĻ˛āĻžāĻāĻŦā§āĻ°ā§āĻ°āĻŋāĻā§āĻ˛āĻŋ āĻĒā§āĻ¨āĻ°ā§āĻ¨āĻŋāĻ°ā§āĻŽāĻžāĻŖ āĻāĻ°āĻž āĻĒā§āĻ°āĻ¯āĻŧā§āĻāĻ¨ āĻāĻŋāĻ˛, āĻāĻŋāĻ¨ā§āĻ¤ā§ āĻāĻžāĻ¨āĻ¨ā§āĻ° āĻā§āĻˇāĻ¤āĻŋāĻ° āĻāĻžāĻ°āĻŖā§āĨ¤ āĻāĻĻāĻžāĻšāĻ°āĻŖāĻ¸ā§āĻŦāĻ°ā§āĻĒ, āĻāĻ¨āĻžāĻ¨ āĻĄāĻžāĻāĻ¨āĻ˛ā§āĻĄ, āĻāĻ¨āĻ¸ā§āĻāĻ˛ āĻāĻŦāĻ āĻĒā§āĻ°āĻ¯āĻŧā§āĻāĻ¨ā§āĻ¯āĻŧ āĻ¨āĻŋāĻ°ā§āĻāĻ°āĻ¤āĻž āĻ¤ā§āĻ°āĻŋ āĻāĻ°āĻžāĻ° āĻāĻ¨ā§āĻ¯, "conan install" āĻĄāĻžāĻāĻ¨āĻ˛ā§āĻĄ āĻāĻ°āĻžāĻ° āĻāĻ¨ā§āĻ¯ āĻāĻāĻŋ āĻ¯āĻĨā§āĻˇā§āĻ āĻ¨āĻ¯āĻŧ, āĻāĻāĻŋāĻā§ -s compiler.libcxx=libstdc++11 āĻĒā§āĻ¯āĻžāĻ°āĻžāĻŽāĻŋāĻāĻžāĻ°āĻ āĻĒāĻžāĻ¸ āĻāĻ°āĻ¤ā§ āĻšāĻŦā§, āĻ āĻ¨ā§āĻ¯āĻĨāĻžāĻ¯āĻŧ āĻāĻĒāĻ¨āĻžāĻ° āĻāĻŦā§āĻĻāĻ¨ā§āĻ° āĻ˛āĻŋāĻā§āĻ āĻāĻ°āĻžāĻ° āĻĒāĻ°ā§āĻ¯āĻžāĻ¯āĻŧā§ āĻāĻĒāĻ¨āĻžāĻ° āĻāĻāĻā§āĻā§āĻ āĻ¤ā§āĻ°ā§āĻāĻŋ āĻšāĻāĻ¯āĻŧāĻžāĻ° āĻā§āĻāĻāĻŋ āĻ°āĻ¯āĻŧā§āĻā§āĨ¤ āĻāĻŽāĻŋ āĻāĻ¯āĻŧā§āĻ āĻāĻ¨ā§āĻāĻž āĻ§āĻ°ā§ āĻāĻ āĻ¤ā§āĻ°ā§āĻāĻŋāĻ° āĻ¸āĻžāĻĨā§ āĻāĻāĻā§ āĻāĻāĻŋ āĻāĻŦāĻ āĻāĻŽāĻŋ āĻāĻļāĻž āĻāĻ°āĻŋ āĻāĻ āĻ¨āĻŋāĻŦāĻ¨ā§āĻ§āĻāĻŋ āĻ āĻ¨ā§āĻ¯ āĻ˛ā§āĻā§āĻĻā§āĻ°āĻā§ āĻāĻŽ āĻ¸āĻŽāĻ¯āĻŧā§ āĻāĻ āĻ¸āĻŽāĻ¸ā§āĻ¯āĻžāĻāĻŋ āĻ¸āĻŽāĻžāĻ§āĻžāĻ¨ āĻāĻ°āĻ¤ā§ āĻ¸āĻšāĻžāĻ¯āĻŧāĻ¤āĻž āĻāĻ°āĻŦā§ā§ˇ
āĻāĻ°āĻĒāĻ°, docker-compose.yml āĻ˛ā§āĻāĻžāĻ° āĻĒāĻ°, āĻāĻŽāĻžāĻ° āĻŦāĻ¨ā§āĻ§ā§āĻ° āĻĒāĻ°āĻžāĻŽāĻ°ā§āĻļā§, āĻāĻŽāĻŋ āĻ¸āĻŽāĻ°ā§āĻĨāĻ¨ āĻ¯ā§āĻ āĻāĻ°ā§āĻāĻŋ
āĻāĻŽāĻŋ āĻāĻļāĻž āĻāĻ°āĻŋ āĻāĻ āĻā§āĻŽāĻĒā§āĻ˛ā§āĻāĻāĻŋ āĻ¨āĻ¤ā§āĻ¨āĻĻā§āĻ°āĻā§ āĻ¤āĻžāĻĻā§āĻ° āĻĻā§āĻ°ā§āĻĻāĻžāĻ¨ā§āĻ¤ āĻāĻŦāĻ āĻļāĻā§āĻ¤āĻŋāĻļāĻžāĻ˛ā§, āĻāĻŋāĻ¨ā§āĻ¤ā§ C++ āĻāĻ° āĻŽāĻ¤ā§ āĻāĻ¨āĻžāĻĄāĻŧāĻŋ āĻāĻžāĻˇāĻžāĻ¯āĻŧ REST API āĻ
ā§āĻ¯āĻžāĻĒā§āĻ˛āĻŋāĻā§āĻļāĻ¨ āĻ¤ā§āĻ°āĻŋāĻ° āĻāĻ āĻŋāĻ¨ āĻĒāĻĨā§ āĻ¸āĻžāĻšāĻžāĻ¯ā§āĻ¯ āĻāĻ°āĻŦā§āĨ¤
āĻāĻāĻžāĻĄāĻŧāĻžāĻ, āĻāĻŽāĻŋ āĻāĻāĻžāĻ¨ā§ āĻĒāĻĄāĻŧāĻžāĻ° āĻ¸ā§āĻĒāĻžāĻ°āĻŋāĻļ āĻāĻ°āĻāĻŋ
āĻāĻ¤ā§āĻ¸: www.habr.com