본문 바로가기
프로그래밍/C++ rest(Casablanca)

C++] cpprestSDK 에 대한 간략한 설명.

by Hwan2 2020. 7. 2.
728x90
반응형

해당 SDK는 microsoft에서 진행하고있는 오픈소스 프로젝트 Casablanca입니다.


현재 업데이트가 뜸~ 하지만 꾸준히 진행되고 있습니다.


지금부터 특징에 대해 설명해드리겠습니다.


1. cpprestSDK의 특징

해당 라이브러리는 boost, openSSL 라이브러리를 커스터마이징해 좀 더 사용자가 사용하기 편리하게 제작했으며,
cpp의 ppl라이브러리인 task를 기반으로 만든 pplx로 이루어져 있습니다.

boost의 asio를 사용해 비동기식 입.출력을 효율적으로 가능하게 했으며 Thread pool을 사용합니다.
Thread pool은 운영체제에서 제공해주는 Thread pool을 사용하게 됩니다.(Win : IOCP, Linux : epoll, Mac : kqueue)

task 라이브러리의 특징인 .than() 키워드를 사용해 체인형식의 함수호출이 가능하다는 것 또한 포인트입니다.
따라서 Javascript의 메서드 체이닝과 비슷하게 코드를 짤 수 있으며, 이는 가독성이 올라가고, 코드가 깔끔해 짐니다.

cpprestSDK는 XML을 지원하지 않고 Json만 지원합니다. 
이는 xml보다 json이 더 간단하고 편하다는 이유와 기본 xml 라이브러리가 있다는 점에서 이를 제외시켰다고 합니다.



2. cpprestSDK의 handler

http_listener를 통해 소켓을 open()할 경우 비동기로 처리되며 수신이 완료되는 순간 연결을 끊습니다.

이때 소켓이 열리게되면 handler를 호출하게 되며 handler를 통해 적합한 작업을 수행하게 됩니다.


이런식으로 되어있으며 handler는 listener 내부의 <details::http_listener_impl> m_impl 라는 unique_ptr에 의해 실행됩니다.




3. 매크로 'U'

C++에서 윈도우의 경우에는 인코딩을 위해 UTF-16을 사용할 경우 wchar_t의 크기는 2바이트로 잡힙니다.
하지만 리눅스의 경우 wchar_t는 4바이트로 잡히게 됩니다. 이러한 경우 서로간의 컨버팅 작업을 해줘야합니다.
이때 매크로 'U'를 사용하게 되면 이러한 문제를 해결할 수 있습니다.



이 외에도 pplx에는 유용한 기능들이 많아서 굳이 restful이 아니더라도 다양하게 활용할 수 있습니다.



cpprestSDK github https://github.com/microsoft/cpprestsdk


cpprestSDK FAQ : https://github.com/microsoft/cpprestsdk/wiki/FAQ


cpprestSDK sample code : 


1. https://medium.com/audelabs/modern-c-micro-service-implementation-rest-api-b499ffeaf898


2. https://medium.com/audelabs/modern-c-micro-serivce-rest-api-part-ii-7be067440ca8


3. https://mariusbancila.ro/blog/2017/11/19/revisited-full-fledged-client-server-example-with-c-rest-sdk-2-10/


반응형

댓글


스킨편집 -> html 편집에서