25
わんくま同盟 名古屋勉強会 #29 C++ REST SDKを使ってWebサービスを利用する 2013/11/23 You&I

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

  • View
    2.210

  • Download
    9

Embed Size (px)

DESCRIPTION

わんくま同盟 名古屋勉強会 #29での発表資料 http://www.wankuma.com/seminar/20131123nagoya29/

Citation preview

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

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

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

2013/11/23

You&I

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

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

ジコ、ショウカイ。

• H/N: You&I(読み:ユーアンドアイ)

• SNS: @you_and_i

• 出身: 生まれも育ちも名古屋市

• 年齢: 30代中盤

• 本職: 商学部出身の職業プログラマ

• 言語: C++, C#, VB6.0, 日本語COBOL

• 所属: プログラミング生放送名古屋支部

名古屋アジャイル勉強会

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

2

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

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

AGENDA

1. はじめに

2. C++ REST SDKについて

3. デモ

4. まとめ

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

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

1. はじめにC++ REST SDKを使ってWebサービスを利用する

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

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

はじめに(1/7)

• RESTとは

– Representational State Transferの略称。

– 2000年にカリフォルニア大学 Irvine校のRoy Fielding氏が提唱した、分散システムにおいて複数のソフトウェアを連携させるのに適した設計原則の集合。また狭義には、それをWebに適用したソフトウェアの設計様式のこと。一般には後者の意味で用いられることがほとんどである。

IT用語辞典 e-Wordsより

http://e-words.jp/w/REST.html

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

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

はじめに(2/7)

• RESTの設計原則1. セッションなどの状態管理を行わない

• HTTP自体にはセッション管理の機構はない

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

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

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

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

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

はじめに(3/7)

• RESTful

– 先程説明した狭義のRESTとして、HTTP経由でパラメータを指定して特定のURLにアクセスすると、XML形式やJSON形式などで記述されたメッセージが送信されるシステム及びAPIを、RESTful WebサービスやRESTful APIと呼びます。

– 但し、RESTの設計4原則を必ず満たしているとか、厳密な技術的定義が有る訳ではなく、SOAP/RPCを必要としない単純なWebインターフェースの意味合いが強い。

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

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

はじめに(4/7)

• C++言語とHTTP規格 (1/4)

– ここまで説明してきたRESTは、Webアプリケーション/サービスの為の設計様式でした。

– RESTの基盤となるのはHTTP規格。大雑把に説明すると、TCP/IPをプロトコルとしてWebサーバーとWebブラウザのクライアント/サーバー方式による要求・応答のハンドシェイクを行う仕組みです。

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

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

はじめに(5/7)

• C++言語とHTTP規格 (2/4)

– C++でRESTfulなプログラムを書こうと思った場合、 C#やJava, Ruby, Pythonといった最近よく使われる開発言語とは異なり、C++だけではHTTPを扱えないとう問題があります。

– まずC++言語の規格には、HTTPはもとよりその基盤となるTCP/IPを行う為のsocket通信APIについても含まれていません。

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

わんくま同盟名古屋勉強会 #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

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

わんくま同盟名古屋勉強会 #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/

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

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

2. C++ REST SDKについてC++ REST SDKを使ってWebサービスを利用する

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

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

C++ REST SDKについて(1/7)

• C++ REST SDK

– 公式サイト

– http://casablanca.codeplex.com

– http://msdn.microsoft.com/library/jj969455.aspx

• ネイティブなC++からRESTサービスにアクセスする事が出来るライブラリ。

• 公式サイトから提供されるインストーラーを使って導入する。(Windows向け)

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

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

C++ REST SDKについて(2/7)

• C++ REST SDKは、コードネームCasablancaとして2012年4月にMicrosoftによって開発が始められたC++ライブラリ。

– http://blogs.msdn.com/b/vcblog/archive/2012/04/30/10299181.aspx

• 2013年2月末にOSS(Apache ライセンスVersion 2.0)として公開されました。

– http://blogs.msdn.com/b/vcblog/archive/2013/02/26/the-c-rest-sdk-quot-casablanca-quot.aspx

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

わんくま同盟名古屋勉強会 #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の記述を補助する。

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

わんくま同盟名古屋勉強会 #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 は未使用

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

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

C++ REST SDKについて(5/7)

• C++ REST SDKの機能

1. HTTPクライアントを通じてサーバーに接続、リクエスト送信、レスポンス処理。

2. URIの構築・使用

3. JSONの構築・解析・シリアライズ

4. ストリームやストリームバッファを媒介とした、非同期のバイトデータ処理。

5. プラットフォーム非依存の文字列

6. タスクによるプログラミング

※XMLパーサーなどは含まれない

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

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

C++ REST SDKについて(6/7)

• C++ REST SDKの実行環境

– Microsoft Windows Vista以降

– Microsoft Windows 8ストアアプリ

– Linux

– 実験的サポート

• Microsoft Windows XP

• Microsoft Windows Phone 8

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

わんくま同盟名古屋勉強会 #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が使える環境は必須。

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

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

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

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

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

3. デモ(1/2)

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

– http://msdn.microsoft.com/ja-jp/magazine/dn342869.aspx

• このサンプルは自前でOAuth処理を実装しているもので、ちょっと複雑です。今回はもっと単純にURIにアクセスして結果を取得するものでデモしたいと思います。

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

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

3. デモ(2/2)

• 今回RESTfulサービスとして、リクルートWEBサービスが提供するホットペッパーのAPIを使って懇親会会場を探してみます。

– リクルートWEBサービス > ホットペッパー

– http://webservice.recruit.co.jp/hotpepper/

• リクルートWEBサービスを利用するには最初に[新規登録]のリンクからE-Mailアドレスを入力して、APIキーを取得する必要があります。

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

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

4. まとめC++ REST SDKを使ってWebサービスを利用する

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

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

4. まとめ(1/2)

• 今回C++ REST SDKを使ってみてちょっとビックリしたのが、PPL(Parallel Patterns Library)やActor-Based Programming Modelの部分でした。

• 但しこれらは.NET Framework 4.5からサポートされたAsync/Awaitによる非同期プログラミングと似た考え方なので、文法や動作などを理解できれば、コードはスッキリしていると分かりました。

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

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

4. まとめ(2/2)

• 逆を言えば、PPL(Parallel Patterns Library)を使った実装サンプルとして、このC++ REST SDKはとても参考になると言えます。

• C++使わずに素直に他の言語で実装したら良いのでは?という突っ込みはさておき、C++でも簡単にHTTP通信が行えるようになるこのライブラリは便利ですね。