设计C++休息客户端
Designing a C++ rest client
我目前正在准备设计一个 C 或 C++ 库来访问现有的 Rest 服务,但这是我不确定的:
我见过的大多数像这样的 API 客户端库都只是提供了一种非常接近 ReST API 的调用风格,您必须阅读 ReST API 文档才能使用它。它们并不是真正用他们的母语风格写的,IMO。它们基本上包装了一个http库,也许是一个XML/JSON库,并处理一些特殊的东西,如身份验证:
风格 1:
paramList.add( "name", "Joe" )
response = makeARestCall( POST, "path/to/resource", paramList, miscAuthData );
if( result.code == 200 ) {
//success
xml = response.getXml();
somethingWeCareAbout = xpath.parse( xml, "response/something/we/care/about" );
print somethingWeCareAbout
} else {
print "Something went wrong"
}
对我来说,使用语言的约定而不是 API 似乎更自然。考虑将 API 用作调用函数而不是访问资源。
风格 2:
try {
Api.setName( UserId, "Joe" );
print Api.getSomethingWeCareAbout();
} catch( ApiException e ) {
print e.getMessage();
}
我用后一种风格编写了 API 库,它们需要更多的工作,但我发现它们使用和集成到应用程序中更自然,特别是对于复杂的 ReST API,但我在这方面不是很有经验。
一种风格明显比另一种更好吗?除了易于开发之外,还有什么原因吗,大多数似乎都是用第一种风格编写的?
这个库肯定会在多线程应用程序和 UI 中使用,所以请在回答时牢记线程。
在考虑了这个问题之后,对我自己的问题的部分回答是,第一种样式可能更容易多线程。使用该库的人可以创建如下函数:
void asyncRestCall( Method method, String resource, map<String,String> parameters, misc misc, function onCompletion ) {
//fork a new thread
...
//do the call
result = makeARestCall( method, resource, parameters misc );
//back in original thread
...
onCompletion( result );
}
而对样式 2 中的每个函数调用执行一次是更多的工作。
相关文章:
- "unknown ca"自生成的 CA、证书和客户端/服务器
- 如何将函数集合传递给客户端类,以便将它们当作客户端类本身的成员使用
- 使用调试/崩溃报告将应用程序部署到客户端
- 如何在本地机器上运行c++和javascript客户端代码(hackerbank风格)
- 如何通过套接字将文本文件的内容从服务器发送到客户端
- 从服务器传输到客户端的消息不会出现
- OpenSSL TLS服务器-使用客户端证书白名单
- 当服务中的事件被触发时,如何将响应从服务发送回客户端?
- 我可以与 python 服务器而不是 c++ 客户端建立 tcp/ip 套接字吗?
- 提升 Asio TCP 服务器 处理多个客户端
- boost::asio UDP 广播客户端仅接收"fast"数据包
- 如何绑定 C++ gRPC 客户端的网络接口
- C++套接字客户端到 Python 服务器未创建连接
- 用于解析 win64 堆栈跟踪的命令行客户端(可以访问符号服务器)
- 将相机数据从服务器实时流式传输到客户端
- 如何将 Firebase 与基于 Linux 的客户端应用配合使用,以便与服务器进行双向消息通信
- GRPC C++ TLS 客户端 grpc::SslCredentials() 方法不返回
- 计算出有多少客户端可以连接到我正在使用的一些tcp服务器代码
- 如何暂停插孔音频客户端
- 不将数据 socket.io c++(客户端)发送到 nodejs(服务器)socket.io