前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >微软开源 C++ REST SDK

微软开源 C++ REST SDK

作者头像
张善友
发布2018-01-30 16:19:36
2.1K0
发布2018-01-30 16:19:36
举报
文章被收录于专栏:张善友的专栏张善友的专栏

微软的代号为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 服务器:

代码语言:js
复制
#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 值:

代码语言:javascript
复制
#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")

使用微软的 C++ REST SDK

Using the Microsoft C++ REST SDK

JSON and the Microsoft C++ REST SDK

C++ REST SDK的基本用法

本文参与 腾讯云自媒体分享计划,分享自作者个人站点/博客。
原始发表:2013-02-28 ,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 作者个人站点/博客 前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体分享计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
相关产品与服务
容器服务
腾讯云容器服务(Tencent Kubernetes Engine, TKE)基于原生 kubernetes 提供以容器为核心的、高度可扩展的高性能容器管理服务,覆盖 Serverless、边缘计算、分布式云等多种业务部署场景,业内首创单个集群兼容多种计算节点的容器资源管理模式。同时产品作为云原生 Finops 领先布道者,主导开源项目Crane,全面助力客户实现资源优化、成本控制。
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档