36

Open Data Protocol ( OData )     と WCF Data Services によるサービスの作成

Embed Size (px)

DESCRIPTION

セッション ID : T4-303. Open Data Protocol ( OData )     と WCF Data Services によるサービスの作成. マイクロソフト株式会社 デベロッパー&プラットフォーム統括本部 エバンジェリスト 井上大輔. セッションの目的 Open Data Protocol の What WCF Data Services の How セッションのゴール Open Data Protocol の“ 多様性 ”を 認識 WCF Data Services の“ 手軽さ ”を認識. - PowerPoint PPT Presentation

Citation preview

Page 1: Open Data  Protocol ( OData )     と WCF Data Services によるサービスの作成
Page 2: Open Data  Protocol ( OData )     と WCF Data Services によるサービスの作成

マイクロソフト株式会社デベロッパー&プラットフォーム統括本部エバンジェリスト井上大輔

Open Data Protocol (OData)     とWCF Data Services によるサービスの作成

セッション ID : T4-303

Page 3: Open Data  Protocol ( OData )     と WCF Data Services によるサービスの作成

3

セッションの目的とゴールSession Objectives and Takeaways

セッションの目的Open Data Protocol の WhatWCF Data Services の How

セッションのゴールOpen Data Protocol の“多様性”を認識WCF Data Services の“手軽さ”を認識

Page 4: Open Data  Protocol ( OData )     と WCF Data Services によるサービスの作成

4

アジェンダ

Open Data Protocol (OData) とは ?~ 特徴とその価値 ~

WCF Data Services による開発~ 手軽なサービス開発 ~

WCF Data Services のセキュリティ~ 認証と承認 ~

Page 5: Open Data  Protocol ( OData )     と WCF Data Services によるサービスの作成

~ 特徴とその価値 ~

Open Data Protocol (OData) とは ?

Page 6: Open Data  Protocol ( OData )     と WCF Data Services によるサービスの作成

6

クラウド時代のデータ共有

政府ニュース

SNS 地図学術

リサーチイベント

商品カタログ辞書株価

時刻表

MobilePCTV/Game

Server

店舗顧客

売上

メール

在庫入出庫

見積受注 図面

人事

Page 7: Open Data  Protocol ( OData )     と WCF Data Services によるサービスの作成

7

OData とは ?データ共有用の RESTful プロトコル

様々な環境でデータを共有するための規約AtomPub の拡張セット

構造化データ、 CRUD 操作、 URI による複雑なクエリ ( クエリ式 ) 、 JSON フォーマット

Open Specification Promise  の基でリリース

多くの製品やテクノロジで対応サーバークライアント

HTTP/REST

Page 8: Open Data  Protocol ( OData )     と WCF Data Services によるサービスの作成

8

ご参考~ URI クエリ式 ~

クエリ オプション

説明

$expand アドレス指定したエンティティと一緒に関連エンティティのセットを 1 つの応答で返すようサービスに指示します。

$filter クエリ演算子および関数を使用して、返されたセットをフィルターするようサービスに指示します。

$inlinecount allpages が指定されている場合、 URI によって返されるすべてのエンティティのカウントを含めるようサービスに指示します。

$orderby クエリ演算子を使用して、返されたエンティティを並べ替えるようサービスに指示します。

$select 返されたプロパティを指定したプロジェクションのプロパティだけに制限するようサービスに指示します。

$skip 指定した数のエンティティをセットの最初でスキップするようサービスに指示します。

$skiptoken サーバーのページングが有効な場合、結果の次のページを返すようサービスに指示します。

$top セット内の指定した数のエンティティを返すようサービスに指示します。

Page 9: Open Data  Protocol ( OData )     と WCF Data Services によるサービスの作成

9

OData 対応~ サーバー ~製品やテクノロジ

SharePoint 2010Windows Azure StorageSQL AzureWCF Data ServicesWCF RIA ServicesSQL Server Reporting Services 2008 R2IBM WebSphere eXtreme Scaleodata4j (Google AppEngine)など

外部サービスTech·Ed 2010 MIX 10NetflixVancouver’s vanGuideOpen Government Data InitiativeOpen Science Data Initiativeなど

Page 10: Open Data  Protocol ( OData )     と WCF Data Services によるサービスの作成

10

OData 対応~ クライアント ~

アプリExcel + PowerPivotOData ExplorerOData PowerShell ExploreriPhone OData BrowserLINQPadSesameなど

ライブラリ.NETSilverlightWindows Phone 7iPhone 、 iPad (Objective-C)Android (odata4j)jQueryJavaPHPRubyなど

Page 11: Open Data  Protocol ( OData )     と WCF Data Services によるサービスの作成

11

多様な環境への適用全ての層を横断した HTTP/REST の適用

デバイス、 OS 、クラウド、 DB 、 UI

Page 12: Open Data  Protocol ( OData )     と WCF Data Services によるサービスの作成

~ 手軽なサービス開発 ~

ADO.NET Data Services による開発

+ ODataWCF

Page 13: Open Data  Protocol ( OData )     と WCF Data Services によるサービスの作成

13

WCF の全体像

Channel ModelFormats

(Atom, JSON, XML,…)

Transports(HTTP, TCP, …)

Protocols(SOAP, HTTP, OData,…)

Service Model

Data Contract Service ContractService Behavior

Programming Model

Core Services

Web HTTP Services

Data Services

RIA Services

Workflow Services

Page 14: Open Data  Protocol ( OData )     と WCF Data Services によるサービスの作成

14

WCF Data Services とは ?~ サーバー ~

データの CRUD 処理に特化して手軽に RESTful なサービス開発を実現

サービス層から DAL へ直接アクセスOData としてデータを公開

様々な環境に対応したアプリやライブラリを提供

Web サーバー(ASP.NET Application Server)

BusinessLogic

ビジネス データアクセス

ADO.NETEF

などWCF

サービスWCFData

Services

DB

クライアント

サーバー

OData

SOAP など

CRUD 処理

Page 15: Open Data  Protocol ( OData )     と WCF Data Services によるサービスの作成

~ サーバー ~

WCF Data Services による手軽なサービス開発

DEMO

クライアント

OData

サーバー

Page 16: Open Data  Protocol ( OData )     と WCF Data Services によるサービスの作成

16

ご参考~ データの公開 ( サーバー ) ~

public class pubsDataService : DataService< pubsEntities >{ public static void           InitializeService(DataServiceConfiguration config) {   config.SetEntitySetAccessRule("*", EntitySetRights.All); config.SetEntitySetPageSize("*", 2);

   config.DataServiceBehavior.MaxProtocolVersion =                   DataServiceProtocolVersion.V2;  }}

データ ソース

アクセス ルール

ページ サイズ

Page 17: Open Data  Protocol ( OData )     と WCF Data Services によるサービスの作成

17

WCF Data Services とは ?~ クライアント ~

.NET 専用クライアント ライブラリサービス操作用プロキシ クラスを自動生成

LINQ を活用した柔軟なクエリ追加、更新、削除処理変更管理の実装を含む

クライアント

ODataプロキシ クラス

サーバー

Page 18: Open Data  Protocol ( OData )     と WCF Data Services によるサービスの作成

~ .NET ライブラリ ~

サービスの利用

DEMO

クライアント

ODataプロキシ クラス

サーバー

Page 19: Open Data  Protocol ( OData )     と WCF Data Services によるサービスの作成

19

ご参考~ LINQ を使ったクエリ ( クライアント ) ~

pubsEntities context = new pubsEntities(new Uri("http://localhost.:8582/pubsDataService.svc/"));

var query = (from e in context.employees where e.job_lvl > 100 orderby e.hire_date select new { name = e.fname + " " + e.lname, hire_date = e.hire_date, job_desc = e.job.job_desc }).Skip(3).Take(2).ToList();

int count = query.Count();

LINQ を利用した様々なデータ操作

プロキシ クラス

Page 20: Open Data  Protocol ( OData )     と WCF Data Services によるサービスの作成

20

ご参考~ データの追加 ( クライアント ) ~

pubsEntities context = new pubsEntities(new Uri("http://localhost.:8582/pubsDataService.svc/"));

employee emp = new employee   { emp_id = “MAP88185M”, fname = “Daisuke”, ・ ・ ・ };

context.AddToemployees(emp);context.SaveChanges(); データの追加を

サーバーへリクエスト

Page 21: Open Data  Protocol ( OData )     と WCF Data Services によるサービスの作成

21

Silverlight で利用するには ?Silverlight 専用クライアント ライブラリサービス操作用プロキシ クラスを自動生成Silverlight の特徴

クライアントのブラウザーで動作データベースへの直接アクセスは不可

サーバー上のデータはサービスを通じて操作サービスへのアクセスはすべて非同期処理

クライアント

OData

サーバー

プロキシ クラス

非同期

Page 22: Open Data  Protocol ( OData )     と WCF Data Services によるサービスの作成

~ Silverlight ライブラリ ~

サービスの利用

DEMO

クライアント

OData

サーバー

プロキシ クラス

非同期

Page 23: Open Data  Protocol ( OData )     と WCF Data Services によるサービスの作成

23

ご参考~ 非同期クエリ (Silverlight) ~private void button1_Click(object sender, RoutedEventArgs e){ pubsEntities context = new pubsEntities(new Uri("pubsDS.svc", UriKind.RelativeOrAbsolute)); var query = (from emp in context.employees select emp) as DataServiceQuery<employee>; query.BeginExecute(EmployeesQueryCompleted, query);}

private void EmployeesQueryCompleted(IAsyncResult result){ Dispatcher.BeginInvoke(() => { var query = result.AsyncState as DataServiceQuery<employee>;    IEnumerable<employee> employees =                 query.EndExecute(result).ToList(); dataGrid1.ItemsSource = employees; });}

非同期クエリ処理終了

非同期コールバック

メソッドの実装

非同期クエリ処理開始

URL の指定は不要

Page 24: Open Data  Protocol ( OData )     と WCF Data Services によるサービスの作成

24

ご参考~ 非同期クエリと双方向バインド (Silverlight) ~private void button2_Click(object sender, RoutedEventArgs e){ pubsEntities context = new pubsEntities(new Uri(" pubsDS.svc", UriKind.RelativeOrAbsolute));

var query = (from emp in context.employees select emp) as DataServiceQuery<employee>;

var collection = new DataServiceCollection<employee>(); dataGrid1.ItemsSource = collection; collection.LoadAsync(query);}

双方向バインド コレクション

非同期クエリ処理

Page 25: Open Data  Protocol ( OData )     と WCF Data Services によるサービスの作成

25

ご参考~ 非同期データ追加 (Silverlight) ~private void button3_Click(object sender, RoutedEventArgs e){ pubsEntities context = new pubsEntities(new Uri("pubsDS.svc", UriKind.RelativeOrAbsolute)); employee emp = new employee { emp_id = “MAP88184M”,             fname = “Daisuke”, lname = “Inoue”, ・ ・ ・ }; context.AddToemployees(emp); context.BeginSaveChanges(SaveChangesOptions.Batch, OnAddEmployees, context);}

private void OnAddEmployees(IAsyncResult result){ Dispatcher.BeginInvoke(() => { pubsEntities context = result.AsyncState as pubsEntities; DataServiceResponse response = context.EndSaveChanges(result); });}

非同期追加処理終了

非同期追加処理開始非同期処理

コールバックメソッドの実装

Page 26: Open Data  Protocol ( OData )     と WCF Data Services によるサービスの作成

~ 認証と承認 ~

WCF Data Services のセキュリティ

Page 27: Open Data  Protocol ( OData )     と WCF Data Services によるサービスの作成

27

認証と承認

Web サーバー

DB

クライアント

サーバー

認証 (Authentication)誰であるかを特定すること ( ログイン )

承認、認可 (Authorization)リソースへのアクセス制御

ODataWindows認証など

IIS

ACL

ASP.NET

フォーム認証など

 設定 ファイル

WCF Data Services

QueryInterceptorChangeInterceptorSetEntitySetAccessRule

Page 28: Open Data  Protocol ( OData )     と WCF Data Services によるサービスの作成

28

ご参考~ Windows 資格情報の取得 ( クライアント ) ~

context.Credentials = CredentialCache.DefaultCredentials;

context.UseDefaultCredentials = true;

※ デフォルト true

Page 29: Open Data  Protocol ( OData )     と WCF Data Services によるサービスの作成

29

承認、認可 (Authorization)IIS

Windows 認証の場合、 エクスプローラーのプロパティ  ウィンドウから ACL で指定ASP.NET設定ファイル (Web.config)

  の <authorization> 要素で指定WCF Data Services

QueryInterceptor参照処理でカスタム ロジックを割り込ませる属性

ChangeInterceptor参照以外の処理でカスタム ロジックを割り込ませる属性

SetEntitySetAccessRuleエンティティ セット単位でアクセス権を指定

Page 30: Open Data  Protocol ( OData )     と WCF Data Services によるサービスの作成

30

ご参考~ QueryInterceptor ( サーバー ) ~

[QueryInterceptor("employees")]public Expression<Func<employee, bool>> empfilter(){ if (!HttpContext.Current.User.Identity.IsAuthenticated) return (employee e) => false;

var id = HttpContext.Current.User.Identity.Name;

if (id == "Administrator") return (employee e) => true; else return (employee e) => e.emp_id == id;}

エンティティ セット (employees) の参照で割り込み発生

Page 31: Open Data  Protocol ( OData )     と WCF Data Services によるサービスの作成

31

ご参考~ ChangeInterceptor ( サーバー ) ~

[ChangeInterceptor("employees")]public void OnChangeEmployees(employee e,                     UpdateOperations operations){ if (!HttpContext.Current.User.Identity.IsAuthenticated) throw new DataServiceException(403, "Access Denied");

var id = HttpContext.Current.User.Identity.Name;

if (id != "Administrator") { if (id != e.emp_id) throw new DataServiceException(403, "Access Denied"); if (operations == UpdateOperations.Add ||                operations == UpdateOperations.Delete) throw new DataServiceException(403, "Access Denied"); }}

エンティティ セット (employees) の参照以外で割り込み発生

オペレーションの指定

Page 32: Open Data  Protocol ( OData )     と WCF Data Services によるサービスの作成

32

ご参考~ EntitySetRights で指定可能なメンバー ~

メンバー名 説明

None データへのすべてのアクセス権を拒否

ReadSingle 単一のデータ項目を読み取る許可

ReadMultiple データ セットを読み取る許可

WriteAppend 新しいデータ項目をデータ セットに作成する許可

WriteReplace データを置換する許可

WriteDelete データ セットからデータ項目を削除する許可

WriteMerge データをマージする許可

AllRead データを読み取る許可

AllWrite データを書き込む許可

All データを作成、読み取り、更新、および削除する許可

複数指定config.SetEntitySetAccessRule(“employees",     EntitySetRights.AllRead | EntitySetRights.WriteDelete);

Page 33: Open Data  Protocol ( OData )     と WCF Data Services によるサービスの作成

33

まとめ

OData は今後のクラウド時代を見据えたデータ共有プロトコル

OData に対応することで様々な環境で データを共有

WCF Data Services を用いて多機能な OData 対応のサービスを手軽に開発

Page 34: Open Data  Protocol ( OData )     と WCF Data Services によるサービスの作成

34

関連セッション

T4-402 : ADO.NET Entity Framework ディープ ダイブ ~ EF 4 アーキテクチャと実践的活用 ~

T6-401 : WCF RIA Services を使った Silverlight 4 アプリケーション開発 ~ 迅速性と効率性の追求 ~

T1-309 : Windows Azure ストレージ詳説

T6-312 : Windows Communication Foundation 4 における新機能のポイント ~ REST サービスからワークフロー サービスまで ~

Page 35: Open Data  Protocol ( OData )     と WCF Data Services によるサービスの作成

35

リファレンス講師のブログhttp://blogs.msdn.com/b/daisukei

講師の Twitterhttp://twitter.com/daisukei777

データ プラットフォーム ( データ アクセス ) 開発http://msdn.microsoft.com/ja-jp/data/default.aspx

Open Data Protocol 本家サイト http://www.odata.org/

Page 36: Open Data  Protocol ( OData )     と WCF Data Services によるサービスの作成

ご清聴ありがとうございました。

T4-303アンケートにご協力ください。