SlideShare a Scribd company logo
わんくま同盟 東京勉強会 #52
Wankuma Developer Deep Dive
RESTFul Webサービス
猪股 健太郎
@matarillo
わんくま同盟 東京勉強会 #52
Wankuma Developer Deep Dive
アジェンダ
• RESTの説明
– RESTとは
– RESTの原則
– RESTful WebサービスとHTTP
• .NETでの実装
– WCF
– WCF REST Starter Kit
– RestCake
– ASP.NET MVC
– OpenRasta
わんくま同盟 東京勉強会 #52
Wankuma Developer Deep Dive
質問1
• この本のどちらかを持ってる人
わんくま同盟 東京勉強会 #52
Wankuma Developer Deep Dive
質問2
• 以下のどれかを受講した人
Tech・Ed Japan 2009
T2-310 「WCF で実現する SOA、REST」
(MS 松崎さん)
Tech・Ed Japan 2010
T6-312 「WCF 4 における新機能のポイント」
(アークウェイ 奥田さん・飯田さん)
Tech・Ed Japan 2010
T4-303 「Open Data Protocol (Odata) と
WCF Data Services によるサービスの作成」
(MS 井上さん)
わんくま同盟 東京勉強会 #52
Wankuma Developer Deep Dive
第1部 RESTの説明
わんくま同盟 東京勉強会 #52
Wankuma Developer Deep Dive
REST
• 2000年
• ロイ・フィールディングの博士論文
– なぜWebはこんなに普及したのか?
– なぜWebは大規模でもうまく動くのか?
– Webの設計原則とは?
それを“REST”と呼ぶことにする。
わんくま同盟 東京勉強会 #52
Wankuma Developer Deep Dive
REST ○×
• 設計原則
• アーキテクチャ
スタイル
• 通信プロトコルでは
ない
• 仕様ではない
• 標準ではない
わんくま同盟 東京勉強会 #52
Wankuma Developer Deep Dive
言葉の定義:Webサービス
• 広い意味でのWebサービス
– Webで提供されるサービス
• 検索エンジン、Webメール、顧客管理SaaS
• 中ぐらいの意味でのWebサービス
– プログラムが呼び出すWeb API
• Twitter API、Amazon Web サービス、Bing API
• 狭い意味でのWebサービス
– SOAPおよびWS-*を使ったインターフェース
わんくま同盟 東京勉強会 #52
Wankuma Developer Deep Dive
言葉の定義:Webサービス
• 広い意味でのWebサービス
– Webで提供されるサービス
• 検索エンジン、Webメール、顧客管理SaaS
• 中ぐらいの意味でのWebサービス
– プログラムが呼び出すWeb API
• Twitter API、Amazon Web サービス、Bing API
• 狭い意味でのWebサービス
– SOAPおよびWS-*を使ったインターフェース
今日はこの意味です。
わんくま同盟 東京勉強会 #52
Wankuma Developer Deep Dive
今日の言葉の定義
• RESTful Webサービスとは
REST アーキテクチャスタイルを
採用しているWebサービスのこと。
– 「RESTっぽいWebサービス」
– 「REST」という言葉の使われ方は
「オブジェクト指向」という言葉の
使われ方にも似ている。
– RESTを構成する原則は複数ある。
わんくま同盟 東京勉強会 #52
Wankuma Developer Deep Dive
RESTの原則
• RESTアーキテクチャスタイルの原則を
大きく2つに分類する
– 分散システムとしての構造の原則
• クライアント・サーバー型の発展形
– 分散システムが扱う情報の原則
• リソース
• HATEOAS
わんくま同盟 東京勉強会 #52
Wankuma Developer Deep Dive
RESTの原則(構造編)
• クライアント・サーバー
クライアント サーバー
わんくま同盟 東京勉強会 #52
Wankuma Developer Deep Dive
RESTの原則(構造編)
• クライアント・サーバー&ステートレス
クライアント ステートレスサーバー
わんくま同盟 東京勉強会 #52
Wankuma Developer Deep Dive
RESTの原則(構造編)
• クライアント・サーバー&ステートレス
&キャッシュ
クライアント ステートレスサーバー
わんくま同盟 東京勉強会 #52
Wankuma Developer Deep Dive
RESTの原則(構造編)
• クライアント・サーバー&ステートレス
&キャッシュ&統一インターフェース
クライアント ステートレスサーバー
わんくま同盟 東京勉強会 #52
Wankuma Developer Deep Dive
RESTの原則(構造編)
• クライアント・サーバー&ステートレス
&キャッシュ&統一インターフェース
&階層化システム
クライアント ステートレスサーバー
わんくま同盟 東京勉強会 #52
Wankuma Developer Deep Dive
RESTの原則(構造編)
• クライアント・サーバー&ステートレス
&キャッシュ&統一インターフェース
&階層化システム
&コード・オン・デマンド(任意)
クライアント ステートレスサーバー
わんくま同盟 東京勉強会 #52
Wankuma Developer Deep Dive
RESTの原則(情報編)
• リソースとは?
– 名前がつけられる情報すべて
– 名前がつけられる=他と区別できる
– 抽象的
わんくま同盟 東京勉強会 #52
Wankuma Developer Deep Dive
RESTの原則(情報編)
• リソース
「東京の今日の天気」
「わんくま同盟のメンバリスト」
「藍澤光の壁紙(WP7用)」
わんくま同盟 東京勉強会 #52
Wankuma Developer Deep Dive
RESTの原則(情報編)
• リソース&アドレス
「東京の今日の天気」
http://weather.yahoo.co.jp/weather/jp/13/4410.html
「わんくま同盟のメンバリスト」
http://www.wankuma.com/member/
「藍澤光の壁紙(WP7用)」
http://www.microsoft.com/taiwan/silverlight/images/480X800_f.jpg
わんくま同盟 東京勉強会 #52
Wankuma Developer Deep Dive
RESTの原則(情報編)
• リソース&アドレス&表現
「東京の今日の天気」
http://weather.yahoo.co.jp/weather/jp/13/4410.html
html
「わんくま同盟のメンバリスト」
http://www.wankuma.com/member/
html
「藍澤光の壁紙(WP7用)」
http://www.microsoft.com/taiwan/silverlight/images/480X800_f.jpg
jpeg
わんくま同盟 東京勉強会 #52
Wankuma Developer Deep Dive
RESTの原則(情報編)
• リソース&アドレス&表現&メタデータ
「東京の今日の天気」
http://weather.yahoo.co.jp/weather/jp/13/4410.html
html
ピンポイント天気へのリンクなど
「わんくま同盟のメンバリスト」
http://www.wankuma.com/member/
html
「藍澤光の壁紙(WP7用)」
http://www.microsoft.com/taiwan/silverlight/images/480X800_f.jpg
jpeg
最終更新日時:10/08/2010 18:31:46
わんくま同盟 東京勉強会 #52
Wankuma Developer Deep Dive
RESTの原則(情報編)
• HATEOAS
– Hypermedia as the Engine of Application State
– アプリケーションの状態を表現する
機構としてハイパーメディアを使う
– アプリケーションの状態遷移に
ハイパーリンクを活用する
• 商品一覧のXMLに「次の100件」へのリンクをいれ
ておく
わんくま同盟 東京勉強会 #52
Wankuma Developer Deep Dive
ここまでのまとめ
• RESTはWebの設計原則を分析したもの
• RESTはアーキテクチャスタイル
• 大きく2つに分類できる
– 分散システムとしての構造の原則
• クライアント・サーバー型の発展形
– 分散システムが扱う情報の原則
• リソース
• HATEOAS
わんくま同盟 東京勉強会 #52
Wankuma Developer Deep Dive
RESTという単語
• Representational State Transfer
– リソースの現在の状態を
– 表現したものを
– 転送する
「Webで使われるプロトコルは
HTTP (HyperText Transfer Protocol)
だけど、これって
ハイパーテキスト以外にも
便利に使えるよね?」
わんくま同盟 東京勉強会 #52
Wankuma Developer Deep Dive
RESTとHTTP
抽象概念 具体的な例
REST Web
リソース
ハイパー
メディア
アドレス URI
統一
インターフェース
HTTP
わんくま同盟 東京勉強会 #52
Wankuma Developer Deep Dive
RESTful Webサービス
抽象概念 具体的な例
REST Webサービス
リソース (リソース)
アドレス URI
統一
インターフェース
HTTP
わんくま同盟 東京勉強会 #52
Wankuma Developer Deep Dive
統一インターフェースとしてのHTTP
• HTTPとは
– リソースのアドレスをURLで
– リソースのメタデータをHTTPヘッダで
– リソースの表現をHTTPボディで
– リソースに対する操作をHTTPメソッドで
• 表すプロトコル
わんくま同盟 東京勉強会 #52
Wankuma Developer Deep Dive
HTTPの4大メソッド
• GET
– リソースの表現を取得する
• POST
– 既存のリソースに関連する何かを追加する
– 既存のリソースにデータを渡して何かをする
• DELETE
– 既存のリソースを削除する
• PUT
– URLを指定して新しいリソースを作成する
– 既存のリソースを変更する
わんくま同盟 東京勉強会 #52
Wankuma Developer Deep Dive
HTTPのベストプラクティス
• GET/DELETE/PUTを「べき等」にする
• 可能な限り標準のメソッドを使う
• POSTメソッドを濫用しない
– HTTPボディにリソースのアドレスを含めない
– HTTPボディにリソースの操作を含めない
わんくま同盟 東京勉強会 #52
Wankuma Developer Deep Dive
RESTではないもの
• RPCスタイルのアーキテクチャ
– HTTPボディにリソースのアドレスを含める
– HTTPボディにリソースの操作を含める
– 結果的に、POSTばかりを使う
<?xml version="1.0"?>
<methodCall>
<methodName>examples.getStateName</methodName>
<params>
<param>
<value><i4>40</i4></value>
</param>
</params>
</methodCall>
わんくま同盟 東京勉強会 #52
Wankuma Developer Deep Dive
RPCスタイルは「間違っている」か?
• そうとは言えない
• RPCスタイルのほうが向いている
処理もある
• ただ、RESTの方が
Webの利点を享受できる
– 普及性やスケーラビリティ
わんくま同盟 東京勉強会 #52
Wankuma Developer Deep Dive
RESTful Webサービスの設計
1. サービスが扱うデータ集合を特定する
2. データ集合をリソースに分ける
3. リソースにURIをつける
4. リソースに対する操作を決める
5. 送受信する表現を決める
6. リソース間のリンクを設計する
7. リソースの状態遷移を検討する
8. エラーを検討する
わんくま同盟 東京勉強会 #52
Wankuma Developer Deep Dive
RESTful Webサービスのベストプラクティス
• コレクションリソース
– http://edtter.com/chack/status
• GET……リソース一覧の取得 (R)
• POST……新規リソースの追加 (C)
– 作成されたリソースのURIをレスポンスに含める
• 個別リソース
– http://edtter.com/chack/status/123456
• GET……個別リソースの取得 (R)
• PUT……個別リソースの更新 (U)
• DELETE……個別リソースの削除 (D)
わんくま同盟 東京勉強会 #52
Wankuma Developer Deep Dive
RESTful Webサービスのベストプラクティス
• Atom出版プロトコル (AtomPub)
– IETFが標準化 → RFC 5023
– Web リソースを出版・編集する
• コレクション: 全体的に、あるいは部分的に検索さ
れ得るリソースの集合
• サービス: コレクションの発見と記述
• 編集: リソースの生成、編集、削除
– リソース一覧のページングにも対応
わんくま同盟 東京勉強会 #52
Wankuma Developer Deep Dive
第2部 .NETでの実装
わんくま同盟 東京勉強会 #52
Wankuma Developer Deep Dive
WCF REST
• .NET Framweork 3.5以降
• WebServiceHostFactoryクラス
• WCFの面倒なconfigが不要
• クライアントの「サービス参照」不可
<%@ ServiceHost Language="C#" Debug="true"
Service="WcfRestService1.Service1"
CodeBehind="Service1.svc.cs"
Factory="System.ServiceModel.Activation.WebServiceHostFactory" %>
Service1.svc
わんくま同盟 東京勉強会 #52
Wankuma Developer Deep Dive
WCF REST
• HTTP GETは[WebGet]カスタム属性、
それ以外は[WebInvoke]カスタム属性
• リクエストやレスポンスは
POX / JSON / バイトストリームの三択
• HttpContextの代わりに
WebOperationContext
– “201 Created”と“404 Not Found”には
ショートカットあり
わんくま同盟 東京勉強会 #52
Wankuma Developer Deep Dive
WCF REST
• Visual Studio ギャラリーから
テンプレートを
ダウンロード可能
(VS2010用)
わんくま同盟 東京勉強会 #52
Wankuma Developer Deep Dive
WCF RESTのgood/bad
• いい点
– わりと自由にできる
• つらい点
– カスタムシリアライズ
– HATEOAS
– URLに「○○.svc」が含まれる
• .NET4からはルーティングと統合できる
– クライアントの実装
– 実はWCF
わんくま同盟 東京勉強会 #52
Wankuma Developer Deep Dive
WCF REST Starter Kit
• WCF REST Starter Kit
– http://aspnet.codeplex.com/wikipage?title=WCF
%20REST
– Preview 2 (2009/3/10) はVS2008 SP1用
– サーバ側
• POX、単一要素、コレクション、
Atom Feed、AtomPub
– クライアント側
• HttpClient
わんくま同盟 東京勉強会 #52
Wankuma Developer Deep Dive
WCF REST Starter Kitのgood/bad
• いい点
– 型にはまった実装は楽
• CRUDとHTTPメソッドのマッピングとか
• POX/JSON対応サービスとか
• ヘルプページとか
• 例外処理とか
– HttpClientが手軽
– OSS
• つらい点
– 自由がきかない
– VS2010未サポート (Preview2)
わんくま同盟 東京勉強会 #52
Wankuma Developer Deep Dive
RestCake
• RestCake
– http://rest.codeplex.com/
– http://restcake.net/Overview.aspx
• いい点
– WCFじゃない
– でも似たような感じで作れる
– 罠が少ない
• JSONとか、匿名型とか、循環参照とか……
– OSS
• つらい点
– 自己責任
わんくま同盟 東京勉強会 #52
Wankuma Developer Deep Dive
ASP.NET MVC
• ASP.NET MVCをWebサービスに使う
– Viewが「リソースの表現」になるだけ。
• いい点
– リソース表現が自由
– WCFじゃない
– OSS
– 赤シャツ印
• つらい点
– GET/POST/PUT/DELETE/HEADだけ対応
– 細かい道具がそろってない
わんくま同盟 東京勉強会 #52
Wankuma Developer Deep Dive
OpenRasta
• OpenRasta
– http://openrasta.com/
– RESTful Webアプリケーション/Webサービス
– http://live.visitmix.com/MIX10/Sessions/EX19
• いい点
– ASP.NET MVCに近い形で、より強力にRESTをサポート
– .NET Framework 2.0以降で動作
– リソース表現が自由
– 属性いらない
• つらい点
– ???
REST Architecture Solution Targeting Asp.net
わんくま同盟 東京勉強会 #52
Wankuma Developer Deep Dive
質疑応答タイム
わんくま同盟 東京勉強会 #52
Wankuma Developer Deep Dive
補足:トランザクションの実現
• http://developer.cybozu.co.jp/kazuho/2010/04/rest-
re-web-a6d.html
– トランザクションの開始は POST を使ったトランザク
ションリソースの生成
– トランザクション開始後は POST ではなく PUT を使い、
クライアントがリクエスト ID を指定することで、
ネットワーク障害への耐性を確保
– トランザクションのコミットも再送可能じゃないと
困るので PUT
– コミットの返り値を確認してからトランザクション
リソースを DELETE
わんくま同盟 東京勉強会 #52
Wankuma Developer Deep Dive
参考情報
• REST in Windows Communication Foundation
(WCF)
– http://msdn.microsoft.com/wcf/rest
• A Guide to Designing and Building RESTful
Web Services with WCF 3.5
– http://msdn.microsoft.com/en-
us/library/dd203052.aspx
Ad

More Related Content

What's hot (17)

PHP 開発環境構築 - Windows 編 -
PHP 開発環境構築- Windows 編 -PHP 開発環境構築- Windows 編 -
PHP 開発環境構築 - Windows 編 -
Masaki Takeda
 
Data API + AWS = (CMS どうでしょう 札幌編)
Data API + AWS =  (CMS どうでしょう 札幌編)Data API + AWS =  (CMS どうでしょう 札幌編)
Data API + AWS = (CMS どうでしょう 札幌編)
Yuji Takayama
 
Web API(Dynamics 365 )勉強会
Web API(Dynamics 365 )勉強会Web API(Dynamics 365 )勉強会
Web API(Dynamics 365 )勉強会
Kazuya Sugimoto
 
初めての Data API CMS どうでしょう - 仙台編 -
初めての Data API   CMS どうでしょう - 仙台編 -初めての Data API   CMS どうでしょう - 仙台編 -
初めての Data API CMS どうでしょう - 仙台編 -
Yuji Takayama
 
RoRとAWSで100,000Req/Minを処理する
RoRとAWSで100,000Req/Minを処理するRoRとAWSで100,000Req/Minを処理する
RoRとAWSで100,000Req/Minを処理する
aktsk
 
SharePoint 2010 を使ったクラウドアプリ開発
SharePoint 2010 を使ったクラウドアプリ開発SharePoint 2010 を使ったクラウドアプリ開発
SharePoint 2010 を使ったクラウドアプリ開発
Tusyoshi Matsuzaki
 
[BA06] 50 分で総まとめ! Office 365 開発プラットフォーム最新機能のおさらい
[BA06] 50 分で総まとめ! Office 365 開発プラットフォーム最新機能のおさらい[BA06] 50 分で総まとめ! Office 365 開発プラットフォーム最新機能のおさらい
[BA06] 50 分で総まとめ! Office 365 開発プラットフォーム最新機能のおさらい
de:code 2017
 
Latest Status of Identity Federation
Latest Status of Identity FederationLatest Status of Identity Federation
Latest Status of Identity Federation
Atsushi Kambara
 
Spring12新機能webinar
Spring12新機能webinarSpring12新機能webinar
Spring12新機能webinar
Salesforce Developers Japan
 
Graph api introduction_20130425
Graph api introduction_20130425Graph api introduction_20130425
Graph api introduction_20130425
Naohiro Fujie
 
120331 silverlight5新機能早めぐり
120331 silverlight5新機能早めぐり120331 silverlight5新機能早めぐり
120331 silverlight5新機能早めぐり
Takayoshi Tanaka
 
Api gatewayの話
Api gatewayの話Api gatewayの話
Api gatewayの話
Hiroshi Hayakawa
 
Web API を気軽に使える ツールやサービスのご紹介
Web API を気軽に使えるツールやサービスのご紹介Web API を気軽に使えるツールやサービスのご紹介
Web API を気軽に使える ツールやサービスのご紹介
CData Software Japan
 
Prd004 office 365_における_id_統合と
Prd004 office 365_における_id_統合とPrd004 office 365_における_id_統合と
Prd004 office 365_における_id_統合と
Tech Summit 2016
 
社内システムの構造と設計、実装のはなし(下書きバージョン)
社内システムの構造と設計、実装のはなし(下書きバージョン)社内システムの構造と設計、実装のはなし(下書きバージョン)
社内システムの構造と設計、実装のはなし(下書きバージョン)
SATOSHI TAGOMORI
 
PHP 開発環境構築 - Windows 編 -
PHP 開発環境構築- Windows 編 -PHP 開発環境構築- Windows 編 -
PHP 開発環境構築 - Windows 編 -
Masaki Takeda
 
Data API + AWS = (CMS どうでしょう 札幌編)
Data API + AWS =  (CMS どうでしょう 札幌編)Data API + AWS =  (CMS どうでしょう 札幌編)
Data API + AWS = (CMS どうでしょう 札幌編)
Yuji Takayama
 
Web API(Dynamics 365 )勉強会
Web API(Dynamics 365 )勉強会Web API(Dynamics 365 )勉強会
Web API(Dynamics 365 )勉強会
Kazuya Sugimoto
 
初めての Data API CMS どうでしょう - 仙台編 -
初めての Data API   CMS どうでしょう - 仙台編 -初めての Data API   CMS どうでしょう - 仙台編 -
初めての Data API CMS どうでしょう - 仙台編 -
Yuji Takayama
 
RoRとAWSで100,000Req/Minを処理する
RoRとAWSで100,000Req/Minを処理するRoRとAWSで100,000Req/Minを処理する
RoRとAWSで100,000Req/Minを処理する
aktsk
 
SharePoint 2010 を使ったクラウドアプリ開発
SharePoint 2010 を使ったクラウドアプリ開発SharePoint 2010 を使ったクラウドアプリ開発
SharePoint 2010 を使ったクラウドアプリ開発
Tusyoshi Matsuzaki
 
[BA06] 50 分で総まとめ! Office 365 開発プラットフォーム最新機能のおさらい
[BA06] 50 分で総まとめ! Office 365 開発プラットフォーム最新機能のおさらい[BA06] 50 分で総まとめ! Office 365 開発プラットフォーム最新機能のおさらい
[BA06] 50 分で総まとめ! Office 365 開発プラットフォーム最新機能のおさらい
de:code 2017
 
Latest Status of Identity Federation
Latest Status of Identity FederationLatest Status of Identity Federation
Latest Status of Identity Federation
Atsushi Kambara
 
Graph api introduction_20130425
Graph api introduction_20130425Graph api introduction_20130425
Graph api introduction_20130425
Naohiro Fujie
 
120331 silverlight5新機能早めぐり
120331 silverlight5新機能早めぐり120331 silverlight5新機能早めぐり
120331 silverlight5新機能早めぐり
Takayoshi Tanaka
 
Web API を気軽に使える ツールやサービスのご紹介
Web API を気軽に使えるツールやサービスのご紹介Web API を気軽に使えるツールやサービスのご紹介
Web API を気軽に使える ツールやサービスのご紹介
CData Software Japan
 
Prd004 office 365_における_id_統合と
Prd004 office 365_における_id_統合とPrd004 office 365_における_id_統合と
Prd004 office 365_における_id_統合と
Tech Summit 2016
 
社内システムの構造と設計、実装のはなし(下書きバージョン)
社内システムの構造と設計、実装のはなし(下書きバージョン)社内システムの構造と設計、実装のはなし(下書きバージョン)
社内システムの構造と設計、実装のはなし(下書きバージョン)
SATOSHI TAGOMORI
 

Viewers also liked (15)

Lightning Connect で 外部データにリアルタイムにアクセス
Lightning Connect で外部データにリアルタイムにアクセスLightning Connect で外部データにリアルタイムにアクセス
Lightning Connect で 外部データにリアルタイムにアクセス
Salesforce Developers Japan
 
アクセスプラン(実行計画)の読み方入門
アクセスプラン(実行計画)の読み方入門アクセスプラン(実行計画)の読み方入門
アクセスプラン(実行計画)の読み方入門
Akira Shimosako
 
5分で分かる自己組織化マップ
5分で分かる自己組織化マップ5分で分かる自己組織化マップ
5分で分かる自己組織化マップ
Daisuke Takai
 
続Pythonによるwebスクレイピング入門
続Pythonによるwebスクレイピング入門続Pythonによるwebスクレイピング入門
続Pythonによるwebスクレイピング入門
Hironori Sekine
 
Development and Experiment of Deep Learning with Caffe and maf
Development and Experiment of Deep Learning with Caffe and mafDevelopment and Experiment of Deep Learning with Caffe and maf
Development and Experiment of Deep Learning with Caffe and maf
Kenta Oono
 
Salesforce連携のためのOData入門
Salesforce連携のためのOData入門Salesforce連携のためのOData入門
Salesforce連携のためのOData入門
Shunji Konishi
 
JDBCでつながるSaasの世界
JDBCでつながるSaasの世界JDBCでつながるSaasの世界
JDBCでつながるSaasの世界
CData Software Japan
 
ODBC/JDBC/ADOで(も)つながる Saasの世界
ODBC/JDBC/ADOで(も)つながるSaasの世界ODBC/JDBC/ADOで(も)つながるSaasの世界
ODBC/JDBC/ADOで(も)つながる Saasの世界
CData Software Japan
 
ODBC/JDBC/ADOでつながる kintoneの世界
ODBC/JDBC/ADOでつながるkintoneの世界ODBC/JDBC/ADOでつながるkintoneの世界
ODBC/JDBC/ADOでつながる kintoneの世界
CData Software Japan
 
ADO.NETでつながるクラウドデータ連携
ADO.NETでつながるクラウドデータ連携ADO.NETでつながるクラウドデータ連携
ADO.NETでつながるクラウドデータ連携
CData Software Japan
 
クラウド時代のデータ連携 ~ そして少し SharePoint 連携事例 ~
クラウド時代のデータ連携 ~ そして少し SharePoint 連携事例 ~クラウド時代のデータ連携 ~ そして少し SharePoint 連携事例 ~
クラウド時代のデータ連携 ~ そして少し SharePoint 連携事例 ~
CData Software Japan
 
API活用で更に広がるDynamicsエコシステム
API活用で更に広がるDynamicsエコシステムAPI活用で更に広がるDynamicsエコシステム
API活用で更に広がるDynamicsエコシステム
CData Software Japan
 
Proyecto de vida de sebastian
Proyecto de vida de sebastianProyecto de vida de sebastian
Proyecto de vida de sebastian
Sebastian Mendoza
 
RESTful Web アプリの設計レビューの話
RESTful Web アプリの設計レビューの話RESTful Web アプリの設計レビューの話
RESTful Web アプリの設計レビューの話
Takuto Wada
 
20170317 クラウド時代のデータ連携 超高速開発コミュニティ
20170317 クラウド時代のデータ連携 超高速開発コミュニティ20170317 クラウド時代のデータ連携 超高速開発コミュニティ
20170317 クラウド時代のデータ連携 超高速開発コミュニティ
CData Software Japan
 
Lightning Connect で 外部データにリアルタイムにアクセス
Lightning Connect で外部データにリアルタイムにアクセスLightning Connect で外部データにリアルタイムにアクセス
Lightning Connect で 外部データにリアルタイムにアクセス
Salesforce Developers Japan
 
アクセスプラン(実行計画)の読み方入門
アクセスプラン(実行計画)の読み方入門アクセスプラン(実行計画)の読み方入門
アクセスプラン(実行計画)の読み方入門
Akira Shimosako
 
5分で分かる自己組織化マップ
5分で分かる自己組織化マップ5分で分かる自己組織化マップ
5分で分かる自己組織化マップ
Daisuke Takai
 
続Pythonによるwebスクレイピング入門
続Pythonによるwebスクレイピング入門続Pythonによるwebスクレイピング入門
続Pythonによるwebスクレイピング入門
Hironori Sekine
 
Development and Experiment of Deep Learning with Caffe and maf
Development and Experiment of Deep Learning with Caffe and mafDevelopment and Experiment of Deep Learning with Caffe and maf
Development and Experiment of Deep Learning with Caffe and maf
Kenta Oono
 
Salesforce連携のためのOData入門
Salesforce連携のためのOData入門Salesforce連携のためのOData入門
Salesforce連携のためのOData入門
Shunji Konishi
 
ODBC/JDBC/ADOで(も)つながる Saasの世界
ODBC/JDBC/ADOで(も)つながるSaasの世界ODBC/JDBC/ADOで(も)つながるSaasの世界
ODBC/JDBC/ADOで(も)つながる Saasの世界
CData Software Japan
 
ODBC/JDBC/ADOでつながる kintoneの世界
ODBC/JDBC/ADOでつながるkintoneの世界ODBC/JDBC/ADOでつながるkintoneの世界
ODBC/JDBC/ADOでつながる kintoneの世界
CData Software Japan
 
ADO.NETでつながるクラウドデータ連携
ADO.NETでつながるクラウドデータ連携ADO.NETでつながるクラウドデータ連携
ADO.NETでつながるクラウドデータ連携
CData Software Japan
 
クラウド時代のデータ連携 ~ そして少し SharePoint 連携事例 ~
クラウド時代のデータ連携 ~ そして少し SharePoint 連携事例 ~クラウド時代のデータ連携 ~ そして少し SharePoint 連携事例 ~
クラウド時代のデータ連携 ~ そして少し SharePoint 連携事例 ~
CData Software Japan
 
API活用で更に広がるDynamicsエコシステム
API活用で更に広がるDynamicsエコシステムAPI活用で更に広がるDynamicsエコシステム
API活用で更に広がるDynamicsエコシステム
CData Software Japan
 
Proyecto de vida de sebastian
Proyecto de vida de sebastianProyecto de vida de sebastian
Proyecto de vida de sebastian
Sebastian Mendoza
 
RESTful Web アプリの設計レビューの話
RESTful Web アプリの設計レビューの話RESTful Web アプリの設計レビューの話
RESTful Web アプリの設計レビューの話
Takuto Wada
 
20170317 クラウド時代のデータ連携 超高速開発コミュニティ
20170317 クラウド時代のデータ連携 超高速開発コミュニティ20170317 クラウド時代のデータ連携 超高速開発コミュニティ
20170317 クラウド時代のデータ連携 超高速開発コミュニティ
CData Software Japan
 
Ad

Similar to RESTful Webサービス (20)

Play jjug2012spring
Play jjug2012springPlay jjug2012spring
Play jjug2012spring
Takafumi Ikeda
 
ネットワークプログラマビリティ勉強会 これまでのおさらい
ネットワークプログラマビリティ勉強会 これまでのおさらいネットワークプログラマビリティ勉強会 これまでのおさらい
ネットワークプログラマビリティ勉強会 これまでのおさらい
npsg
 
20201127 .NET 5
20201127 .NET 520201127 .NET 5
20201127 .NET 5
Takayoshi Tanaka
 
いよいよ始められる Java EEでのWebSocket #jjug #jjug_ccc #ccc_r21
いよいよ始められる Java EEでのWebSocket #jjug #jjug_ccc #ccc_r21いよいよ始められる Java EEでのWebSocket #jjug #jjug_ccc #ccc_r21
いよいよ始められる Java EEでのWebSocket #jjug #jjug_ccc #ccc_r21
Takakiyo Tanaka
 
Start SQL Server with Docker
Start SQL Server with DockerStart SQL Server with Docker
Start SQL Server with Docker
Oshitari_kochi
 
JavaScript And Keywords
JavaScript And KeywordsJavaScript And Keywords
JavaScript And Keywords
uupaa
 
Webフレームワークを作ってる話 #osakapy
Webフレームワークを作ってる話 #osakapyWebフレームワークを作ってる話 #osakapy
Webフレームワークを作ってる話 #osakapy
Masashi Shibata
 
Spring Boot の Web アプリケーションを Docker に載せて AWS ECS で動かしている話
Spring Boot の Web アプリケーションを Docker に載せて AWS ECS で動かしている話Spring Boot の Web アプリケーションを Docker に載せて AWS ECS で動かしている話
Spring Boot の Web アプリケーションを Docker に載せて AWS ECS で動かしている話
JustSystems Corporation
 
Open Shift v3 主要機能と内部構造のご紹介
Open Shift v3 主要機能と内部構造のご紹介Open Shift v3 主要機能と内部構造のご紹介
Open Shift v3 主要機能と内部構造のご紹介
Etsuji Nakai
 
Firefox OS and Web server
Firefox OS and Web serverFirefox OS and Web server
Firefox OS and Web server
Tomoaki Konno
 
Angularreflex20141210
Angularreflex20141210Angularreflex20141210
Angularreflex20141210
Shinichiro Takezaki
 
Isomorphic web development with scala and scala.js
Isomorphic web development  with scala and scala.jsIsomorphic web development  with scala and scala.js
Isomorphic web development with scala and scala.js
TanUkkii
 
.NET vNext
.NET vNext.NET vNext
.NET vNext
信之 岩永
 
OpenStackで始めるクラウド環境構築入門
OpenStackで始めるクラウド環境構築入門OpenStackで始めるクラウド環境構築入門
OpenStackで始めるクラウド環境構築入門
VirtualTech Japan Inc.
 
Rdbms起点で考えると見えない世界 okuyama勉強会
Rdbms起点で考えると見えない世界 okuyama勉強会Rdbms起点で考えると見えない世界 okuyama勉強会
Rdbms起点で考えると見えない世界 okuyama勉強会
Masakazu Muraoka
 
VSCodeで始めるAzure Static Web Apps開発
VSCodeで始めるAzure Static Web Apps開発VSCodeで始めるAzure Static Web Apps開発
VSCodeで始めるAzure Static Web Apps開発
Yuta Matsumura
 
Webrtc最新動向
Webrtc最新動向Webrtc最新動向
Webrtc最新動向
Yusuke Naka
 
[db tech showcase Tokyo 2015] C15:DevOps MySQL in カカクコム~ OSSによる可用性担保とリアルタイムパフ...
[db tech showcase Tokyo 2015] C15:DevOps MySQL in カカクコム~ OSSによる可用性担保とリアルタイムパフ...[db tech showcase Tokyo 2015] C15:DevOps MySQL in カカクコム~ OSSによる可用性担保とリアルタイムパフ...
[db tech showcase Tokyo 2015] C15:DevOps MySQL in カカクコム~ OSSによる可用性担保とリアルタイムパフ...
Insight Technology, Inc.
 
HTML5など社内勉強会 Vol.8 - WebSocket
HTML5など社内勉強会 Vol.8 - WebSocketHTML5など社内勉強会 Vol.8 - WebSocket
HTML5など社内勉強会 Vol.8 - WebSocket
George Harada
 
ネットワークプログラマビリティ勉強会 これまでのおさらい
ネットワークプログラマビリティ勉強会 これまでのおさらいネットワークプログラマビリティ勉強会 これまでのおさらい
ネットワークプログラマビリティ勉強会 これまでのおさらい
npsg
 
いよいよ始められる Java EEでのWebSocket #jjug #jjug_ccc #ccc_r21
いよいよ始められる Java EEでのWebSocket #jjug #jjug_ccc #ccc_r21いよいよ始められる Java EEでのWebSocket #jjug #jjug_ccc #ccc_r21
いよいよ始められる Java EEでのWebSocket #jjug #jjug_ccc #ccc_r21
Takakiyo Tanaka
 
Start SQL Server with Docker
Start SQL Server with DockerStart SQL Server with Docker
Start SQL Server with Docker
Oshitari_kochi
 
JavaScript And Keywords
JavaScript And KeywordsJavaScript And Keywords
JavaScript And Keywords
uupaa
 
Webフレームワークを作ってる話 #osakapy
Webフレームワークを作ってる話 #osakapyWebフレームワークを作ってる話 #osakapy
Webフレームワークを作ってる話 #osakapy
Masashi Shibata
 
Spring Boot の Web アプリケーションを Docker に載せて AWS ECS で動かしている話
Spring Boot の Web アプリケーションを Docker に載せて AWS ECS で動かしている話Spring Boot の Web アプリケーションを Docker に載せて AWS ECS で動かしている話
Spring Boot の Web アプリケーションを Docker に載せて AWS ECS で動かしている話
JustSystems Corporation
 
Open Shift v3 主要機能と内部構造のご紹介
Open Shift v3 主要機能と内部構造のご紹介Open Shift v3 主要機能と内部構造のご紹介
Open Shift v3 主要機能と内部構造のご紹介
Etsuji Nakai
 
Firefox OS and Web server
Firefox OS and Web serverFirefox OS and Web server
Firefox OS and Web server
Tomoaki Konno
 
Isomorphic web development with scala and scala.js
Isomorphic web development  with scala and scala.jsIsomorphic web development  with scala and scala.js
Isomorphic web development with scala and scala.js
TanUkkii
 
OpenStackで始めるクラウド環境構築入門
OpenStackで始めるクラウド環境構築入門OpenStackで始めるクラウド環境構築入門
OpenStackで始めるクラウド環境構築入門
VirtualTech Japan Inc.
 
Rdbms起点で考えると見えない世界 okuyama勉強会
Rdbms起点で考えると見えない世界 okuyama勉強会Rdbms起点で考えると見えない世界 okuyama勉強会
Rdbms起点で考えると見えない世界 okuyama勉強会
Masakazu Muraoka
 
VSCodeで始めるAzure Static Web Apps開発
VSCodeで始めるAzure Static Web Apps開発VSCodeで始めるAzure Static Web Apps開発
VSCodeで始めるAzure Static Web Apps開発
Yuta Matsumura
 
Webrtc最新動向
Webrtc最新動向Webrtc最新動向
Webrtc最新動向
Yusuke Naka
 
[db tech showcase Tokyo 2015] C15:DevOps MySQL in カカクコム~ OSSによる可用性担保とリアルタイムパフ...
[db tech showcase Tokyo 2015] C15:DevOps MySQL in カカクコム~ OSSによる可用性担保とリアルタイムパフ...[db tech showcase Tokyo 2015] C15:DevOps MySQL in カカクコム~ OSSによる可用性担保とリアルタイムパフ...
[db tech showcase Tokyo 2015] C15:DevOps MySQL in カカクコム~ OSSによる可用性担保とリアルタイムパフ...
Insight Technology, Inc.
 
HTML5など社内勉強会 Vol.8 - WebSocket
HTML5など社内勉強会 Vol.8 - WebSocketHTML5など社内勉強会 Vol.8 - WebSocket
HTML5など社内勉強会 Vol.8 - WebSocket
George Harada
 
Ad

More from Kentaro Inomata (20)

『アプリケーション アーキテクチャ ガイド2.0』のガイド
『アプリケーション アーキテクチャ ガイド2.0』のガイド『アプリケーション アーキテクチャ ガイド2.0』のガイド
『アプリケーション アーキテクチャ ガイド2.0』のガイド
Kentaro Inomata
 
Bash on ubuntu on windows
Bash on ubuntu on windowsBash on ubuntu on windows
Bash on ubuntu on windows
Kentaro Inomata
 
Agile Software Development (In Japan)
Agile Software Development (In Japan)Agile Software Development (In Japan)
Agile Software Development (In Japan)
Kentaro Inomata
 
Extreme Programming
Extreme ProgrammingExtreme Programming
Extreme Programming
Kentaro Inomata
 
富山合同勉強会2015 ジェネリクス談義 C#編 補足
富山合同勉強会2015 ジェネリクス談義 C#編 補足富山合同勉強会2015 ジェネリクス談義 C#編 補足
富山合同勉強会2015 ジェネリクス談義 C#編 補足
Kentaro Inomata
 
富山合同勉強会2015 ジェネリクス談義 C#編
富山合同勉強会2015 ジェネリクス談義 C#編富山合同勉強会2015 ジェネリクス談義 C#編
富山合同勉強会2015 ジェネリクス談義 C#編
Kentaro Inomata
 
UIデザインパターンをSilverlightでやってみた part1
UIデザインパターンをSilverlightでやってみた part1UIデザインパターンをSilverlightでやってみた part1
UIデザインパターンをSilverlightでやってみた part1
Kentaro Inomata
 
.NETの業務向けOSSフレームワーク鼎談
.NETの業務向けOSSフレームワーク鼎談.NETの業務向けOSSフレームワーク鼎談
.NETの業務向けOSSフレームワーク鼎談
Kentaro Inomata
 
Azureといえば
AzureといえばAzureといえば
Azureといえば
Kentaro Inomata
 
ASP.NET MVCとEntity Frameworkで作ってみた
ASP.NET MVCとEntity Frameworkで作ってみたASP.NET MVCとEntity Frameworkで作ってみた
ASP.NET MVCとEntity Frameworkで作ってみた
Kentaro Inomata
 
MacintoshでSilverlight開発
MacintoshでSilverlight開発MacintoshでSilverlight開発
MacintoshでSilverlight開発
Kentaro Inomata
 
仮面ライダー勉強会LT06 響鬼についていろいろと
仮面ライダー勉強会LT06 響鬼についていろいろと仮面ライダー勉強会LT06 響鬼についていろいろと
仮面ライダー勉強会LT06 響鬼についていろいろと
Kentaro Inomata
 
18-D-5 MVP & .NET Community Members Lightning Talks
18-D-5 MVP & .NET Community Members Lightning Talks18-D-5 MVP & .NET Community Members Lightning Talks
18-D-5 MVP & .NET Community Members Lightning Talks
Kentaro Inomata
 
パズルをコンピュータに解かせる
パズルをコンピュータに解かせるパズルをコンピュータに解かせる
パズルをコンピュータに解かせる
Kentaro Inomata
 
GUIのアーキテクチャ
GUIのアーキテクチャGUIのアーキテクチャ
GUIのアーキテクチャ
Kentaro Inomata
 
Silverlightと業務アプリ
Silverlightと業務アプリSilverlightと業務アプリ
Silverlightと業務アプリ
Kentaro Inomata
 
コミュニティの壁を越える
コミュニティの壁を越えるコミュニティの壁を越える
コミュニティの壁を越える
Kentaro Inomata
 
業務システムを使いやすく! .NET Webアプリケーションの現在
業務システムを使いやすく!.NET Webアプリケーションの現在業務システムを使いやすく!.NET Webアプリケーションの現在
業務システムを使いやすく! .NET Webアプリケーションの現在
Kentaro Inomata
 
解題:私がJavaからCsharpに乗り換えた10の理由
解題:私がJavaからCsharpに乗り換えた10の理由解題:私がJavaからCsharpに乗り換えた10の理由
解題:私がJavaからCsharpに乗り換えた10の理由
Kentaro Inomata
 
『アプリケーション アーキテクチャ ガイド2.0』のガイド
『アプリケーション アーキテクチャ ガイド2.0』のガイド『アプリケーション アーキテクチャ ガイド2.0』のガイド
『アプリケーション アーキテクチャ ガイド2.0』のガイド
Kentaro Inomata
 
Bash on ubuntu on windows
Bash on ubuntu on windowsBash on ubuntu on windows
Bash on ubuntu on windows
Kentaro Inomata
 
Agile Software Development (In Japan)
Agile Software Development (In Japan)Agile Software Development (In Japan)
Agile Software Development (In Japan)
Kentaro Inomata
 
富山合同勉強会2015 ジェネリクス談義 C#編 補足
富山合同勉強会2015 ジェネリクス談義 C#編 補足富山合同勉強会2015 ジェネリクス談義 C#編 補足
富山合同勉強会2015 ジェネリクス談義 C#編 補足
Kentaro Inomata
 
富山合同勉強会2015 ジェネリクス談義 C#編
富山合同勉強会2015 ジェネリクス談義 C#編富山合同勉強会2015 ジェネリクス談義 C#編
富山合同勉強会2015 ジェネリクス談義 C#編
Kentaro Inomata
 
UIデザインパターンをSilverlightでやってみた part1
UIデザインパターンをSilverlightでやってみた part1UIデザインパターンをSilverlightでやってみた part1
UIデザインパターンをSilverlightでやってみた part1
Kentaro Inomata
 
.NETの業務向けOSSフレームワーク鼎談
.NETの業務向けOSSフレームワーク鼎談.NETの業務向けOSSフレームワーク鼎談
.NETの業務向けOSSフレームワーク鼎談
Kentaro Inomata
 
ASP.NET MVCとEntity Frameworkで作ってみた
ASP.NET MVCとEntity Frameworkで作ってみたASP.NET MVCとEntity Frameworkで作ってみた
ASP.NET MVCとEntity Frameworkで作ってみた
Kentaro Inomata
 
MacintoshでSilverlight開発
MacintoshでSilverlight開発MacintoshでSilverlight開発
MacintoshでSilverlight開発
Kentaro Inomata
 
仮面ライダー勉強会LT06 響鬼についていろいろと
仮面ライダー勉強会LT06 響鬼についていろいろと仮面ライダー勉強会LT06 響鬼についていろいろと
仮面ライダー勉強会LT06 響鬼についていろいろと
Kentaro Inomata
 
18-D-5 MVP & .NET Community Members Lightning Talks
18-D-5 MVP & .NET Community Members Lightning Talks18-D-5 MVP & .NET Community Members Lightning Talks
18-D-5 MVP & .NET Community Members Lightning Talks
Kentaro Inomata
 
パズルをコンピュータに解かせる
パズルをコンピュータに解かせるパズルをコンピュータに解かせる
パズルをコンピュータに解かせる
Kentaro Inomata
 
GUIのアーキテクチャ
GUIのアーキテクチャGUIのアーキテクチャ
GUIのアーキテクチャ
Kentaro Inomata
 
Silverlightと業務アプリ
Silverlightと業務アプリSilverlightと業務アプリ
Silverlightと業務アプリ
Kentaro Inomata
 
コミュニティの壁を越える
コミュニティの壁を越えるコミュニティの壁を越える
コミュニティの壁を越える
Kentaro Inomata
 
業務システムを使いやすく! .NET Webアプリケーションの現在
業務システムを使いやすく!.NET Webアプリケーションの現在業務システムを使いやすく!.NET Webアプリケーションの現在
業務システムを使いやすく! .NET Webアプリケーションの現在
Kentaro Inomata
 
解題:私がJavaからCsharpに乗り換えた10の理由
解題:私がJavaからCsharpに乗り換えた10の理由解題:私がJavaからCsharpに乗り換えた10の理由
解題:私がJavaからCsharpに乗り換えた10の理由
Kentaro Inomata
 

RESTful Webサービス

  • 1. わんくま同盟 東京勉強会 #52 Wankuma Developer Deep Dive RESTFul Webサービス 猪股 健太郎 @matarillo
  • 2. わんくま同盟 東京勉強会 #52 Wankuma Developer Deep Dive アジェンダ • RESTの説明 – RESTとは – RESTの原則 – RESTful WebサービスとHTTP • .NETでの実装 – WCF – WCF REST Starter Kit – RestCake – ASP.NET MVC – OpenRasta
  • 3. わんくま同盟 東京勉強会 #52 Wankuma Developer Deep Dive 質問1 • この本のどちらかを持ってる人
  • 4. わんくま同盟 東京勉強会 #52 Wankuma Developer Deep Dive 質問2 • 以下のどれかを受講した人 Tech・Ed Japan 2009 T2-310 「WCF で実現する SOA、REST」 (MS 松崎さん) Tech・Ed Japan 2010 T6-312 「WCF 4 における新機能のポイント」 (アークウェイ 奥田さん・飯田さん) Tech・Ed Japan 2010 T4-303 「Open Data Protocol (Odata) と WCF Data Services によるサービスの作成」 (MS 井上さん)
  • 5. わんくま同盟 東京勉強会 #52 Wankuma Developer Deep Dive 第1部 RESTの説明
  • 6. わんくま同盟 東京勉強会 #52 Wankuma Developer Deep Dive REST • 2000年 • ロイ・フィールディングの博士論文 – なぜWebはこんなに普及したのか? – なぜWebは大規模でもうまく動くのか? – Webの設計原則とは? それを“REST”と呼ぶことにする。
  • 7. わんくま同盟 東京勉強会 #52 Wankuma Developer Deep Dive REST ○× • 設計原則 • アーキテクチャ スタイル • 通信プロトコルでは ない • 仕様ではない • 標準ではない
  • 8. わんくま同盟 東京勉強会 #52 Wankuma Developer Deep Dive 言葉の定義:Webサービス • 広い意味でのWebサービス – Webで提供されるサービス • 検索エンジン、Webメール、顧客管理SaaS • 中ぐらいの意味でのWebサービス – プログラムが呼び出すWeb API • Twitter API、Amazon Web サービス、Bing API • 狭い意味でのWebサービス – SOAPおよびWS-*を使ったインターフェース
  • 9. わんくま同盟 東京勉強会 #52 Wankuma Developer Deep Dive 言葉の定義:Webサービス • 広い意味でのWebサービス – Webで提供されるサービス • 検索エンジン、Webメール、顧客管理SaaS • 中ぐらいの意味でのWebサービス – プログラムが呼び出すWeb API • Twitter API、Amazon Web サービス、Bing API • 狭い意味でのWebサービス – SOAPおよびWS-*を使ったインターフェース 今日はこの意味です。
  • 10. わんくま同盟 東京勉強会 #52 Wankuma Developer Deep Dive 今日の言葉の定義 • RESTful Webサービスとは REST アーキテクチャスタイルを 採用しているWebサービスのこと。 – 「RESTっぽいWebサービス」 – 「REST」という言葉の使われ方は 「オブジェクト指向」という言葉の 使われ方にも似ている。 – RESTを構成する原則は複数ある。
  • 11. わんくま同盟 東京勉強会 #52 Wankuma Developer Deep Dive RESTの原則 • RESTアーキテクチャスタイルの原則を 大きく2つに分類する – 分散システムとしての構造の原則 • クライアント・サーバー型の発展形 – 分散システムが扱う情報の原則 • リソース • HATEOAS
  • 12. わんくま同盟 東京勉強会 #52 Wankuma Developer Deep Dive RESTの原則(構造編) • クライアント・サーバー クライアント サーバー
  • 13. わんくま同盟 東京勉強会 #52 Wankuma Developer Deep Dive RESTの原則(構造編) • クライアント・サーバー&ステートレス クライアント ステートレスサーバー
  • 14. わんくま同盟 東京勉強会 #52 Wankuma Developer Deep Dive RESTの原則(構造編) • クライアント・サーバー&ステートレス &キャッシュ クライアント ステートレスサーバー
  • 15. わんくま同盟 東京勉強会 #52 Wankuma Developer Deep Dive RESTの原則(構造編) • クライアント・サーバー&ステートレス &キャッシュ&統一インターフェース クライアント ステートレスサーバー
  • 16. わんくま同盟 東京勉強会 #52 Wankuma Developer Deep Dive RESTの原則(構造編) • クライアント・サーバー&ステートレス &キャッシュ&統一インターフェース &階層化システム クライアント ステートレスサーバー
  • 17. わんくま同盟 東京勉強会 #52 Wankuma Developer Deep Dive RESTの原則(構造編) • クライアント・サーバー&ステートレス &キャッシュ&統一インターフェース &階層化システム &コード・オン・デマンド(任意) クライアント ステートレスサーバー
  • 18. わんくま同盟 東京勉強会 #52 Wankuma Developer Deep Dive RESTの原則(情報編) • リソースとは? – 名前がつけられる情報すべて – 名前がつけられる=他と区別できる – 抽象的
  • 19. わんくま同盟 東京勉強会 #52 Wankuma Developer Deep Dive RESTの原則(情報編) • リソース 「東京の今日の天気」 「わんくま同盟のメンバリスト」 「藍澤光の壁紙(WP7用)」
  • 20. わんくま同盟 東京勉強会 #52 Wankuma Developer Deep Dive RESTの原則(情報編) • リソース&アドレス 「東京の今日の天気」 http://weather.yahoo.co.jp/weather/jp/13/4410.html 「わんくま同盟のメンバリスト」 http://www.wankuma.com/member/ 「藍澤光の壁紙(WP7用)」 http://www.microsoft.com/taiwan/silverlight/images/480X800_f.jpg
  • 21. わんくま同盟 東京勉強会 #52 Wankuma Developer Deep Dive RESTの原則(情報編) • リソース&アドレス&表現 「東京の今日の天気」 http://weather.yahoo.co.jp/weather/jp/13/4410.html html 「わんくま同盟のメンバリスト」 http://www.wankuma.com/member/ html 「藍澤光の壁紙(WP7用)」 http://www.microsoft.com/taiwan/silverlight/images/480X800_f.jpg jpeg
  • 22. わんくま同盟 東京勉強会 #52 Wankuma Developer Deep Dive RESTの原則(情報編) • リソース&アドレス&表現&メタデータ 「東京の今日の天気」 http://weather.yahoo.co.jp/weather/jp/13/4410.html html ピンポイント天気へのリンクなど 「わんくま同盟のメンバリスト」 http://www.wankuma.com/member/ html 「藍澤光の壁紙(WP7用)」 http://www.microsoft.com/taiwan/silverlight/images/480X800_f.jpg jpeg 最終更新日時:10/08/2010 18:31:46
  • 23. わんくま同盟 東京勉強会 #52 Wankuma Developer Deep Dive RESTの原則(情報編) • HATEOAS – Hypermedia as the Engine of Application State – アプリケーションの状態を表現する 機構としてハイパーメディアを使う – アプリケーションの状態遷移に ハイパーリンクを活用する • 商品一覧のXMLに「次の100件」へのリンクをいれ ておく
  • 24. わんくま同盟 東京勉強会 #52 Wankuma Developer Deep Dive ここまでのまとめ • RESTはWebの設計原則を分析したもの • RESTはアーキテクチャスタイル • 大きく2つに分類できる – 分散システムとしての構造の原則 • クライアント・サーバー型の発展形 – 分散システムが扱う情報の原則 • リソース • HATEOAS
  • 25. わんくま同盟 東京勉強会 #52 Wankuma Developer Deep Dive RESTという単語 • Representational State Transfer – リソースの現在の状態を – 表現したものを – 転送する 「Webで使われるプロトコルは HTTP (HyperText Transfer Protocol) だけど、これって ハイパーテキスト以外にも 便利に使えるよね?」
  • 26. わんくま同盟 東京勉強会 #52 Wankuma Developer Deep Dive RESTとHTTP 抽象概念 具体的な例 REST Web リソース ハイパー メディア アドレス URI 統一 インターフェース HTTP
  • 27. わんくま同盟 東京勉強会 #52 Wankuma Developer Deep Dive RESTful Webサービス 抽象概念 具体的な例 REST Webサービス リソース (リソース) アドレス URI 統一 インターフェース HTTP
  • 28. わんくま同盟 東京勉強会 #52 Wankuma Developer Deep Dive 統一インターフェースとしてのHTTP • HTTPとは – リソースのアドレスをURLで – リソースのメタデータをHTTPヘッダで – リソースの表現をHTTPボディで – リソースに対する操作をHTTPメソッドで • 表すプロトコル
  • 29. わんくま同盟 東京勉強会 #52 Wankuma Developer Deep Dive HTTPの4大メソッド • GET – リソースの表現を取得する • POST – 既存のリソースに関連する何かを追加する – 既存のリソースにデータを渡して何かをする • DELETE – 既存のリソースを削除する • PUT – URLを指定して新しいリソースを作成する – 既存のリソースを変更する
  • 30. わんくま同盟 東京勉強会 #52 Wankuma Developer Deep Dive HTTPのベストプラクティス • GET/DELETE/PUTを「べき等」にする • 可能な限り標準のメソッドを使う • POSTメソッドを濫用しない – HTTPボディにリソースのアドレスを含めない – HTTPボディにリソースの操作を含めない
  • 31. わんくま同盟 東京勉強会 #52 Wankuma Developer Deep Dive RESTではないもの • RPCスタイルのアーキテクチャ – HTTPボディにリソースのアドレスを含める – HTTPボディにリソースの操作を含める – 結果的に、POSTばかりを使う <?xml version="1.0"?> <methodCall> <methodName>examples.getStateName</methodName> <params> <param> <value><i4>40</i4></value> </param> </params> </methodCall>
  • 32. わんくま同盟 東京勉強会 #52 Wankuma Developer Deep Dive RPCスタイルは「間違っている」か? • そうとは言えない • RPCスタイルのほうが向いている 処理もある • ただ、RESTの方が Webの利点を享受できる – 普及性やスケーラビリティ
  • 33. わんくま同盟 東京勉強会 #52 Wankuma Developer Deep Dive RESTful Webサービスの設計 1. サービスが扱うデータ集合を特定する 2. データ集合をリソースに分ける 3. リソースにURIをつける 4. リソースに対する操作を決める 5. 送受信する表現を決める 6. リソース間のリンクを設計する 7. リソースの状態遷移を検討する 8. エラーを検討する
  • 34. わんくま同盟 東京勉強会 #52 Wankuma Developer Deep Dive RESTful Webサービスのベストプラクティス • コレクションリソース – http://edtter.com/chack/status • GET……リソース一覧の取得 (R) • POST……新規リソースの追加 (C) – 作成されたリソースのURIをレスポンスに含める • 個別リソース – http://edtter.com/chack/status/123456 • GET……個別リソースの取得 (R) • PUT……個別リソースの更新 (U) • DELETE……個別リソースの削除 (D)
  • 35. わんくま同盟 東京勉強会 #52 Wankuma Developer Deep Dive RESTful Webサービスのベストプラクティス • Atom出版プロトコル (AtomPub) – IETFが標準化 → RFC 5023 – Web リソースを出版・編集する • コレクション: 全体的に、あるいは部分的に検索さ れ得るリソースの集合 • サービス: コレクションの発見と記述 • 編集: リソースの生成、編集、削除 – リソース一覧のページングにも対応
  • 36. わんくま同盟 東京勉強会 #52 Wankuma Developer Deep Dive 第2部 .NETでの実装
  • 37. わんくま同盟 東京勉強会 #52 Wankuma Developer Deep Dive WCF REST • .NET Framweork 3.5以降 • WebServiceHostFactoryクラス • WCFの面倒なconfigが不要 • クライアントの「サービス参照」不可 <%@ ServiceHost Language="C#" Debug="true" Service="WcfRestService1.Service1" CodeBehind="Service1.svc.cs" Factory="System.ServiceModel.Activation.WebServiceHostFactory" %> Service1.svc
  • 38. わんくま同盟 東京勉強会 #52 Wankuma Developer Deep Dive WCF REST • HTTP GETは[WebGet]カスタム属性、 それ以外は[WebInvoke]カスタム属性 • リクエストやレスポンスは POX / JSON / バイトストリームの三択 • HttpContextの代わりに WebOperationContext – “201 Created”と“404 Not Found”には ショートカットあり
  • 39. わんくま同盟 東京勉強会 #52 Wankuma Developer Deep Dive WCF REST • Visual Studio ギャラリーから テンプレートを ダウンロード可能 (VS2010用)
  • 40. わんくま同盟 東京勉強会 #52 Wankuma Developer Deep Dive WCF RESTのgood/bad • いい点 – わりと自由にできる • つらい点 – カスタムシリアライズ – HATEOAS – URLに「○○.svc」が含まれる • .NET4からはルーティングと統合できる – クライアントの実装 – 実はWCF
  • 41. わんくま同盟 東京勉強会 #52 Wankuma Developer Deep Dive WCF REST Starter Kit • WCF REST Starter Kit – http://aspnet.codeplex.com/wikipage?title=WCF %20REST – Preview 2 (2009/3/10) はVS2008 SP1用 – サーバ側 • POX、単一要素、コレクション、 Atom Feed、AtomPub – クライアント側 • HttpClient
  • 42. わんくま同盟 東京勉強会 #52 Wankuma Developer Deep Dive WCF REST Starter Kitのgood/bad • いい点 – 型にはまった実装は楽 • CRUDとHTTPメソッドのマッピングとか • POX/JSON対応サービスとか • ヘルプページとか • 例外処理とか – HttpClientが手軽 – OSS • つらい点 – 自由がきかない – VS2010未サポート (Preview2)
  • 43. わんくま同盟 東京勉強会 #52 Wankuma Developer Deep Dive RestCake • RestCake – http://rest.codeplex.com/ – http://restcake.net/Overview.aspx • いい点 – WCFじゃない – でも似たような感じで作れる – 罠が少ない • JSONとか、匿名型とか、循環参照とか…… – OSS • つらい点 – 自己責任
  • 44. わんくま同盟 東京勉強会 #52 Wankuma Developer Deep Dive ASP.NET MVC • ASP.NET MVCをWebサービスに使う – Viewが「リソースの表現」になるだけ。 • いい点 – リソース表現が自由 – WCFじゃない – OSS – 赤シャツ印 • つらい点 – GET/POST/PUT/DELETE/HEADだけ対応 – 細かい道具がそろってない
  • 45. わんくま同盟 東京勉強会 #52 Wankuma Developer Deep Dive OpenRasta • OpenRasta – http://openrasta.com/ – RESTful Webアプリケーション/Webサービス – http://live.visitmix.com/MIX10/Sessions/EX19 • いい点 – ASP.NET MVCに近い形で、より強力にRESTをサポート – .NET Framework 2.0以降で動作 – リソース表現が自由 – 属性いらない • つらい点 – ??? REST Architecture Solution Targeting Asp.net
  • 46. わんくま同盟 東京勉強会 #52 Wankuma Developer Deep Dive 質疑応答タイム
  • 47. わんくま同盟 東京勉強会 #52 Wankuma Developer Deep Dive 補足:トランザクションの実現 • http://developer.cybozu.co.jp/kazuho/2010/04/rest- re-web-a6d.html – トランザクションの開始は POST を使ったトランザク ションリソースの生成 – トランザクション開始後は POST ではなく PUT を使い、 クライアントがリクエスト ID を指定することで、 ネットワーク障害への耐性を確保 – トランザクションのコミットも再送可能じゃないと 困るので PUT – コミットの返り値を確認してからトランザクション リソースを DELETE
  • 48. わんくま同盟 東京勉強会 #52 Wankuma Developer Deep Dive 参考情報 • REST in Windows Communication Foundation (WCF) – http://msdn.microsoft.com/wcf/rest • A Guide to Designing and Building RESTful Web Services with WCF 3.5 – http://msdn.microsoft.com/en- us/library/dd203052.aspx