微软开源 C++ REST SDK
微软的代号为Casablanca的C++ REST SDK已经基于Apache许可证开源。它被描述为“微软为了以原生代码支持基于云的客户端/服务器通信所做的努力,采用了现代异步C++ API设计”。该产品使用C++11实现,微软希望提供一种更简单的编写客户端HTTP代码的方法。
Casablanca支持多个平台,除了Windows 7、Windows 8之外还支持Linux。微软的开发人员Artur Laksberg提到,对WinXP和Vista的支持正在开发之中。该产品的另一个亮点是支持异步操作。微软在公布时提供了一些例子来说明Casablanca的使用,一个是通过HTTP上传文件,一个是JSON对象的创建。
Windows和Linux上的构建版本都支持以下特性:
- 能够通过HTTP客户端创建到服务器的连接,并能发送请求和处理响应。
- 支持URI的构建与使用。
- 能够构建、解析和序列化JSON值。
- 可以通过流(Stream)和流缓冲(Stream Buffer)对底层介质进行异步的数据读写。
Casablanca中有几种不同的流和流缓冲可供使用:基于内存的生产者/消费者、文件、可以配合STL容器使用的基于内存的流、裸指针流和互操作流。互操作流使得“Casablanca能够提供两组类,一组使用异步流到iostream的接口,另一组使用iostream到异步流的接口”。
Linux HTTP客户端还有些限制,因为它尚不支持HTTPS、代理和认证,但微软介绍说这些特性会包含在未来的版本中。Casablanca的源代码放在了CodePlex上,可以在线查看或通过Git获取,还可以以Zip包形式下载最新的快照版本。
C++ REST SDK 包含在 Casablanca 项目中。Casablanca 是一个 C++ 本地库,旨在帮助开发者的 C++ 应用程序访问云服务。如果你想编写一个响应式的 C++ 客户端应用程序,或者是一个可扩展的服务端解决方案,可以试试 Casablanca。除了C++ REST SDK 外,Casablanca 项目还包含 Azure SDK for C++。
C++ REST SDK 中包含了一些工具,可以帮助开发者快速编写现代、异步、可连接 REST 服务的 C++ 应用程序,遵循C++11 标准,目前支持 Windows 7、Windows 8(包括 Windows Store 和桌面应用)和 Linux。
该 SDK 的主要特性包括:
- 能够通过 HTTP Client 创建服务器连接,并发送请求、处理响应
- 支持构造和使用 URI(Uniform Resource Identifiers,统一资源标识符)
- 构造、解析和序列化 JSON 值
- 通过 Streams 和 Stream Buffers 从底层介质异步读取/写入字节
下面的示例演示了如何上传文件到 HTTP 服务器:
#include <http_client.h>
#include<filestream.h>
#include <uri.h> using namespace concurrency::streams;
using namespace web::http::client;
using namespace web::http;
int main ()
{
// Open stream to file. file_stream<unsigned char>::open_istream (L"myfile.txt") .then ([](basic_istream<unsigned char> fileStream)
{
// Make HTTP request with the file stream as the body. http_client client (L"http://www.myhttpserver.com");
client.request (methods::PUT, L"myfile", fileStream) .then ([fileStream](http_response response)
{
fileStream.close ();
// Perform actions here to inspect the HTTP response... if(response.status_code () == status_codes::OK)
{
}
});
});
return 0;
}
下面的示例演示了如何构建并遍历 JSON 值:
#include <json.h>
int main ()
{
// Create a JSON object. json::value obj;
obj[L"key1"] = json::value::boolean (false);
obj[L"key2"] = json::value::number (44);
obj[L"key3"] = json::value::number (43.6);
obj[L"key4"] = json::value::string(U("str"));
// Loop over each element in the object. for(auto iter = obj.cbegin (); iter != obj.cend (); ++iter)
{
// Make sure to get the value as const reference otherwise you will end up copying
// the whole JSON value recursively which can be expensive if it is a nested object. const json::value &str = iter->first;
const json::value &v = iter->second;
// Perform actions here to process each string and value in the JSON object... wprintf (L"String:%s", str.as_string ());
wprintf (L"Value:%s", v.to_string ());
}
return 0;
}
详细信息:The C++ REST SDK ("Casablanca")
Using the Microsoft C++ REST SDK
JSON and the Microsoft C++ REST SDK
- SQL Server 性能优化之——系统化方法提高性能
- C# 调用PowerShell方法
- 使用Visual Studio 2010 一步一步创建Powershell Module 和 Cmdlet
- [SQLServer大对象]——FileTable初体验
- JavaScript闭包,只学这篇就会了
- [数据库基础]——编码标准之格式
- [数据库基础]——编码标准之结构
- 2017前端开发手册三-前端职位描述
- [.NET自我学习]Delegate 泛型
- [数据库基础]——图解JOIN
- ubuntu搭建内网穿透服务Ngrok
- SQL Server 性能优化之——T-SQL 临时表、表变量、UNION
- node.js 学习笔记
- SQL Server 性能优化之——T-SQL TVF和标量函数
- JavaScript 教程
- JavaScript 编辑工具
- JavaScript 与HTML
- JavaScript 与Java
- JavaScript 数据结构
- JavaScript 基本数据类型
- JavaScript 特殊数据类型
- JavaScript 运算符
- JavaScript typeof 运算符
- JavaScript 表达式
- JavaScript 类型转换
- JavaScript 基本语法
- JavaScript 注释
- Javascript 基本处理流程
- Javascript 选择结构
- Javascript if 语句
- Javascript if 语句的嵌套
- Javascript switch 语句
- Javascript 循环结构
- Javascript 循环结构实例
- Javascript 跳转语句
- Javascript 控制语句总结
- Javascript 函数介绍
- Javascript 函数的定义
- Javascript 函数调用
- Javascript 几种特殊的函数
- JavaScript 内置函数简介
- Javascript eval() 函数
- Javascript isFinite() 函数
- Javascript isNaN() 函数
- parseInt() 与 parseFloat()
- escape() 与 unescape()
- Javascript 字符串介绍
- Javascript length属性
- javascript 字符串函数
- Javascript 日期对象简介
- Javascript 日期对象用途
- Date 对象属性和方法
- Javascript 数组是什么
- Javascript 创建数组
- Javascript 数组赋值与取值
- Javascript 数组属性和方法
- 基于Rust-vmm实现Kubernetes运行时
- 云开发如何为腾讯游戏年度发布会保驾护航?
- 跨端方案的三大困境
- Python 进阶(七): Word 基本操作
- Python 进阶(八):XML 基本操作
- Python 进阶(九):JSON 基本操作
- Kafka集群监控系统Kafka Eagle部署与体验
- MySQL information_schema详解 GLOBAL_VARIABLES和SESSION_VARIABLES
- 我爬取了知乎上大学相关话题中的热门高赞问答,其中是否有你大学生活的影子呢?
- MySQL information_schema详解 KEY_COLUMN_USAGE
- Python 实现黑客帝国代码雨效果
- MySQL information_schema详解 ndb_transid_mysql_connection_map
- MySQL information_schema详解 OPTIMIZER_TRACE
- 用 Python 画一个奸笑(滑稽)表情
- Python 进阶(十):网络编程