InfoQ

News

WCFでのRESTfulなAPI作成

作者 Hartmut Wilms, 翻訳者 James Neoman 投稿日 2008年3月21日 午前12時18分

コミュニティ
.NET,
SOA
トピック
.NETフレームワーク,
REST
タグ
WCF,
Web services

Aaron SlomanとHaider Sabriは、MIX08(サイト・英語)で「WCFでのRESTfulなAPI作成」(source)と題して、RESTChess(サイト・英語)というRESTのサンプルアプリケーションを紹介した。

講演は、Aaron SlomanのWCFでのRESTサポートに関する背景説明から始まった。その後、Haider Sabriが、RESTとその主要な機能について簡単な紹介を行った。Haiderによると、RESTの重要な利点は、以下の通りである。

    • 参入障壁の低さ
    • ROAは、Web Semanticsを引き継ぐもので、ウェブサービス用APIには手頃
    • レスポンス・フォーマットが柔軟

Haiderは、未知のクライアント用に汎用的なAPIを作成するには、RESTが最適と考えているようだ。

WCFはWebプログラミングモデル(source)を通してRESTをサポートする。サポートは、.NETフレームワーク3.5で追加されたが、以下の概念から成っている。

  • URIテンプレートと WebGet/WebInvoke
    • HTTPリクエストをクラス内のメソッドにマップするattribute。
  • WebHttpBinding
    • WebHttpBindingは、上記に基づいて、ディスパッチを可能にするWCFバインディングである。
    • 開発者は、RESTとSOAP APIを簡単に切り替えることができる。
  • WebOperationContext
    • WebOperationContextを使うと、RESTfulなやりかたでリクエストとレスポンスを操作することができる。

RESTChess(zip)は、Haider Sabriによって紹介されたチェス・ゲームのためのRESTfulなAPIである。RESTChessは、WCFのWebプログラミングモデルに従って実装されたRESTfulなAPIの素晴らしいサンプルであるとともに、WCFウェブ・プログラミングモデルの欠点を補う一揃いの拡張(カスタムメイドのWCFバインディングとビヘイビア)である。

  • 柔軟なURI
    • IISでサービスをホスティングする際には、.svc拡張子をもったサービスが必要である。
    • RESTChessは、IIS 7内のHTTPモジュールとして実装されているURL書き換え機能を提供する。
  • GETとPOSTしかサポートしない低機能RESTクライアントにブリッジする。
    • この問題を解決するためには、2つの一般的なアプローチがある。
      • カスタムメイドのHTTPヘッダ
      • _methodのクエリパラメータ
    • RESTChessは、低機能もしくは高機能のRESTクライアントを区別し、メッセージを変更する、カスタムメイドのWCFチャンネルを実装する。メッセージの変更には、適当なHTTPメソッドにPOSTリクエストを使ってDELETEまたはPUTメソッドをトンネリングする。
  • デジタル署名を使ったリクエスト認証
    • RESTChessはOAuth(サイト・英語)を利用します。OAuthはデジタル署名を包含し、安全なAPI認証を可能とするオープンなプロトコルである。
    • 署名は、クエリ・パラメーターとしてOAuth 消費者キー(consumer key)を通して渡される。
    • カスタムメイドのWCFチャンネルはOAuthキー要求をチェックし、消費者が認証されない(キーは存在しないもしくは、未知)場合には、要求がサービス・モデルに送られる前に、例外を起こす。
  • Formats 複数の表現フォーマット
    • WCFは、XMLとJSON以外はサポートしない。
  • RESTfulな例外処理
    • RESTChessチームは、例外を適当なHTTPエラー・コードにマップするためのエンジンを構築した。

RESTChessチームは、欠けている部分をいろいろとWCFウェブ・プログラミングモデルに追加しなければならなかったが、Haiderによれば、高いレベルでWCFの機能を拡張したり追加をしたり、さらにそのスタックの上に構築できることこそWCFの素晴らしいところだとのことである。

原文はこちらです:http://www.infoq.com/news/2008/03/wcf-restful-api

ブックマーク
digg+,
reddit+,
del.icio.us+,
dzone+,
Hatena

No comments

返信

ジャンル別一覧

クラウドコンピューティング ~ EC2、Mosso、GoGrid

クラウドコンピューティングのプロバイダーであるEC2、Mosso、GoGridの新しいユーザーエクスペリエンスと、それぞれの機能の違いについて学びます。

仮想化入門

このArticleでは仮想化に関する利点と欠点を見ながら、仮想化の違いについて詳しく追っていきます。

Java 6のスレッド最適化は実際に動作しているのか? - パートII

パート2では、ベンチマークの結果を検証するために用いられるテクニックについてさらに深く見ていきたいと思います。最後に、「なぜプロセッサが異なるとロックのコストも大きく異なるのか」と言う真の疑問に答えます。

RESTアンチパターン

本稿では、Stefan Tilkov氏が「RESTful」な設計であると主張するアプリケーションに見受けられる最も一般的なアンチパターンのいくつかについて説明し、それらを避けるための方法を提案しています。

モデル駆動ソフトウェア開発のためのベストプラクティス

Sven Efftinge氏、Peter Friese氏とJan Köhnlein氏が、MDDを取り入れて成功した経験から、ベストプラクティスの解説を行います。

スケーラビリティの構築とパフォーマンスの達成:バーチャルパネル

Our panel of leading experts explores some of the challenges and thought processes that go into making their apps as scalable and performant as possible.

Spring 2.5:Spring MVCの新機能

この記事は、Spring 2.5で導入されたアノテーションを探究する3部作の第2弾です。Web層におけるアノテーションのサポートを扱います。最後の論文では、統合と検査で利用できる追加機能を説明する予定です。

"YUKATA"から始まるコミュニケーション(Agile2008 ライトニングトークより)

私は「浴衣」を着てパーティーに参加したことで、たくさん声を掛けていただけました。 そこで感じたことは、このカンファレンスが人との繋がりを生み出し、また言葉の壁を越えて積極的に交流する場所であることです。民族衣装はそれらを助けてくれるものでした。きっとこの交流が、新たなムーブメントをアジア圏の仲間たちにも与えてくれると確信しています。