SlideShare una empresa de Scribd logo
1 de 25
Descargar para leer sin conexión
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

Más contenido relacionado

La actualidad más candente

20180729 Preferred Networksの機械学習クラスタを支える技術
20180729 Preferred Networksの機械学習クラスタを支える技術20180729 Preferred Networksの機械学習クラスタを支える技術
20180729 Preferred Networksの機械学習クラスタを支える技術Preferred Networks
 
BuildKitによる高速でセキュアなイメージビルド
BuildKitによる高速でセキュアなイメージビルドBuildKitによる高速でセキュアなイメージビルド
BuildKitによる高速でセキュアなイメージビルドAkihiro Suda
 
Linux女子部 systemd徹底入門
Linux女子部 systemd徹底入門Linux女子部 systemd徹底入門
Linux女子部 systemd徹底入門Etsuji Nakai
 
Prometheus monitoring from outside of Kubernetes
 〜どうして我々はKubernetes上のPromet...
Prometheus monitoring from outside of Kubernetes
 〜どうして我々はKubernetes上のPromet...Prometheus monitoring from outside of Kubernetes
 〜どうして我々はKubernetes上のPromet...
Prometheus monitoring from outside of Kubernetes
 〜どうして我々はKubernetes上のPromet...whywaita
 
Dockerからcontainerdへの移行
Dockerからcontainerdへの移行Dockerからcontainerdへの移行
Dockerからcontainerdへの移行Akihiro Suda
 
コンテナの作り方「Dockerは裏方で何をしているのか?」
コンテナの作り方「Dockerは裏方で何をしているのか?」コンテナの作り方「Dockerは裏方で何をしているのか?」
コンテナの作り方「Dockerは裏方で何をしているのか?」Masahito Zembutsu
 
オブジェクト指向エクササイズのススメ
オブジェクト指向エクササイズのススメオブジェクト指向エクササイズのススメ
オブジェクト指向エクササイズのススメYoji Kanno
 
オープンソース SLAM の分類
オープンソース SLAM の分類オープンソース SLAM の分類
オープンソース SLAM の分類Yoshitaka HARA
 
C++による数値解析の並列化手法
C++による数値解析の並列化手法C++による数値解析の並列化手法
C++による数値解析の並列化手法dc1394
 
Docker道場オンライン#1 Docker基礎概念と用語の理解
Docker道場オンライン#1 Docker基礎概念と用語の理解Docker道場オンライン#1 Docker基礎概念と用語の理解
Docker道場オンライン#1 Docker基礎概念と用語の理解Masahito Zembutsu
 
[DL輪読会]YOLOv4: Optimal Speed and Accuracy of Object Detection
[DL輪読会]YOLOv4: Optimal Speed and Accuracy of Object Detection[DL輪読会]YOLOv4: Optimal Speed and Accuracy of Object Detection
[DL輪読会]YOLOv4: Optimal Speed and Accuracy of Object DetectionDeep Learning JP
 
Teslaにおけるコンピュータビジョン技術の調査
Teslaにおけるコンピュータビジョン技術の調査Teslaにおけるコンピュータビジョン技術の調査
Teslaにおけるコンピュータビジョン技術の調査Kazuyuki Miyazawa
 
You Only Look One-level Featureの解説と見せかけた物体検出のよもやま話
You Only Look One-level Featureの解説と見せかけた物体検出のよもやま話You Only Look One-level Featureの解説と見せかけた物体検出のよもやま話
You Only Look One-level Featureの解説と見せかけた物体検出のよもやま話Yusuke Uchida
 
Pythonによる黒魔術入門
Pythonによる黒魔術入門Pythonによる黒魔術入門
Pythonによる黒魔術入門大樹 小倉
 
C++20 モジュールの概要 / Introduction to C++ modules (part 1)
C++20 モジュールの概要 / Introduction to C++ modules (part 1)C++20 モジュールの概要 / Introduction to C++ modules (part 1)
C++20 モジュールの概要 / Introduction to C++ modules (part 1)TetsuroMatsumura
 
世界一わかりやすいClean Architecture
世界一わかりやすいClean Architecture世界一わかりやすいClean Architecture
世界一わかりやすいClean ArchitectureAtsushi Nakamura
 
BuildKitの概要と最近の機能
BuildKitの概要と最近の機能BuildKitの概要と最近の機能
BuildKitの概要と最近の機能Kohei Tokunaga
 
DockerとPodmanの比較
DockerとPodmanの比較DockerとPodmanの比較
DockerとPodmanの比較Akihiro Suda
 
モデルアーキテクチャ観点からの高速化2019
モデルアーキテクチャ観点からの高速化2019モデルアーキテクチャ観点からの高速化2019
モデルアーキテクチャ観点からの高速化2019Yusuke Uchida
 

La actualidad más candente (20)

20180729 Preferred Networksの機械学習クラスタを支える技術
20180729 Preferred Networksの機械学習クラスタを支える技術20180729 Preferred Networksの機械学習クラスタを支える技術
20180729 Preferred Networksの機械学習クラスタを支える技術
 
BuildKitによる高速でセキュアなイメージビルド
BuildKitによる高速でセキュアなイメージビルドBuildKitによる高速でセキュアなイメージビルド
BuildKitによる高速でセキュアなイメージビルド
 
Linux女子部 systemd徹底入門
Linux女子部 systemd徹底入門Linux女子部 systemd徹底入門
Linux女子部 systemd徹底入門
 
Prometheus monitoring from outside of Kubernetes
 〜どうして我々はKubernetes上のPromet...
Prometheus monitoring from outside of Kubernetes
 〜どうして我々はKubernetes上のPromet...Prometheus monitoring from outside of Kubernetes
 〜どうして我々はKubernetes上のPromet...
Prometheus monitoring from outside of Kubernetes
 〜どうして我々はKubernetes上のPromet...
 
Dockerからcontainerdへの移行
Dockerからcontainerdへの移行Dockerからcontainerdへの移行
Dockerからcontainerdへの移行
 
コンテナの作り方「Dockerは裏方で何をしているのか?」
コンテナの作り方「Dockerは裏方で何をしているのか?」コンテナの作り方「Dockerは裏方で何をしているのか?」
コンテナの作り方「Dockerは裏方で何をしているのか?」
 
オブジェクト指向エクササイズのススメ
オブジェクト指向エクササイズのススメオブジェクト指向エクササイズのススメ
オブジェクト指向エクササイズのススメ
 
オープンソース SLAM の分類
オープンソース SLAM の分類オープンソース SLAM の分類
オープンソース SLAM の分類
 
C++による数値解析の並列化手法
C++による数値解析の並列化手法C++による数値解析の並列化手法
C++による数値解析の並列化手法
 
Docker道場オンライン#1 Docker基礎概念と用語の理解
Docker道場オンライン#1 Docker基礎概念と用語の理解Docker道場オンライン#1 Docker基礎概念と用語の理解
Docker道場オンライン#1 Docker基礎概念と用語の理解
 
[DL輪読会]YOLOv4: Optimal Speed and Accuracy of Object Detection
[DL輪読会]YOLOv4: Optimal Speed and Accuracy of Object Detection[DL輪読会]YOLOv4: Optimal Speed and Accuracy of Object Detection
[DL輪読会]YOLOv4: Optimal Speed and Accuracy of Object Detection
 
Teslaにおけるコンピュータビジョン技術の調査
Teslaにおけるコンピュータビジョン技術の調査Teslaにおけるコンピュータビジョン技術の調査
Teslaにおけるコンピュータビジョン技術の調査
 
You Only Look One-level Featureの解説と見せかけた物体検出のよもやま話
You Only Look One-level Featureの解説と見せかけた物体検出のよもやま話You Only Look One-level Featureの解説と見せかけた物体検出のよもやま話
You Only Look One-level Featureの解説と見せかけた物体検出のよもやま話
 
Pythonによる黒魔術入門
Pythonによる黒魔術入門Pythonによる黒魔術入門
Pythonによる黒魔術入門
 
C++20 モジュールの概要 / Introduction to C++ modules (part 1)
C++20 モジュールの概要 / Introduction to C++ modules (part 1)C++20 モジュールの概要 / Introduction to C++ modules (part 1)
C++20 モジュールの概要 / Introduction to C++ modules (part 1)
 
世界一わかりやすいClean Architecture
世界一わかりやすいClean Architecture世界一わかりやすいClean Architecture
世界一わかりやすいClean Architecture
 
Docker Compose 徹底解説
Docker Compose 徹底解説Docker Compose 徹底解説
Docker Compose 徹底解説
 
BuildKitの概要と最近の機能
BuildKitの概要と最近の機能BuildKitの概要と最近の機能
BuildKitの概要と最近の機能
 
DockerとPodmanの比較
DockerとPodmanの比較DockerとPodmanの比較
DockerとPodmanの比較
 
モデルアーキテクチャ観点からの高速化2019
モデルアーキテクチャ観点からの高速化2019モデルアーキテクチャ観点からの高速化2019
モデルアーキテクチャ観点からの高速化2019
 

Destacado

Casablanca
CasablancaCasablanca
Casablancaegtra
 
ニコニコ動画コメント等データ仕様
ニコニコ動画コメント等データ仕様ニコニコ動画コメント等データ仕様
ニコニコ動画コメント等データ仕様Masahiro Hamasaki
 
TreeFrog Frameworkの紹介
TreeFrog Frameworkの紹介TreeFrog Frameworkの紹介
TreeFrog Frameworkの紹介ao27
 
ニコニコ動画のコメント解析
ニコニコ動画のコメント解析ニコニコ動画のコメント解析
ニコニコ動画のコメント解析Keisuke Ogaki
 
最近遊んだ Wii Uの 3つのソフトの感想
最近遊んだ Wii Uの 3つのソフトの感想最近遊んだ Wii Uの 3つのソフトの感想
最近遊んだ Wii Uの 3つのソフトの感想teapipin
 
プロダクトマネジメント入門
プロダクトマネジメント入門プロダクトマネジメント入門
プロダクトマネジメント入門You&I
 
HTTP/2の課題と将来
HTTP/2の課題と将来HTTP/2の課題と将来
HTTP/2の課題と将来Kazuho Oku
 
REST API のコツ
REST API のコツREST API のコツ
REST API のコツpospome
 
Reorganizing Website Architecture for HTTP/2 and Beyond
Reorganizing Website Architecture for HTTP/2 and BeyondReorganizing Website Architecture for HTTP/2 and Beyond
Reorganizing Website Architecture for HTTP/2 and BeyondKazuho Oku
 

Destacado (10)

Casablanca
CasablancaCasablanca
Casablanca
 
ニコニコ動画コメント等データ仕様
ニコニコ動画コメント等データ仕様ニコニコ動画コメント等データ仕様
ニコニコ動画コメント等データ仕様
 
TreeFrog Frameworkの紹介
TreeFrog Frameworkの紹介TreeFrog Frameworkの紹介
TreeFrog Frameworkの紹介
 
ニコニコ動画のコメント解析
ニコニコ動画のコメント解析ニコニコ動画のコメント解析
ニコニコ動画のコメント解析
 
最近遊んだ Wii Uの 3つのソフトの感想
最近遊んだ Wii Uの 3つのソフトの感想最近遊んだ Wii Uの 3つのソフトの感想
最近遊んだ Wii Uの 3つのソフトの感想
 
プロダクトマネジメント入門
プロダクトマネジメント入門プロダクトマネジメント入門
プロダクトマネジメント入門
 
HTTP/2の課題と将来
HTTP/2の課題と将来HTTP/2の課題と将来
HTTP/2の課題と将来
 
REST API のコツ
REST API のコツREST API のコツ
REST API のコツ
 
Rest ful api設計入門
Rest ful api設計入門Rest ful api設計入門
Rest ful api設計入門
 
Reorganizing Website Architecture for HTTP/2 and Beyond
Reorganizing Website Architecture for HTTP/2 and BeyondReorganizing Website Architecture for HTTP/2 and Beyond
Reorganizing Website Architecture for HTTP/2 and Beyond
 

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

.NET の過去、現在、そして未来
.NET の過去、現在、そして未来.NET の過去、現在、そして未来
.NET の過去、現在、そして未来Akira Inoue
 
Dockerで.NET Core 3.0 GUIアプリを動かす話
Dockerで.NET Core 3.0 GUIアプリを動かす話Dockerで.NET Core 3.0 GUIアプリを動かす話
Dockerで.NET Core 3.0 GUIアプリを動かす話You&I
 
Visual Studio Codeを使い倒そう! ~プログラミングから機械学習、クラウド連携、遠隔ペアプロまで~
Visual Studio Codeを使い倒そう! ~プログラミングから機械学習、クラウド連携、遠隔ペアプロまで~Visual Studio Codeを使い倒そう! ~プログラミングから機械学習、クラウド連携、遠隔ペアプロまで~
Visual Studio Codeを使い倒そう! ~プログラミングから機械学習、クラウド連携、遠隔ペアプロまで~Saki Homma
 
UnityとAmazon Web Servicesで生み出す新しい価値
UnityとAmazon Web Servicesで生み出す新しい価値UnityとAmazon Web Servicesで生み出す新しい価値
UnityとAmazon Web Servicesで生み出す新しい価値Keisuke Nishitani
 
Visual Studio 2019 GA ! ~ 最新情報 & これからの開発スタイル
Visual Studio 2019 GA ! ~ 最新情報 & これからの開発スタイルVisual Studio 2019 GA ! ~ 最新情報 & これからの開発スタイル
Visual Studio 2019 GA ! ~ 最新情報 & これからの開発スタイルAkira Inoue
 
DevOps on Azure Kubernetes
DevOps on Azure KubernetesDevOps on Azure Kubernetes
DevOps on Azure KubernetesIssei Hiraoka
 
.NET 最新ロードマップと今押さえておきたい技術要素
.NET 最新ロードマップと今押さえておきたい技術要素.NET 最新ロードマップと今押さえておきたい技術要素
.NET 最新ロードマップと今押さえておきたい技術要素Akira Inoue
 
【de:code 2020】 Build 2020 最新情報 〜 Azure & Visual Studio & .NET 〜
【de:code 2020】 Build 2020 最新情報 〜 Azure & Visual Studio & .NET 〜【de:code 2020】 Build 2020 最新情報 〜 Azure & Visual Studio & .NET 〜
【de:code 2020】 Build 2020 最新情報 〜 Azure & Visual Studio & .NET 〜日本マイクロソフト株式会社
 
Team Foundation Serivceを使ってみる
Team Foundation Serivceを使ってみるTeam Foundation Serivceを使ってみる
Team Foundation Serivceを使ってみるYou&I
 
今時のオンプレなgithubクローン環境構築
今時のオンプレなgithubクローン環境構築今時のオンプレなgithubクローン環境構築
今時のオンプレなgithubクローン環境構築You&I
 
Introduction to VSCode
Introduction to VSCodeIntroduction to VSCode
Introduction to VSCodeYuki Igarashi
 
Docker on azure!進化していくcontainerを覗いてみよう!
Docker on azure!進化していくcontainerを覗いてみよう! Docker on azure!進化していくcontainerを覗いてみよう!
Docker on azure!進化していくcontainerを覗いてみよう! Tsukasa Kato
 
MicrosoftのOSSへの取り組み
MicrosoftのOSSへの取り組みMicrosoftのOSSへの取り組み
MicrosoftのOSSへの取り組みShinichiro Arai
 
サーバーレスやマイクロサービスへの"チャレンジ"を後押ししてくれるセッションを紹介
サーバーレスやマイクロサービスへの"チャレンジ"を後押ししてくれるセッションを紹介サーバーレスやマイクロサービスへの"チャレンジ"を後押ししてくれるセッションを紹介
サーバーレスやマイクロサービスへの"チャレンジ"を後押ししてくれるセッションを紹介Yuta Matsumura
 
[Java Festa in 札幌 2012] Windows Azure を活用した Windows 8 アプリケーション開発
[Java Festa in 札幌 2012] Windows Azure を活用した Windows 8 アプリケーション開発[Java Festa in 札幌 2012] Windows Azure を活用した Windows 8 アプリケーション開発
[Java Festa in 札幌 2012] Windows Azure を活用した Windows 8 アプリケーション開発Naoki (Neo) SATO
 
.NET の今と今後に思うこと (Tokyo Ver.)
.NET の今と今後に思うこと (Tokyo Ver.).NET の今と今後に思うこと (Tokyo Ver.)
.NET の今と今後に思うこと (Tokyo Ver.)Akira Inoue
 
Azure DevOps 関西 2019 - Overview
Azure DevOps 関西 2019 - OverviewAzure DevOps 関西 2019 - Overview
Azure DevOps 関西 2019 - OverviewKeiji Kamebuchi
 

Similar a C++ REST SDKを使ってWebサービスを利用する (20)

Vscodemeetup6
Vscodemeetup6Vscodemeetup6
Vscodemeetup6
 
.NET の過去、現在、そして未来
.NET の過去、現在、そして未来.NET の過去、現在、そして未来
.NET の過去、現在、そして未来
 
Dockerで.NET Core 3.0 GUIアプリを動かす話
Dockerで.NET Core 3.0 GUIアプリを動かす話Dockerで.NET Core 3.0 GUIアプリを動かす話
Dockerで.NET Core 3.0 GUIアプリを動かす話
 
Visual Studio Codeを使い倒そう! ~プログラミングから機械学習、クラウド連携、遠隔ペアプロまで~
Visual Studio Codeを使い倒そう! ~プログラミングから機械学習、クラウド連携、遠隔ペアプロまで~Visual Studio Codeを使い倒そう! ~プログラミングから機械学習、クラウド連携、遠隔ペアプロまで~
Visual Studio Codeを使い倒そう! ~プログラミングから機械学習、クラウド連携、遠隔ペアプロまで~
 
UnityとAmazon Web Servicesで生み出す新しい価値
UnityとAmazon Web Servicesで生み出す新しい価値UnityとAmazon Web Servicesで生み出す新しい価値
UnityとAmazon Web Servicesで生み出す新しい価値
 
Visual Studio 2019 GA ! ~ 最新情報 & これからの開発スタイル
Visual Studio 2019 GA ! ~ 最新情報 & これからの開発スタイルVisual Studio 2019 GA ! ~ 最新情報 & これからの開発スタイル
Visual Studio 2019 GA ! ~ 最新情報 & これからの開発スタイル
 
DevOps on Azure Kubernetes
DevOps on Azure KubernetesDevOps on Azure Kubernetes
DevOps on Azure Kubernetes
 
.NET 最新ロードマップと今押さえておきたい技術要素
.NET 最新ロードマップと今押さえておきたい技術要素.NET 最新ロードマップと今押さえておきたい技術要素
.NET 最新ロードマップと今押さえておきたい技術要素
 
【de:code 2020】 Build 2020 最新情報 〜 Azure & Visual Studio & .NET 〜
【de:code 2020】 Build 2020 最新情報 〜 Azure & Visual Studio & .NET 〜【de:code 2020】 Build 2020 最新情報 〜 Azure & Visual Studio & .NET 〜
【de:code 2020】 Build 2020 最新情報 〜 Azure & Visual Studio & .NET 〜
 
Team Foundation Serivceを使ってみる
Team Foundation Serivceを使ってみるTeam Foundation Serivceを使ってみる
Team Foundation Serivceを使ってみる
 
Azure <3 Openness
Azure <3 OpennessAzure <3 Openness
Azure <3 Openness
 
今時のオンプレなgithubクローン環境構築
今時のオンプレなgithubクローン環境構築今時のオンプレなgithubクローン環境構築
今時のオンプレなgithubクローン環境構築
 
Azure Fundamental
Azure FundamentalAzure Fundamental
Azure Fundamental
 
Introduction to VSCode
Introduction to VSCodeIntroduction to VSCode
Introduction to VSCode
 
Docker on azure!進化していくcontainerを覗いてみよう!
Docker on azure!進化していくcontainerを覗いてみよう! Docker on azure!進化していくcontainerを覗いてみよう!
Docker on azure!進化していくcontainerを覗いてみよう!
 
MicrosoftのOSSへの取り組み
MicrosoftのOSSへの取り組みMicrosoftのOSSへの取り組み
MicrosoftのOSSへの取り組み
 
サーバーレスやマイクロサービスへの"チャレンジ"を後押ししてくれるセッションを紹介
サーバーレスやマイクロサービスへの"チャレンジ"を後押ししてくれるセッションを紹介サーバーレスやマイクロサービスへの"チャレンジ"を後押ししてくれるセッションを紹介
サーバーレスやマイクロサービスへの"チャレンジ"を後押ししてくれるセッションを紹介
 
[Java Festa in 札幌 2012] Windows Azure を活用した Windows 8 アプリケーション開発
[Java Festa in 札幌 2012] Windows Azure を活用した Windows 8 アプリケーション開発[Java Festa in 札幌 2012] Windows Azure を活用した Windows 8 アプリケーション開発
[Java Festa in 札幌 2012] Windows Azure を活用した Windows 8 アプリケーション開発
 
.NET の今と今後に思うこと (Tokyo Ver.)
.NET の今と今後に思うこと (Tokyo Ver.).NET の今と今後に思うこと (Tokyo Ver.)
.NET の今と今後に思うこと (Tokyo Ver.)
 
Azure DevOps 関西 2019 - Overview
Azure DevOps 関西 2019 - OverviewAzure DevOps 関西 2019 - Overview
Azure DevOps 関西 2019 - Overview
 

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

  • 2. ジコ、ショウカイ。 • • • • • • • H/N: SNS: 出身: 年齢: 本職: 言語: 所属: You&I(読み:ユーアンドアイ) @you_and_i 生まれも育ちも名古屋市 30代中盤 商学部出身の職業プログラマ C++, C#, VB6.0, 日本語COBOL プログラミング生放送 名古屋支部 名古屋アジャイル勉強会 わんくま同盟 名古屋勉強会 わんくま同盟 名古屋勉強会 #29 2
  • 4. C++ REST SDKを使ってWebサービスを利用する 1. はじめに わんくま同盟 名古屋勉強会 #29
  • 5. はじめに(1/7) • RESTとは – Representational State 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 を、RESTful Webサービスや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(Parallel Patterns Library)を使った実装サンプルとして、こ のC++ REST SDKはとても参考になると 言えます。 • C++使わずに素直に他の言語で実装した ら良いのでは?という突っ込みはさておき、 C++でも簡単にHTTP通信が行えるように なるこのライブラリは便利ですね。 わんくま同盟 名古屋勉強会 #29