如何使用oatpp将c++代码封装成api
注:本文的c++代码是基于ortools开发的
一、运行ortools代码
1. 下载
自己的代码是在下载后的文件or-tools_MacOsX-12.0.1_v9.2.9972/examples/cpp/min_inter.cpp里编写的
2. 终端运行
cd or-tools_MacOsX-12.0.1_v9.2.9972 make run SOURCE=examples/cpp/min_inter.cpp
二、下载配置oatpp环境
git clone https://github.com/oatpp/oatpp.git
2. 编译
cd oatpp/ mkdir build && cd build cmake .. make
3. 配置
将编译好的文件夹oatpp/src下的oatpp、oatpp-test拷贝到/usr/local/include/oatpp-1.3.0/oatpp下
将编译好的文件oatpp/build/src/liboatpp.a、liboatpp-test.a拷贝到/usr/local/lib/oatpp-1.3.0下
三、编写接口
// 引入oatpp包 #include <oatpp/parser/json/mapping/ObjectMapper.hpp> #include <oatpp/web/server/HttpConnectionHandler.hpp> #include <oatpp/network/server/Server.hpp> #include <oatpp/network/server/SimpleTCPConnectionProvider.hpp> #include <oatpp/core/macro/codegen.hpp> using namespace std; #include OATPP_CODEGEN_BEGIN(DTO) // 定义返回对象 class MessageDto : public oatpp::data::mapping::type::Object { DTO_INIT(MessageDto, Object); DTO_FIELD(Int32, statusCode); }; class Handler : public oatpp::web::server::HttpRequestHandler{ private: std::shared_ptr<oatpp::data::mapping::ObjectMapper> m_objectMapper; public: Handler(const std::shared_ptr<oatpp::data::mapping::ObjectMapper> &objectMapper) : m_objectMapper(objectMapper){}; std::shared_ptr<OutgoingResponse> handle(const std::shared_ptr<IncomingRequest> &request) override { // 获取参数 auto source = request->getPathVariable("param"); // 运行ortools文件 system("cd or-tools_MacOsX-12.0.1_v9.2.9972 && make run SOURCE=examples/cpp/min_inter.cpp"); // 赋值接口返回结果 auto message = MessageDto::createShared(); message->statusCode = 200; return ResponseFactory::createResponse(Status::CODE_200, message, m_objectMapper.get()); } }; void run() { auto objectMapper = oatpp::parser::json::mapping::ObjectMapper::createShared(); auto router = oatpp::web::server::HttpRouter::createShared(); // 定义访问路径、请求方式、 router->route("GET", "/hello/{param}", std::make_shared<Handler>(objectMapper)); auto connectionHandler = oatpp::web::server::HttpConnectionHandler::createShared(router); // 绑定端口号 auto connectionProvider = oatpp::network::server::SimpleTCPConnectionProvider::createShared(10000); oatpp::network::server::Server server(connectionProvider, connectionHandler); OATPP_LOGI("MyApp", "Server running on port %s", connectionProvider->getProperty("port").getData()); server.run(); } int main() { oatpp::base::Environment::init(); run(); oatpp::base::Environment::destroy(); return 0; }
四、编译运行
g++ -o main main.cpp -I/usr/local/include/oatpp-1.3.0/oatpp -L/usr/local/lib/oatpp-1.3.0 -std=c++11 -loatpp -lpthread
./main