source

JSON RESTful 서비스를 C/C++에서 구현하는 방법

manycodes 2023. 10. 23. 21:58
반응형

JSON RESTful 서비스를 C/C++에서 구현하는 방법

저는 C/C++에서 JSON Restful 웹 서비스를 하려고 합니다.저는 XML serialization/deserialization에는 적합하지만 JSON에는 적합하지 않은 Axis2/C와 Staff를 사용해 보았습니다.

허브 서터의 블로그에 소개된 카사블랑카를 보고 싶을지도 모릅니다.

c로 휴식 서비스를 만드는 것을 지원하는 라이브러리는 소수입니다. 예를 들어 restinio:

#include <restinio/all.hpp>
int main()
{
    restinio::run(
        restinio::on_this_thread()
        .port(8080)
        .address("localhost")
        .request_handler([](auto req) {
            return req->create_response().set_body("Hello, World!").done();
        }));
    return 0;
}

C/C++ Restful API를 구축하기 위해 https://github.com/babelouest/ulfius 훌륭한 라이브러리를 사용해 보십시오. 모든 플랫폼을 지원할 수 있습니다: Linux, FreeBSD, Windows 등.

당신은 ffeed-cpp를 볼 수 있습니다.json 및 restfull 웹 서비스 지원 외에도 더 많은 기능이 포함되어 있습니다.하지만 이 틀은 당신의 상황에는 너무 무거운 무게일 수도 있습니다.

저는 C++ 웹 서비스를 위해 다음 스택을 사용하고 있습니다.

귀리++ 보기

다음을 포함합니다.

  • URL 매개변수 매핑을 사용한 URL 라우팅
  • Swagger-UI 끝점 주석 지원.
  • JSON 지원을 통한 객체 매핑.

엔드포인트 예제:

ENDPOINT("GET", "users/{name}", getUserByName, PATH(String, name)) {
  auto userDto = UserDto::createShared();
  userDto->name = name;
  return createDtoResponse(Status::CODE_200, userDto);
}

컬:

$ curl http://localhost:8000/users/john
{"name":"john"}

당신은 웹씨씨를 보고 싶어할지도 모릅니다.

Boost 기반의 임베디드 목적을 위한 경량 C++ HTTP 클라이언트 및 서버 라이브러리입니다.아시오 (1.66+).

상당히 유망하고 활발하게 개발되고 있습니다.

여기에는 서버와 클라이언트를 만드는 방법을 설명하기 위한 예시가 많이 포함되어 있습니다.

AXIS2/C에서 JSON의 지원을 해결한 JIRA 프로젝트가 있습니다.
저는 제 프로젝트를 실행했고 작가(오징어 협약)와 함께 관리했지만 여전히 독자와 함께 관리하려고 노력하고 있습니다.
메모리의 스택 관리가 더 복잡해 보입니다.

JSON과 JSONPath는 새로운 코드 생성기와 새로운 JSON API를 사용하여 C와 C++ insoap 모두에서 지원되어 신속하게 시작할 수 있습니다.

여러 JSON, JSON-RPC REST 예가 포함되어 있습니다.메모리 관리는 자동으로 이루어집니다.

코드 생성기는 유용할 수 있습니다.json.org 스니펫을 예로 들어보겠습니다.

{ "menu": {
    "id": "file",
    "value": "File",
    "popup": {
      "menuitem": [
        {"value": "New", "onclick": "CreateNewDoc()"},
        {"value": "Open", "onclick": "OpenDoc()"},
        {"value": "Close", "onclick": "CloseDoc()"}
      ]
    }
  }
}

gsoap 명령어jsoncpp -M menu.jsonJSON 값을 채우기 위해 다음 코드를 생성합니다.

value x(ctx);
x["menu"]["id"] = "file";
x["menu"]["value"] = "File";
x["menu"]["popup"]["menuitem"][0]["value"] = "New";
x["menu"]["popup"]["menuitem"][0]["onclick"] = "CreateNewDoc()";
x["menu"]["popup"]["menuitem"][1]["value"] = "Open";
x["menu"]["popup"]["menuitem"][1]["onclick"] = "OpenDoc()";
x["menu"]["popup"]["menuitem"][2]["value"] = "Close";
x["menu"]["popup"]["menuitem"][2]["onclick"] = "CloseDoc()";

파싱된 JSON 값과 JSONPath 코드를 판독하는 것도 이 도구를 통해 생성할 수 있습니다.

편집

jsoncpp 명령줄 코드 생성기는 .json 파일을 템플릿으로 사용하여 JSON 데이터를 읽고 쓰기 위한 API 코드를 보여주는데, 이는 JSON 데이터를 채우고 추출하기 위한 API 코드 작성 시간을 절약하는 데 유용하다고 생각합니다.JSONPath 쿼리 코드도 이 도구로 생성할 수 있습니다.

C의 웹 서비스의 경우 ulfius, civetweb과 같은 라이브러리를 활용할 수 있습니다.

https://github.com/babelouest/ulfius

https://github.com/civetweb/civetweb/blob/master/docs/Embedding.md

C++의 웹 서비스의 경우 libhv, restbed와 같은 라이브러리를 활용할 수 있습니다.

https://github.com/ithewei/libhv

https://github.com/Corvusoft/restbed

언급URL : https://stackoverflow.com/questions/9788572/ways-to-implement-a-json-restful-service-in-c-c

반응형