如何使用oatpp将c++代码封装成api

注:本文的c++代码是基于ortools开发的

一、运行ortools代码 

1. 下载ortools

自己的代码是在下载后的文件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环境

1. 获取源码

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

  • 0
    点赞
  • 7
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值