เช เชฒเซเชเชฎเชพเช เชนเซเช เชคเซ เชตเชฟเชถเซ เชตเชพเชค เชเชฐเซเชถ เชเซ เชฎเซเช เชเซเชตเซ เชฐเซเชคเซ เชเซเชฎเซเชชเชฒเซเช (เชเซเชเซเชเชเชฐ) เชฌเชจเชพเชตเซเชฏเซเช เช เชจเซ เชกเซเชเชฐ/เชกเซเชเชฐ-เชเชเชชเซเช เช เชจเซ เชเซเชจเชจ เชชเซเชเซเช เชฎเซเชจเซเชเชฐเชจเซ เชเชชเชฏเซเช เชเชฐเซเชจเซ C++ เชฎเชพเช REST API เชธเซเชตเชพ เชฒเชเชตเชพ เชฎเชพเชเซ เชตเชพเชคเชพเชตเชฐเชฃ เชธเซเช เชเชฐเซเชฏเซเช.
เชเชเชพเชฎเซ เชนเซเชเชพเชฅเซเชจ เชฆเชฐเชฎเชฟเชฏเชพเชจ, เชเซเชฎเชพเช เชฎเซเช เชฌเซเชเชเชจเซเชก เชกเซเชตเชฒเชชเชฐ เชคเชฐเซเชเซ เชญเชพเช เชฒเซเชงเซ เชนเชคเซ, เชคเซเชฏเชพเชฐเซ เชชเซเชฐเชถเซเชจ เชเชญเซ เชฅเชฏเซ เชเซ เชเชเชพเชฎเซ เชฎเชพเชเชเซเชฐเซเชธเชฐเซเชตเชฟเชธ เชฒเชเชตเชพ เชฎเชพเชเซ เชถเซเช เชตเชพเชชเชฐเชตเซเช. เช
เชคเซเชฏเชพเชฐ เชธเซเชงเซ เชเซ เชเชเช เชฒเชเชพเชฏเซเช เชเซ เชคเซ เชฌเชงเซเช เชฎเชพเชฐเชพ เช
เชจเซ เชฎเชพเชฐเชพ เชฆเซเชตเชพเชฐเชพ เช เชฒเชเชพเชฏเซเช เชเซ
เชคเซเชฅเซ, เช เชฎเชจเซ เชเชเซเช-เชฒเซเชก เชธเซเชตเชพ เชฒเชเชตเชพเชจเชพ เชเชพเชฐเซเชฏเชจเซ เชธเชพเชฎเชจเซ เชเชฐเชตเซ เชชเชกเซเชฏเซ, เชเซเชจเซเช เชฎเซเชเซเชฏ เชเชพเชฐเซเชฏ เชคเซเชจเซ เชชเชพเชธเซ เชเชตเชคเชพ เชกเซเชเชพเชจเซ เชชเซเชฐเซเชชเซเชฐเซเชธเซเชธ เชเชฐเชตเชพเชจเซเช เชนเชคเซเช เช เชจเซ เชคเซเชจเซ เชกเซเชเชพเชฌเซเชเชฎเชพเช เชฒเชเชตเชพเชจเซเช เชนเชคเซเช. เช เชจเซ เชฌเซเชเชพ เชงเซเชฎเชพเชกเชพเชจเชพ เชตเชฟเชฐเชพเชฎ เชชเชเซ, เชเช เชฎเชฟเชคเซเชฐเช เชธเซเชเชตเซเชฏเซเช เชเซ เชนเซเช, C++ เชตเชฟเชเชพเชธเชเชฐเซเชคเชพ เชคเชฐเซเชเซ, เชเซเชฃเซเชจเซ เชเชชเชฏเซเช เชเชฐเซเชจเซ เช เชธเซเชตเชพ เชฒเชเซเช เชเซเช. เชเชจเซ เชฆเชฒเซเชฒ เช เชเซ เชเซ เชคเซ เชเชกเชชเซ, เชตเชงเซ เชเชคเซเชชเชพเชฆเช เชนเชถเซ เช เชจเซ เชธเชพเชฎเชพเชจเซเชฏ เชฐเซเชคเซ, เชเซเชฎเชจเชพ เชธเชเชธเชพเชงเชจเซเชจเซเช เชธเชเชเชพเชฒเชจ เชเซเชตเซ เชฐเซเชคเซ เชเชฐเชตเซเช เชคเซ เช เชฎเซ เชเชพเชฃเซเช เชเซเช เชคเซเชจเชพเชฅเซ เชเซเชฏเซเชฐเซ เชเซเชถ เชฅเชถเซ. เชเซเชจเชพ เชชเชฐ เชฎเซเช เชเชตเชพเชฌ เชเชชเซเชฏเซ เชเซ เชฎเซเช เชเซเชฏเชพเชฐเซเชฏ C++ เชฎเชพเช เชเชตเซ เชตเชธเซเชคเซเช เชเชฐเซ เชจเชฅเซ เช เชจเซ เชฌเชพเชเซเชจเชพ 20+ เชเชฒเชพเชเซ เชธเชฐเชณเชคเชพเชฅเซ เชฏเซเชเซเชฏ เชฒเชพเชเชฌเซเชฐเซเชฐเซเช เชถเซเชงเชตเชพ, เชเชฎเซเชชเชพเชเชฒ เชเชฐเชตเชพ เช เชจเซ เชฒเชฟเชเช เชเชฐเชตเชพ เชฎเชพเชเซ เชซเชพเชณเชตเซ เชถเชเซเช เชเซเช. เชธเชฐเชณ เชถเชฌเซเชฆเซเชฎเชพเช เชเชนเซเช เชคเซ, เชนเซเช เชฌเชนเชพเชฐ เชเชฟเชเชจ. เชคเซ เช เช เชฎเซ เชจเชเซเชเซ เชเชฐเซเชฏเซเช เช เชจเซ เชถเชพเชเชคเชฟเชฅเซ เชชเชพเชฏเชฅเซเชจเชฎเชพเช เชฌเชงเซเช เชชเซเชฐเซเชฃ เชเชฐเซเชฏเซเช.
เชนเชตเซ, เชซเชฐเชเชฟเชฏเชพเชค เชธเซเชต-เช
เชฒเชเชคเชพ เชฆเชฐเชฎเชฟเชฏเชพเชจ, เชฎเซเช C++ เชฎเชพเช เชธเซเชตเชพเช เชเซเชตเซ เชฐเซเชคเซ เชฒเชเชตเซ เชคเซ เชถเซเชงเชตเชพเชจเซเช เชจเชเซเชเซ เชเชฐเซเชฏเซเช. เชชเซเชฐเชฅเชฎ เชตเชธเซเชคเซ เช เชนเชคเซ เชเซ เชฏเซเชเซเชฏ เชชเซเชธเซเชคเชเชพเชฒเชฏ เชจเชเซเชเซ เชเชฐเชตเซเช. เชฎเชพเชฐเซ เชชเชธเชเชฆเชเซ เชชเชฐ เชชเชกเซ
conanfile.txt
[เชเชฐเซเชฐเซ เชเซ]poco/1.9.3
libpq/11.5
เช เชจเซ เชธเชฐเชณ เชเชฆเซเชถ เชธเชพเชฅเซ "เชเซเชจเชจ เชเชจเซเชธเซเชเซเชฒ เชเชฐเซ." เชเชฐเซเชฐเซ เชชเซเชธเซเชคเชเชพเชฒเชฏเซ เชธเซเชฅเชพเชชเชฟเชค เชเชฐเซ. เชธเซเชตเชพเชญเชพเชตเชฟเช เชฐเซเชคเซ, เชคเซเชฎเชพเช เชซเซเชฐเชซเชพเชฐ เชเชฐเชตเชพ เชชเชฃ เชเชฐเซเชฐเซ เชนเชคเชพ
CMakeLists.txt
include(build/conanbuildinfo.cmake)
conan_basic_setup()
target_link_libraries(<target_name> ${CONAN_LIBS})
เชคเซ เชชเชเซ, เชฎเซเช PostgreSQL เชธเชพเชฅเซ เชเชพเชฎ เชเชฐเชตเชพ เชฎเชพเชเซ เชเช เชฒเชพเชเชฌเซเชฐเซเชฐเซ เชถเซเชงเชตเชพเชจเซเช เชถเชฐเซ เชเชฐเซเชฏเซเช, เชเชพเชฐเชฃ เชเซ เชคเซ เชเช เชเชตเซ เชนเชคเซ เชเซเชจเซ เชธเชพเชฅเซ เชฎเชจเซ เชเชพเชฎ เชเชฐเชตเชพเชจเซ เชฅเซเชกเซ เช เชจเซเชญเชต เชนเชคเซ, เช เชจเซ เชคเซ เช เชฎเชพเชฐเซ เชชเชพเชฏเชฅเซเชจ เชธเซเชตเชพเช เชธเชพเชฅเซ เชตเชพเชฐเซเชคเชพเชฒเชพเชช เชเชฐเชคเซ เชนเชคเซ. เช เชจเซ เชคเชฎเซ เชเชพเชฃเซ เชเซ เชเซ เชนเซเช เชถเซเช เชถเซเชเซเชฏเซ? เชคเซ POCO เชฎเชพเช เชเซ! เชชเชฐเชเชคเซ เชเซเชจเชจ เชเชพเชฃเชคเซ เชจเชฅเซ เชเซ เชคเซ POCO เชฎเชพเช เชเซ เช เชจเซ เชคเซเชจเซ เชเซเชตเซ เชฐเซเชคเซ เชฌเชจเชพเชตเชตเซเช เชคเซ เชเชฌเชฐ เชจเชฅเซ; เชฐเซเชชเซเชเซเชเชฐเซเชฎเชพเช เชเช เชเซเชจเซ เชฐเซเชชเชฐเซเชเชพเชเชเชจ เชซเชพเชเชฒ เชเซ (เชฎเซเช เช เชญเซเชฒ เชตเชฟเชถเซ POCO เชจเชพ เชจเชฟเชฐเซเชฎเชพเชคเชพเชเชจเซ เชชเชนเซเชฒเซเชฅเซ เช เชฒเชเซเชฏเซเช เชเซ). เชเชจเซ เช เชฐเซเชฅ เช เชเซ เชคเชฎเชพเชฐเซ เชฌเซเชเซ เชฒเชพเชเชฌเซเชฐเซเชฐเซ เชถเซเชงเชตเซ เชชเชกเชถเซ.
เช
เชจเซ เชชเชเซ เชฎเชพเชฐเซ เชชเชธเชเชฆเชเซ เชเชเซ เชฒเซเชเชชเซเชฐเชฟเชฏ เชชเซเชธเซเชคเชเชพเชฒเชฏ เชชเชฐ เชชเชกเซ
เชเชเชณเชจเซเช เชชเชเชฒเซเช เช เชธเชฐเซเชตเชฟเชธ เชเซเชฎเซเชชเชฒเซเช เชฒเชเชตเชพเชจเซเช เชนเชคเซเช เชเซ เชตเชฟเชจเชเชคเซเช เชชเชฐ เชชเซเชฐเชเซเชฐเชฟเชฏเชพ เชเชฐเซ เชถเชเซ.
เชเชชเชฃเซ 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 เชเชฐเชตเชพ เชฎเชพเชเซ, เชเซเชฎ เชเซ เชเซเชฌเชฒ เชฌเชจเชพเชตเชตเชพ เชฎเชพเชเซ, เชคเซเชฏเชพเช เชเช เชชเชฆเซเชงเชคเชฟ เชเซ เชเชเซเชเชฟเชเซเชฏเซเชเชเชธเชเซเชฏเซเชเชฒ(). เชตเชงเซ เชเชเชฟเชฒ เชชเซเชฐเชถเซเชจเซ เช เชฅเชตเชพ เชกเซเชเชพ เชชเซเชจเชเชชเซเชฐเชพเชชเซเชคเชฟ เชฎเชพเชเซ, เชคเชฎเชพเชฐเซ เชฎเชพเชฐเชซเชคเซ เชเชจเซเชเซเชถเชจ เชฎเซเชณเชตเชตเซเช เชชเชกเชถเซ เชเชจเซเชเซเชถเชจ เชฎเซเชณเชตเซ() เช เชจเซ 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 เชฒเชเชตเชพเชจเซ เช เชเชคเชฟเชฎ เชคเชฌเชเซเชเซ เชเชตเซ เชเซ. เชธเชพเชเซเช เชเชนเซเช เชคเซ, เชเชฎเชพเช เชฎเซเชเชพเชญเชพเชเชจเซ เชธเชฎเชฏ เชฒเชพเชเซเชฏเซ, เช เชจเซ เชฎเชพเชคเซเชฐ เชเชเชฒเชพ เชฎเชพเชเซ เช เชจเชนเซเช เชเซ เชนเซเช เชจเซเชฌ เชเซเช, เชเชพเชฐเชฃ เชเซ เชฆเชฐ เชตเชเชคเซ เชชเซเชธเซเชคเชเชพเชฒเชฏเซเชจเซเช เชชเซเชจเชเชจเชฟเชฐเซเชฎเชพเชฃ เชเชฐเชตเซเช เชเชฐเซเชฐเซ เชนเชคเซเช, เชชเชฐเชเชคเซ เชเซเชจเชจเชจเซ เชฎเซเชถเซเชเซเชฒเซเชเชจเซ เชเชพเชฐเชฃเซ. เชเชฆเชพเชนเชฐเชฃ เชคเชฐเซเชเซ, เชเซเชจเชจ เชกเชพเชเชจเชฒเซเชก เชเชฐเชตเชพ, เชเชจเซเชธเซเชเซเชฒ เชเชฐเชตเชพ เช เชจเซ เชเชฐเซเชฐเซ เชจเชฟเชฐเซเชญเชฐเชคเชพ เชฌเชจเชพเชตเชตเชพ เชฎเชพเชเซ, เชคเซเชจเชพ เชฎเชพเชเซ "เชเซเชจเชจ เชเชจเซเชธเซเชเซเชฒ" เชกเชพเชเชจเชฒเซเชก เชเชฐเชตเชพ เชฎเชพเชเซ เชคเซ เชชเซเชฐเชคเซเช เชจเชฅเซ, เชคเซเชจเซ -s compiler.libcxx=libstdc++11 เชชเซเชฐเชพเชฎเซเชเชฐ เชชเชฃ เชชเชธเชพเชฐ เชเชฐเชตเชพเชจเซ เชเชฐเซเชฐ เชเซ, เช เชจเซเชฏเชฅเชพ เชคเชฎเชพเชฐเซ เช เชฐเชเซเชจเซ เชฒเชฟเชเช เชเชฐเชตเชพเชจเชพ เชคเชฌเชเซเชเซ เชคเชฎเชจเซ เชเชฃเซ เชฌเชงเซ เชญเซเชฒเซ เชฎเชณเชตเชพเชจเซเช เชเซเชเชฎ เชฐเชนเซ เชเซ. เชนเซเช เชเชฃเชพ เชเชฒเชพเชเซเชฅเซ เช เชญเซเชฒเชฅเซ เช เชเชตเชพเช เชเชฏเซ เชเซเช เช เชจเซ เชฎเชจเซ เชเชถเชพ เชเซ เชเซ เช เชฒเซเช เช เชจเซเชฏ เชฒเซเชเซเชจเซ เชเชเชพ เชธเชฎเชฏเชฎเชพเช เช เชธเชฎเชธเซเชฏเชพ เชนเชฒ เชเชฐเชตเชพเชฎเชพเช เชฎเชฆเชฆ เชเชฐเชถเซ.
เชเชเชณ, docker-compose.yml เชฒเชเซเชฏเชพ เชชเชเซ, เชฎเชพเชฐเชพ เชฎเชฟเชคเซเชฐเชจเซ เชธเชฒเชพเชน เชชเชฐ, เชฎเซเช เชเชงเชพเชฐ เชเชฎเซเชฐเซเชฏเซ
เชนเซเช เชเชถเชพ เชฐเชพเชเซเช เชเซเช เชเซ เช เชเซเชฎเซเชชเซเชฒเซเช เชจเชตเชพ เชจเชฟเชถเชพเชณเซเชฏเชพเชจเซ REST API เชเชชเซเชฒเซเชเซเชถเชจ เชฌเชจเชพเชตเชตเชพเชจเชพ เชคเซเชฎเชจเชพ เชฎเซเชถเซเชเซเชฒ เชฎเชพเชฐเซเช เชชเชฐ เชฎเชนเชพเชจ เช
เชจเซ เชถเชเซเชคเชฟเชถเชพเชณเซ, เชชเชฐเชเชคเซ C++ เชเซเชตเซ เช
เชฃเชเชก เชญเชพเชทเชพเชฎเชพเช เชฎเชฆเชฆ เชเชฐเชถเซ.
เชเชชเชฐเชพเชเชค, เชนเซเช เช
เชนเซเช เชตเชพเชเชเชตเชพเชจเซ เชเซเชฌ เชญเชฒเชพเชฎเชฃ เชเชฐเซเช เชเซเช
เชธเซเชฐเซเชธ: www.habr.com