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++ 웹 서비스를 위해 다음 스택을 사용하고 있습니다.
- ipkn/crow C++ 마이크로 웹 프레임워크
- json serialization/deserialization을 위한 nlohmann/json.
귀리++ 보기
다음을 포함합니다.
- 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.json
JSON 값을 채우기 위해 다음 코드를 생성합니다.
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
'source' 카테고리의 다른 글
ng-selected는 어떻게 작동합니까? (0) | 2023.10.28 |
---|---|
블록 댓글 작성에 #if 0을 사용하는 이유는 무엇입니까? (0) | 2023.10.23 |
Jquery 데이터 테이블이 삭제/재작성 (0) | 2023.10.23 |
MariaDB: Select the fields from one column in one table that are not in a subset of another column from another table (0) | 2023.10.23 |
Oracle의 동적 테이블 파티셔닝 (0) | 2023.10.23 |