C++ REST SDKを使ってWebサービスを利用する

2013/11/23
You&I

わんくま同盟 名古屋勉強会 #29
ジコ、ショウカイ。

•
•
•
•
•
•
•

H/N:
SNS:
出身:
年齢:
本職:
言語:
所属:

You&I(読み:ユーアンドアイ)
@you_and_i
生まれも育ちも名古屋市
30代中盤
商学部出身の職業プログラマ
C++, C#, VB6.0, 日本語COBOL
プログラミング生放送 名古屋支部
名古屋アジャイル勉強会
わんくま同盟 名古屋勉強会
わんくま同盟 名古屋勉強会 #29
2
AGENDA

1.
2.
3.
4.

はじめに
C++ REST SDKについて
デモ
まとめ

わんくま同盟 名古屋勉強会 #29
C++ REST SDKを使ってWebサービスを利用する

1. はじめに

わんくま同盟 名古屋勉強会 #29
はじめに(1/7)

• RESTとは
– Representational State Transferの略称。
– 2000年にカリフォルニア大学 Irvine校のRoy
Fielding氏が提唱した、分散システムにおいて
複数のソフトウェアを連携させるのに適した
設計原則の集合。また狭義には、それをWeb
に適用したソフトウェアの設計様式のこと。
一般には後者の意味で用いられることがほと
んどである。
IT用語辞典 e-Wordsより
http://e-words.jp/w/REST.html

わんくま同盟 名古屋勉強会 #29
はじめに(2/7)

• RESTの設計原則
1. セッションなどの状態管理を行わない
• HTTP自体にはセッション管理の機構はない

2. 情報を操作する命令の体系が予め定義・共有さ
れている
• HTTPのGETやPOSTなどに相当

3. すべての情報は汎用的な構文で一意に識別され
る
• URLやURIに相当

4. 情報の内部に、別の情報や(その情報の別の)状
態へのリンクを含めることができる
• HTMLやXMLに相当

わんくま同盟 名古屋勉強会 #29
はじめに(3/7)

• RESTful
– 先程説明した狭義のRESTとして、HTTP経由
でパラメータを指定して特定のURLにアクセ
スすると、XML形式やJSON形式などで記述さ
れたメッセージが送信されるシステム及びAPI
を、RESTful WebサービスやRESTful APIと呼
びます。
– 但し、RESTの設計4原則を必ず満たしている
とか、厳密な技術的定義が有る訳ではなく、
SOAP/RPCを必要としない単純なWebイン
ターフェースの意味合いが強い。
わんくま同盟 名古屋勉強会 #29
はじめに(4/7)

• C++言語とHTTP規格 (1/4)
– ここまで説明してきたRESTは、Webアプリ
ケーション/サービスの為の設計様式でした。
– RESTの基盤となるのはHTTP規格。大雑把に
説明すると、TCP/IPをプロトコルとしてWeb
サーバーとWebブラウザのクライアント/サー
バー方式による要求・応答のハンドシェイク
を行う仕組みです。

わんくま同盟 名古屋勉強会 #29
はじめに(5/7)

• C++言語とHTTP規格 (2/4)
– C++でRESTfulなプログラムを書こうと思っ
た場合、 C#やJava, Ruby, Pythonといった最
近よく使われる開発言語とは異なり、C++だ
けではHTTPを扱えないとう問題があります。
– まずC++言語の規格には、HTTPはもとよりそ
の基盤となるTCP/IPを行う為のsocket通信
APIについても含まれていません。

わんくま同盟 名古屋勉強会 #29
はじめに(6/7)

• C++言語とHTTP規格 (3/4)
– C++でTCP/IPを話せるようにするには、プ
ラットフォーム毎に提供されているソケット
通信APIを使ってHTTP通信処理を実装する必
要があります。
• Linux, FreeBSD環境
– BSD Socket API

• Windows環境
– WinSock API, WinHTTP API, WinINet API

• Mac OS X環境
– Cocoa API, Core Foundation API

わんくま同盟 名古屋勉強会 #29
はじめに(7/7)

• C++言語とHTTP規格 (4/4)
– API毎に実装方法が異なるのと、毎度毎度
HTTPを一部又はフルスタックで実装して車輪
の再発明するのは、不具合も起こりやすく無
駄な事なので、通常は共通ライブラリを使う
事になります。
• Boost. Asio - socket通信実装
– http://www.boost.org/doc/libs/release/doc/html/boos
t_asio.html

• cpp-netlib - HTTP実装
– http://cpp-netlib.org/

わんくま同盟 名古屋勉強会 #29
C++ REST SDKを使ってWebサービスを利用する

2. C++ REST SDKについて

わんくま同盟 名古屋勉強会 #29
C++ REST SDKについて(1/7)

• C++ REST SDK
– 公式サイト
– http://casablanca.codeplex.com
– http://msdn.microsoft.com/library/jj969455.
aspx

• ネイティブなC++からRESTサービスにア
クセスする事が出来るライブラリ。
• 公式サイトから提供されるインストーラー
を使って導入する。(Windows向け)
わんくま同盟 名古屋勉強会 #29
C++ REST SDKについて(2/7)

• C++ REST SDKは、コードネーム
Casablancaとして2012年4月にMicrosoft
によって開発が始められたC++ライブラリ。
– http://blogs.msdn.com/b/vcblog/archive/20
12/04/30/10299181.aspx

• 2013年2月末にOSS(Apache ライセンス
Version 2.0)として公開されました。
– http://blogs.msdn.com/b/vcblog/archive/20
13/02/26/the-c-rest-sdk-quot-casablancaquot.aspx
わんくま同盟 名古屋勉強会 #29
C++ REST SDKについて(3/7)

• C++ REST SDKで提供されるもの(1/2)
1. HTTP, JSON, URIのC++実装による
Windows Vista, 7, 8環境でのRESTサービス
への接続。
2. WindowsストアアプリでのC++によるHTTP
クライアント側コード記述を補助する
VisualStudio向けSDK。
3. VisualStudioでの統合環境を含めたAzure向
けのネイティブなRESTの記述を補助する。

わんくま同盟 名古屋勉強会 #29
C++ REST SDKについて(4/7)

• C++ REST SDKで提供されるもの(2/2)
4. PaaS機能の入り口として、Azure
blob/queue ストレージに接続する使いやす
いライブラリ。
5. C++11を基盤とした非同期操作を構成する
パワフル且つ統一されたモデル。
• Parallel Patterns Library を利用

6. Erlangにインスパイアされたアクターモデル
プログラミングのC++実装。
• Asynchronous Agents Library は未使用
わんくま同盟 名古屋勉強会 #29
C++ REST SDKについて(5/7)

• C++ REST SDKの機能
1. HTTPクライアントを通じてサーバーに接続、
リクエスト送信、レスポンス処理。
2. URIの構築・使用
3. JSONの構築・解析・シリアライズ
4. ストリームやストリームバッファを媒介とし
た、非同期のバイトデータ処理。
5. プラットフォーム非依存の文字列
6. タスクによるプログラミング
※XMLパーサーなどは含まれない
わんくま同盟 名古屋勉強会 #29
C++ REST SDKについて(6/7)

• C++ REST SDKの実行環境
–
–
–
–

Microsoft Windows Vista以降
Microsoft Windows 8ストアアプリ
Linux
実験的サポート
• Microsoft Windows XP
• Microsoft Windows Phone 8

わんくま同盟 名古屋勉強会 #29
C++ REST SDKについて(7/7)

• C++ REST SDKの開発環境
– Microsoft VisualStudio 2010 SP1以降
• VS2010 SP1以降が必要な理由は、C++ REST SDK
がPPL(Parallel Patterns Library)を使っている為。

– Microsoft VisualStudio 2012
– Microsoft VisualStudio 2013
– Linux環境の場合はBoost C++ Libraryも必要。
C++11の型推論のautoが使える環境は必須。

わんくま同盟 名古屋勉強会 #29
C++ REST SDKを使ってWebサービスを利用する

3. デモ

わんくま同盟 名古屋勉強会 #29
3. デモ(1/2)

• MSDNマガジン August 2013で紹介されて
いるC++ REST SDKの記事では、OAuth
を使ったサンプルコードになっています。
– C++ の開発者に RESTful サービスを
– http://msdn.microsoft.com/jajp/magazine/dn342869.aspx

• このサンプルは自前でOAuth処理を実装し
ているもので、ちょっと複雑です。今回は
もっと単純にURIにアクセスして結果を取
得するものでデモしたいと思います。
わんくま同盟 名古屋勉強会 #29
3. デモ(2/2)

• 今回RESTfulサービスとして、リクルート
WEBサービスが提供するホットペッパー
のAPIを使って懇親会会場を探してみます。
– リクルートWEBサービス > ホットペッパー
– http://webservice.recruit.co.jp/hotpepper/

• リクルートWEBサービスを利用するには
最初に[新規登録]のリンクからE-Mailアド
レスを入力して、APIキーを取得する必要
があります。
わんくま同盟 名古屋勉強会 #29
C++ REST SDKを使ってWebサービスを利用する

4. まとめ

わんくま同盟 名古屋勉強会 #29
4. まとめ(1/2)

• 今回C++ REST SDKを使ってみてちょっ
とビックリしたのが、PPL(Parallel
Patterns Library)やActor-Based
Programming Modelの部分でした。
• 但しこれらは.NET Framework 4.5からサ
ポートされたAsync/Awaitによる非同期プ
ログラミングと似た考え方なので、文法や
動作などを理解できれば、コードはスッキ
リしていると分かりました。
わんくま同盟 名古屋勉強会 #29
4. まとめ(2/2)

• 逆を言えば、PPL(Parallel Patterns
Library)を使った実装サンプルとして、こ
のC++ REST SDKはとても参考になると
言えます。
• C++使わずに素直に他の言語で実装した
ら良いのでは?という突っ込みはさておき、
C++でも簡単にHTTP通信が行えるように
なるこのライブラリは便利ですね。

わんくま同盟 名古屋勉強会 #29

C++ REST SDKを使ってWebサービスを利用する

  • 1.
  • 2.
  • 3.
  • 4.
    C++ REST SDKを使ってWebサービスを利用する 1.はじめに わんくま同盟 名古屋勉強会 #29
  • 5.
    はじめに(1/7) • RESTとは – RepresentationalState Transferの略称。 – 2000年にカリフォルニア大学 Irvine校のRoy Fielding氏が提唱した、分散システムにおいて 複数のソフトウェアを連携させるのに適した 設計原則の集合。また狭義には、それをWeb に適用したソフトウェアの設計様式のこと。 一般には後者の意味で用いられることがほと んどである。 IT用語辞典 e-Wordsより http://e-words.jp/w/REST.html わんくま同盟 名古屋勉強会 #29
  • 6.
    はじめに(2/7) • RESTの設計原則 1. セッションなどの状態管理を行わない •HTTP自体にはセッション管理の機構はない 2. 情報を操作する命令の体系が予め定義・共有さ れている • HTTPのGETやPOSTなどに相当 3. すべての情報は汎用的な構文で一意に識別され る • URLやURIに相当 4. 情報の内部に、別の情報や(その情報の別の)状 態へのリンクを含めることができる • HTMLやXMLに相当 わんくま同盟 名古屋勉強会 #29
  • 7.
    はじめに(3/7) • RESTful – 先程説明した狭義のRESTとして、HTTP経由 でパラメータを指定して特定のURLにアクセ スすると、XML形式やJSON形式などで記述さ れたメッセージが送信されるシステム及びAPI を、RESTfulWebサービスやRESTful APIと呼 びます。 – 但し、RESTの設計4原則を必ず満たしている とか、厳密な技術的定義が有る訳ではなく、 SOAP/RPCを必要としない単純なWebイン ターフェースの意味合いが強い。 わんくま同盟 名古屋勉強会 #29
  • 8.
    はじめに(4/7) • C++言語とHTTP規格 (1/4) –ここまで説明してきたRESTは、Webアプリ ケーション/サービスの為の設計様式でした。 – RESTの基盤となるのはHTTP規格。大雑把に 説明すると、TCP/IPをプロトコルとしてWeb サーバーとWebブラウザのクライアント/サー バー方式による要求・応答のハンドシェイク を行う仕組みです。 わんくま同盟 名古屋勉強会 #29
  • 9.
    はじめに(5/7) • C++言語とHTTP規格 (2/4) –C++でRESTfulなプログラムを書こうと思っ た場合、 C#やJava, Ruby, Pythonといった最 近よく使われる開発言語とは異なり、C++だ けではHTTPを扱えないとう問題があります。 – まずC++言語の規格には、HTTPはもとよりそ の基盤となるTCP/IPを行う為のsocket通信 APIについても含まれていません。 わんくま同盟 名古屋勉強会 #29
  • 10.
    はじめに(6/7) • C++言語とHTTP規格 (3/4) –C++でTCP/IPを話せるようにするには、プ ラットフォーム毎に提供されているソケット 通信APIを使ってHTTP通信処理を実装する必 要があります。 • Linux, FreeBSD環境 – BSD Socket API • Windows環境 – WinSock API, WinHTTP API, WinINet API • Mac OS X環境 – Cocoa API, Core Foundation API わんくま同盟 名古屋勉強会 #29
  • 11.
    はじめに(7/7) • C++言語とHTTP規格 (4/4) –API毎に実装方法が異なるのと、毎度毎度 HTTPを一部又はフルスタックで実装して車輪 の再発明するのは、不具合も起こりやすく無 駄な事なので、通常は共通ライブラリを使う 事になります。 • Boost. Asio - socket通信実装 – http://www.boost.org/doc/libs/release/doc/html/boos t_asio.html • cpp-netlib - HTTP実装 – http://cpp-netlib.org/ わんくま同盟 名古屋勉強会 #29
  • 12.
    C++ REST SDKを使ってWebサービスを利用する 2.C++ REST SDKについて わんくま同盟 名古屋勉強会 #29
  • 13.
    C++ REST SDKについて(1/7) •C++ REST SDK – 公式サイト – http://casablanca.codeplex.com – http://msdn.microsoft.com/library/jj969455. aspx • ネイティブなC++からRESTサービスにア クセスする事が出来るライブラリ。 • 公式サイトから提供されるインストーラー を使って導入する。(Windows向け) わんくま同盟 名古屋勉強会 #29
  • 14.
    C++ REST SDKについて(2/7) •C++ REST SDKは、コードネーム Casablancaとして2012年4月にMicrosoft によって開発が始められたC++ライブラリ。 – http://blogs.msdn.com/b/vcblog/archive/20 12/04/30/10299181.aspx • 2013年2月末にOSS(Apache ライセンス Version 2.0)として公開されました。 – http://blogs.msdn.com/b/vcblog/archive/20 13/02/26/the-c-rest-sdk-quot-casablancaquot.aspx わんくま同盟 名古屋勉強会 #29
  • 15.
    C++ REST SDKについて(3/7) •C++ REST SDKで提供されるもの(1/2) 1. HTTP, JSON, URIのC++実装による Windows Vista, 7, 8環境でのRESTサービス への接続。 2. WindowsストアアプリでのC++によるHTTP クライアント側コード記述を補助する VisualStudio向けSDK。 3. VisualStudioでの統合環境を含めたAzure向 けのネイティブなRESTの記述を補助する。 わんくま同盟 名古屋勉強会 #29
  • 16.
    C++ REST SDKについて(4/7) •C++ REST SDKで提供されるもの(2/2) 4. PaaS機能の入り口として、Azure blob/queue ストレージに接続する使いやす いライブラリ。 5. C++11を基盤とした非同期操作を構成する パワフル且つ統一されたモデル。 • Parallel Patterns Library を利用 6. Erlangにインスパイアされたアクターモデル プログラミングのC++実装。 • Asynchronous Agents Library は未使用 わんくま同盟 名古屋勉強会 #29
  • 17.
    C++ REST SDKについて(5/7) •C++ REST SDKの機能 1. HTTPクライアントを通じてサーバーに接続、 リクエスト送信、レスポンス処理。 2. URIの構築・使用 3. JSONの構築・解析・シリアライズ 4. ストリームやストリームバッファを媒介とし た、非同期のバイトデータ処理。 5. プラットフォーム非依存の文字列 6. タスクによるプログラミング ※XMLパーサーなどは含まれない わんくま同盟 名古屋勉強会 #29
  • 18.
    C++ REST SDKについて(6/7) •C++ REST SDKの実行環境 – – – – Microsoft Windows Vista以降 Microsoft Windows 8ストアアプリ Linux 実験的サポート • Microsoft Windows XP • Microsoft Windows Phone 8 わんくま同盟 名古屋勉強会 #29
  • 19.
    C++ REST SDKについて(7/7) •C++ REST SDKの開発環境 – Microsoft VisualStudio 2010 SP1以降 • VS2010 SP1以降が必要な理由は、C++ REST SDK がPPL(Parallel Patterns Library)を使っている為。 – Microsoft VisualStudio 2012 – Microsoft VisualStudio 2013 – Linux環境の場合はBoost C++ Libraryも必要。 C++11の型推論のautoが使える環境は必須。 わんくま同盟 名古屋勉強会 #29
  • 20.
    C++ REST SDKを使ってWebサービスを利用する 3.デモ わんくま同盟 名古屋勉強会 #29
  • 21.
    3. デモ(1/2) • MSDNマガジンAugust 2013で紹介されて いるC++ REST SDKの記事では、OAuth を使ったサンプルコードになっています。 – C++ の開発者に RESTful サービスを – http://msdn.microsoft.com/jajp/magazine/dn342869.aspx • このサンプルは自前でOAuth処理を実装し ているもので、ちょっと複雑です。今回は もっと単純にURIにアクセスして結果を取 得するものでデモしたいと思います。 わんくま同盟 名古屋勉強会 #29
  • 22.
    3. デモ(2/2) • 今回RESTfulサービスとして、リクルート WEBサービスが提供するホットペッパー のAPIを使って懇親会会場を探してみます。 –リクルートWEBサービス > ホットペッパー – http://webservice.recruit.co.jp/hotpepper/ • リクルートWEBサービスを利用するには 最初に[新規登録]のリンクからE-Mailアド レスを入力して、APIキーを取得する必要 があります。 わんくま同盟 名古屋勉強会 #29
  • 23.
    C++ REST SDKを使ってWebサービスを利用する 4.まとめ わんくま同盟 名古屋勉強会 #29
  • 24.
    4. まとめ(1/2) • 今回C++REST SDKを使ってみてちょっ とビックリしたのが、PPL(Parallel Patterns Library)やActor-Based Programming Modelの部分でした。 • 但しこれらは.NET Framework 4.5からサ ポートされたAsync/Awaitによる非同期プ ログラミングと似た考え方なので、文法や 動作などを理解できれば、コードはスッキ リしていると分かりました。 わんくま同盟 名古屋勉強会 #29
  • 25.
    4. まとめ(2/2) • 逆を言えば、PPL(ParallelPatterns Library)を使った実装サンプルとして、こ のC++ REST SDKはとても参考になると 言えます。 • C++使わずに素直に他の言語で実装した ら良いのでは?という突っ込みはさておき、 C++でも簡単にHTTP通信が行えるように なるこのライブラリは便利ですね。 わんくま同盟 名古屋勉強会 #29