SlideShare ist ein Scribd-Unternehmen logo
1 von 32
WebDAV
           ~オープンデータ時代の標準API~




2007/01/15 ウノウ株式会社 駒形真幸 <komagata@unoh.net>
WebDAVとは?

 Distributed Authoring and Versioning     
●

 protocol for the WWW

    WWW上で編集とバージョン管理が出来る
●

    プロトコル

    1998年にRFC2291で提唱されたHTTP1.1の
●

    拡張仕様
主な実装

 サーバ
●

 Apache mod_dav
 IIS

 クライアント
●

 WindowsのExplorer
 Mac OS XのFinder
 LinuxのNautilus
 Dreamweaver
WebDAVの基本要素

    リソース
●

    WebDAVで扱う対象
    (ファイルシステムで言えばファイルやディレクトリ)

    コレクション
●

    リソースの集まり(ファイルシステムで言えばディレクトリ)

    プロパティ
●

    リソースの属性(名前と値のペア)

    ロック
●

    同時編集を回避する仕組み(共有ロック方式)
HTTP1.1からの拡張点

    メソッドの追加
●
HTTP1.1からの拡張点(2)

    ステータスコードの追加
●
WebDAVのリクエスト

PROPFIND /DAV/setup01.jpg HTTP/1.1
Host: localhost
Content-type: text/xml; charset="utf-8"
Depth: 0

<?xml version="1.0" encoding="utf-8" ?>
<D:propfind xmlns:D="DAV:">
  <D:prop xmlns:R="http://localhost/boxschema/">
    <R:bigbox/>
     <R:author/>
     <R:DingALing/>
    <R:Random/>
  </D:prop>
</D:propfind>
WebDAVのレスポンス

HTTP/1.1 207 Multi-Status
Date: Thu, 18 Jan 2007 02:55:37 GMT
Server: Apache/2.2.3 (Debian) DAV/2 PHP/4.4.4-8
Content-Length: 1245
Connection: close
Content-Type: text/xml; charset="utf-8"

<?xml version="1.0" encoding="utf-8"?>
<D:multistatus xmlns:D="DAV:">
<D:response xmlns:ns0="DAV:" xmlns:ns1="urn:schemas-microsoft-
com:" xmlns:lp1="DAV:" xmlns:lp
2="http://apache.org/dav/props/">
<D:href>/dav/a.jpg</D:href>
 (略)
枯れた地味な技術

    新しいファイルシステムはもういいよ・・・
●




    nfsで良いんじゃ?
●




    一昔前の技術?
●




    今日びWebDAVて・・・
●
なぜ今、WebDAVか

    良く考えると、WebDAVは
●

    ファイルシステムじゃなくてWeb APIの仕様


    もしかしてスゴイ有望なんじゃ?
●
なぜ今、WebDAVか(2)

    様々なデバイスでネットにアクセス
●




    オープンなAPIよりオープンなデータ
●




    CGMの流行でネット上のWRITEが増えた
●
なぜ今、WebDAVか(3)

 様々なデバイスでネットにアクセス
●

 → HTTP1.1の拡張仕様

 オープンなAPIよりオープンなデータ
●

 → データ向けのXML語彙

 CGMの流行でネット上のWRITEが増えた
●

 → LOCKなどのWRITE向けの便利な仕様
WebDAV API
 Web APIとしてのWebDAV
REST

    REpresentational State Transfer
●




URIで識別されるリソースの状態の表現をGET,
PUTなどの幾つかの動詞によってやりとりするアー
キテクチャースタイル

HTTPプロトコルの主要著者であるRoy Fieldingが
提唱した。WWWと非常に相性が良い。(WWW自
体RESTの一実装であると言える)
RESTなシステム

    Google Web API
●




    A9.comのOpenSearch
●
                                       汎
                                       用
    Blogger API, MetaBlog API          性
●




    Atom Publishing Protocol(AtomPP)
●




    WebDAV!?
●
WebDAV vs AtomPP

 Web APIの仕様っていったら
●

 AtomPPじゃないの?

→ WebDAVは1999年にRFCになっている。
  対してAtomPPは現在IETFで議論中。
  現状、実装も圧倒的にWebDAVが多い。
WebDAV vs AtomPP(2)

 RESTfulなAtomPPの方がWWWと相性が
●

 良いんじゃないの?
Roy FieldingのREST原則

    ステートレスなプロトコル(HTTP)
●




 全てのリソースに適用可能な操作のセット
●

 (GET, POST, PUT, DELETEなど)

 リソースを一意に識別できる汎用的な構文
●

 (URI)

 情報と状態遷移の両方を扱うことができる
●

「ハイパーメディアの使用」(HTMLやXML)
WebDAVはRESTful

    HTTP 1.1の拡張
●




    PROPFIND, COPYなど全てのリソースに
●

    適用できる汎用のメソッドを持っている

    URIをベースとしている
●




    XMLを使ってやり取りしている
●
WebDAV vs AtomPP(3)

    本当に普及してるの?
●




→ Windows, Mac OS X, Linuxで
  標準でサポートしている。
  実装も圧倒的にWebDAVの方が多い。
WebDAVの利点

    実は一番普及しているWeb API
●




    ファイルシステムを扱うのに十分なメソッドと
●

    表現力

 詳細なわりに抽象度が高い仕様
●

 (ファイルシステム自体の抽象度が高いので
 必然的にこうなった)
PHPよるサーバ実装

対応するメソッドを実装するだけで良い

require_once 'HTTP/WebDAV/Server.php';
class HTTP_WebDAV_Server_Photozou extends
HTTP_WebDAV_Server {
  function GET(&$options) {
    $options['mimetype'] = 'image/jpeg';
    $options['mtime'] = xxxxxx;
    $options['stream'] = fopen($options['path'], 'r');
     return true;
  }
  function PROPFIND(&$options, &$files) { (略) }
}
$server = new HTTP_WebDAV_Server_Photozou();
$server->ServeRequest();
Javascriptによるクライアント実装

XHR(Xml Http Request)でWebDAVの拡張メソッドを呼ぶことが出来る

var XHR = function() {
  return window.XMLHttpRequest ?
   new XMLHttpRequest() : new ActiveXObject("Microsoft.XMLHTTP");
}
XHR.open('PROPFIND', 'http://foo.com/pathto, true);
headers = headers || {};
headers['Depth'] = headers['Depth']>1 ? 1 : headers['Depth'];
headers['Content-Type'] = headers['Content-Type'] || 'text/xml';
for (h in headers) {
  XHR.setRequestHeader(h, headers[h]);
}
XHR.send('<?xml version="1.0" ?><propfind
xmlns="DAV:"><allprop/></propfind>');
認証

RESTなので既存の様々な認証方法が使えます。

    Basic認証
●


PROPFIND /pathto HTTP/1.1
Depth: 1
Authorization: Basic a28tYWdhdGE6dGFrYXNha2k=

    Digest認証
●


PROPFIND /pathto HTTP/1.1
Depth: 1
WWW-Authenticate: Digest realm="Secret Zone",
nonce="RMH1usDrAwA=6dc290ea3304de42a7347e0a94089ff5912c
e0de", algorithm=MD5, qop="auth"
認証(2)

    WSSE認証
●



PROPFIND /pathto HTTP/1.1
Depth: 1
X-WSSE: UsernameToken Username="komagata",
PasswordDigest="ZCNaK2jrXr4+zsCaYK/YLUxImZU=",
Nonce="Uh95NQlviNpJQR1MmML+zq6pFxE=", Created="2005-01-
18T03:20:15Z"
WebDAV API応用例

    JavaScriptの画像ブラウザ
●




    フォト蔵をWindowsにマウント
●




    JS画像ブラウザ at フォト蔵
●




    Flashの画像ブラウザ
●
JavaScriptの画像ブラウザ
フォト蔵をWindowsにマウント
JS画像ブラウザ at フォト蔵
JS画像ブラウザ at フォト蔵
Flashの画像ブラウザ
まとめ




WebDAVは有望なWeb API

Weitere ähnliche Inhalte

Was ist angesagt?

빠르고 안전하게 간편한 AWS로 데이터 마이그레이션 하기::최유정 (AWS 솔루션즈아키텍트)
빠르고 안전하게 간편한 AWS로 데이터 마이그레이션 하기::최유정 (AWS 솔루션즈아키텍트)빠르고 안전하게 간편한 AWS로 데이터 마이그레이션 하기::최유정 (AWS 솔루션즈아키텍트)
빠르고 안전하게 간편한 AWS로 데이터 마이그레이션 하기::최유정 (AWS 솔루션즈아키텍트)Amazon Web Services Korea
 
AWS와 부하테스트의 절묘한 만남 :: 김무현 솔루션즈 아키텍트 :: Gaming on AWS 2016
AWS와 부하테스트의 절묘한 만남 :: 김무현 솔루션즈 아키텍트 :: Gaming on AWS 2016AWS와 부하테스트의 절묘한 만남 :: 김무현 솔루션즈 아키텍트 :: Gaming on AWS 2016
AWS와 부하테스트의 절묘한 만남 :: 김무현 솔루션즈 아키텍트 :: Gaming on AWS 2016Amazon Web Services Korea
 
Windows Server 2019 で Container を使ってみる
Windows Server 2019 で Container を使ってみるWindows Server 2019 で Container を使ってみる
Windows Server 2019 で Container を使ってみるKazuki Takai
 
中小規模サービスのApacheチューニング
中小規模サービスのApacheチューニング中小規模サービスのApacheチューニング
中小規模サービスのApacheチューニング勲 國府田
 
MySQL 5.7にやられないためにおぼえておいてほしいこと
MySQL 5.7にやられないためにおぼえておいてほしいことMySQL 5.7にやられないためにおぼえておいてほしいこと
MySQL 5.7にやられないためにおぼえておいてほしいことyoku0825
 
今からでも遅くないDBマイグレーション - Flyway と SchemaSpy の紹介 -
今からでも遅くないDBマイグレーション - Flyway と SchemaSpy の紹介 -今からでも遅くないDBマイグレーション - Flyway と SchemaSpy の紹介 -
今からでも遅くないDBマイグレーション - Flyway と SchemaSpy の紹介 -onozaty
 
Apache Arrow - データ処理ツールの次世代プラットフォーム
Apache Arrow - データ処理ツールの次世代プラットフォームApache Arrow - データ処理ツールの次世代プラットフォーム
Apache Arrow - データ処理ツールの次世代プラットフォームKouhei Sutou
 
【BS3】Visual Studio 2022 と .NET 6 での Windows アプリ開発技術の紹介
【BS3】Visual Studio 2022 と .NET 6 での Windows アプリ開発技術の紹介 【BS3】Visual Studio 2022 と .NET 6 での Windows アプリ開発技術の紹介
【BS3】Visual Studio 2022 と .NET 6 での Windows アプリ開発技術の紹介 日本マイクロソフト株式会社
 
AWS for Games - 게임만을 위한 AWS 서비스 길라잡이 (레벨 200) - 진교선, 솔루션즈 아키텍트, AWS ::: Game...
AWS for Games - 게임만을 위한 AWS 서비스 길라잡이 (레벨 200) - 진교선, 솔루션즈 아키텍트, AWS :::  Game...AWS for Games - 게임만을 위한 AWS 서비스 길라잡이 (레벨 200) - 진교선, 솔루션즈 아키텍트, AWS :::  Game...
AWS for Games - 게임만을 위한 AWS 서비스 길라잡이 (레벨 200) - 진교선, 솔루션즈 아키텍트, AWS ::: Game...Amazon Web Services Korea
 
프론트엔드 개발자를 위한 서버리스 - 윤석찬 (AWS 테크에반젤리스트)
프론트엔드 개발자를 위한 서버리스 - 윤석찬 (AWS 테크에반젤리스트)프론트엔드 개발자를 위한 서버리스 - 윤석찬 (AWS 테크에반젤리스트)
프론트엔드 개발자를 위한 서버리스 - 윤석찬 (AWS 테크에반젤리스트)Amazon Web Services Korea
 
Git을 조금 더 알아보자!
Git을 조금 더 알아보자!Git을 조금 더 알아보자!
Git을 조금 더 알아보자!Young Kim
 
Apache Arrow Flight – ビッグデータ用高速データ転送フレームワーク #dbts2021
Apache Arrow Flight – ビッグデータ用高速データ転送フレームワーク #dbts2021Apache Arrow Flight – ビッグデータ用高速データ転送フレームワーク #dbts2021
Apache Arrow Flight – ビッグデータ用高速データ転送フレームワーク #dbts2021Kouhei Sutou
 
こわくない Git
こわくない Gitこわくない Git
こわくない GitKota Saito
 
Prometheus入門から運用まで徹底解説
Prometheus入門から運用まで徹底解説Prometheus入門から運用まで徹底解説
Prometheus入門から運用まで徹底解説貴仁 大和屋
 
Nginx勉強会
Nginx勉強会Nginx勉強会
Nginx勉強会Yuji Otani
 

Was ist angesagt? (20)

AWSからのメール送信
AWSからのメール送信AWSからのメール送信
AWSからのメール送信
 
빠르고 안전하게 간편한 AWS로 데이터 마이그레이션 하기::최유정 (AWS 솔루션즈아키텍트)
빠르고 안전하게 간편한 AWS로 데이터 마이그레이션 하기::최유정 (AWS 솔루션즈아키텍트)빠르고 안전하게 간편한 AWS로 데이터 마이그레이션 하기::최유정 (AWS 솔루션즈아키텍트)
빠르고 안전하게 간편한 AWS로 데이터 마이그레이션 하기::최유정 (AWS 솔루션즈아키텍트)
 
AWS와 부하테스트의 절묘한 만남 :: 김무현 솔루션즈 아키텍트 :: Gaming on AWS 2016
AWS와 부하테스트의 절묘한 만남 :: 김무현 솔루션즈 아키텍트 :: Gaming on AWS 2016AWS와 부하테스트의 절묘한 만남 :: 김무현 솔루션즈 아키텍트 :: Gaming on AWS 2016
AWS와 부하테스트의 절묘한 만남 :: 김무현 솔루션즈 아키텍트 :: Gaming on AWS 2016
 
20221105_GCPUG 女子会 Kubernets 編.pdf
20221105_GCPUG 女子会 Kubernets 編.pdf20221105_GCPUG 女子会 Kubernets 編.pdf
20221105_GCPUG 女子会 Kubernets 編.pdf
 
Windows Server 2019 で Container を使ってみる
Windows Server 2019 で Container を使ってみるWindows Server 2019 で Container を使ってみる
Windows Server 2019 で Container を使ってみる
 
Mavenの真実とウソ
Mavenの真実とウソMavenの真実とウソ
Mavenの真実とウソ
 
中小規模サービスのApacheチューニング
中小規模サービスのApacheチューニング中小規模サービスのApacheチューニング
中小規模サービスのApacheチューニング
 
MySQL 5.7にやられないためにおぼえておいてほしいこと
MySQL 5.7にやられないためにおぼえておいてほしいことMySQL 5.7にやられないためにおぼえておいてほしいこと
MySQL 5.7にやられないためにおぼえておいてほしいこと
 
今からでも遅くないDBマイグレーション - Flyway と SchemaSpy の紹介 -
今からでも遅くないDBマイグレーション - Flyway と SchemaSpy の紹介 -今からでも遅くないDBマイグレーション - Flyway と SchemaSpy の紹介 -
今からでも遅くないDBマイグレーション - Flyway と SchemaSpy の紹介 -
 
Apache Arrow - データ処理ツールの次世代プラットフォーム
Apache Arrow - データ処理ツールの次世代プラットフォームApache Arrow - データ処理ツールの次世代プラットフォーム
Apache Arrow - データ処理ツールの次世代プラットフォーム
 
HTTP/2 入門
HTTP/2 入門HTTP/2 入門
HTTP/2 入門
 
【BS3】Visual Studio 2022 と .NET 6 での Windows アプリ開発技術の紹介
【BS3】Visual Studio 2022 と .NET 6 での Windows アプリ開発技術の紹介 【BS3】Visual Studio 2022 と .NET 6 での Windows アプリ開発技術の紹介
【BS3】Visual Studio 2022 と .NET 6 での Windows アプリ開発技術の紹介
 
AWS for Games - 게임만을 위한 AWS 서비스 길라잡이 (레벨 200) - 진교선, 솔루션즈 아키텍트, AWS ::: Game...
AWS for Games - 게임만을 위한 AWS 서비스 길라잡이 (레벨 200) - 진교선, 솔루션즈 아키텍트, AWS :::  Game...AWS for Games - 게임만을 위한 AWS 서비스 길라잡이 (레벨 200) - 진교선, 솔루션즈 아키텍트, AWS :::  Game...
AWS for Games - 게임만을 위한 AWS 서비스 길라잡이 (레벨 200) - 진교선, 솔루션즈 아키텍트, AWS ::: Game...
 
프론트엔드 개발자를 위한 서버리스 - 윤석찬 (AWS 테크에반젤리스트)
프론트엔드 개발자를 위한 서버리스 - 윤석찬 (AWS 테크에반젤리스트)프론트엔드 개발자를 위한 서버리스 - 윤석찬 (AWS 테크에반젤리스트)
프론트엔드 개발자를 위한 서버리스 - 윤석찬 (AWS 테크에반젤리스트)
 
Serverless Anti-Patterns
Serverless Anti-PatternsServerless Anti-Patterns
Serverless Anti-Patterns
 
Git을 조금 더 알아보자!
Git을 조금 더 알아보자!Git을 조금 더 알아보자!
Git을 조금 더 알아보자!
 
Apache Arrow Flight – ビッグデータ用高速データ転送フレームワーク #dbts2021
Apache Arrow Flight – ビッグデータ用高速データ転送フレームワーク #dbts2021Apache Arrow Flight – ビッグデータ用高速データ転送フレームワーク #dbts2021
Apache Arrow Flight – ビッグデータ用高速データ転送フレームワーク #dbts2021
 
こわくない Git
こわくない Gitこわくない Git
こわくない Git
 
Prometheus入門から運用まで徹底解説
Prometheus入門から運用まで徹底解説Prometheus入門から運用まで徹底解説
Prometheus入門から運用まで徹底解説
 
Nginx勉強会
Nginx勉強会Nginx勉強会
Nginx勉強会
 

Mehr von Masaki Komagata

フィヨルドでのCaster活用事例
フィヨルドでのCaster活用事例フィヨルドでのCaster活用事例
フィヨルドでのCaster活用事例Masaki Komagata
 
Webデザイナーのための「本当は怖くない」"黒い画面"入門
Webデザイナーのための「本当は怖くない」"黒い画面"入門Webデザイナーのための「本当は怖くない」"黒い画面"入門
Webデザイナーのための「本当は怖くない」"黒い画面"入門Masaki Komagata
 
This is presentation at Mitaka.rb #10.
This is presentation at Mitaka.rb #10.This is presentation at Mitaka.rb #10.
This is presentation at Mitaka.rb #10.Masaki Komagata
 
WordPressに足りないモノ
WordPressに足りないモノWordPressに足りないモノ
WordPressに足りないモノMasaki Komagata
 
Webアプリケーションの国際化
Webアプリケーションの国際化Webアプリケーションの国際化
Webアプリケーションの国際化Masaki Komagata
 
RESTfullアプリケーションの簡単作成
RESTfullアプリケーションの簡単作成RESTfullアプリケーションの簡単作成
RESTfullアプリケーションの簡単作成Masaki Komagata
 

Mehr von Masaki Komagata (14)

漬け水に浸かる
漬け水に浸かる漬け水に浸かる
漬け水に浸かる
 
フィヨルドでのCaster活用事例
フィヨルドでのCaster活用事例フィヨルドでのCaster活用事例
フィヨルドでのCaster活用事例
 
CMS for Cloud by Ruby
CMS for Cloud by RubyCMS for Cloud by Ruby
CMS for Cloud by Ruby
 
CMS for Cloud by Ruby
CMS for Cloud by RubyCMS for Cloud by Ruby
CMS for Cloud by Ruby
 
PaaS向けCMS Lokka
PaaS向けCMS LokkaPaaS向けCMS Lokka
PaaS向けCMS Lokka
 
Webデザイナーのための「本当は怖くない」"黒い画面"入門
Webデザイナーのための「本当は怖くない」"黒い画面"入門Webデザイナーのための「本当は怖くない」"黒い画面"入門
Webデザイナーのための「本当は怖くない」"黒い画面"入門
 
What make you
What make youWhat make you
What make you
 
This is presentation at Mitaka.rb #10.
This is presentation at Mitaka.rb #10.This is presentation at Mitaka.rb #10.
This is presentation at Mitaka.rb #10.
 
WordPressに足りないモノ
WordPressに足りないモノWordPressに足りないモノ
WordPressに足りないモノ
 
MSICC
MSICCMSICC
MSICC
 
Webアプリケーションの国際化
Webアプリケーションの国際化Webアプリケーションの国際化
Webアプリケーションの国際化
 
RESTfullアプリケーションの簡単作成
RESTfullアプリケーションの簡単作成RESTfullアプリケーションの簡単作成
RESTfullアプリケーションの簡単作成
 
What is PHP Frameworks?
What is PHP Frameworks?What is PHP Frameworks?
What is PHP Frameworks?
 
RDF and FOAF
RDF and FOAFRDF and FOAF
RDF and FOAF
 

WebDAV as Web API

  • 1. WebDAV ~オープンデータ時代の標準API~ 2007/01/15 ウノウ株式会社 駒形真幸 <komagata@unoh.net>
  • 2. WebDAVとは? Distributed Authoring and Versioning      ●  protocol for the WWW WWW上で編集とバージョン管理が出来る ● プロトコル 1998年にRFC2291で提唱されたHTTP1.1の ● 拡張仕様
  • 3. 主な実装 サーバ ●  Apache mod_dav  IIS クライアント ●  WindowsのExplorer  Mac OS XのFinder  LinuxのNautilus  Dreamweaver
  • 4. WebDAVの基本要素 リソース ● WebDAVで扱う対象 (ファイルシステムで言えばファイルやディレクトリ) コレクション ● リソースの集まり(ファイルシステムで言えばディレクトリ) プロパティ ● リソースの属性(名前と値のペア) ロック ● 同時編集を回避する仕組み(共有ロック方式)
  • 5. HTTP1.1からの拡張点 メソッドの追加 ●
  • 6. HTTP1.1からの拡張点(2) ステータスコードの追加 ●
  • 7. WebDAVのリクエスト PROPFIND /DAV/setup01.jpg HTTP/1.1 Host: localhost Content-type: text/xml; charset="utf-8" Depth: 0 <?xml version="1.0" encoding="utf-8" ?> <D:propfind xmlns:D="DAV:"> <D:prop xmlns:R="http://localhost/boxschema/"> <R:bigbox/> <R:author/> <R:DingALing/> <R:Random/> </D:prop> </D:propfind>
  • 8. WebDAVのレスポンス HTTP/1.1 207 Multi-Status Date: Thu, 18 Jan 2007 02:55:37 GMT Server: Apache/2.2.3 (Debian) DAV/2 PHP/4.4.4-8 Content-Length: 1245 Connection: close Content-Type: text/xml; charset="utf-8" <?xml version="1.0" encoding="utf-8"?> <D:multistatus xmlns:D="DAV:"> <D:response xmlns:ns0="DAV:" xmlns:ns1="urn:schemas-microsoft- com:" xmlns:lp1="DAV:" xmlns:lp 2="http://apache.org/dav/props/"> <D:href>/dav/a.jpg</D:href> (略)
  • 9. 枯れた地味な技術 新しいファイルシステムはもういいよ・・・ ● nfsで良いんじゃ? ● 一昔前の技術? ● 今日びWebDAVて・・・ ●
  • 10. なぜ今、WebDAVか 良く考えると、WebDAVは ● ファイルシステムじゃなくてWeb APIの仕様 もしかしてスゴイ有望なんじゃ? ●
  • 11. なぜ今、WebDAVか(2) 様々なデバイスでネットにアクセス ● オープンなAPIよりオープンなデータ ● CGMの流行でネット上のWRITEが増えた ●
  • 12. なぜ今、WebDAVか(3) 様々なデバイスでネットにアクセス ●  → HTTP1.1の拡張仕様 オープンなAPIよりオープンなデータ ●  → データ向けのXML語彙 CGMの流行でネット上のWRITEが増えた ●  → LOCKなどのWRITE向けの便利な仕様
  • 13. WebDAV API Web APIとしてのWebDAV
  • 14. REST REpresentational State Transfer ● URIで識別されるリソースの状態の表現をGET, PUTなどの幾つかの動詞によってやりとりするアー キテクチャースタイル HTTPプロトコルの主要著者であるRoy Fieldingが 提唱した。WWWと非常に相性が良い。(WWW自 体RESTの一実装であると言える)
  • 15. RESTなシステム Google Web API ● A9.comのOpenSearch ● 汎 用 Blogger API, MetaBlog API 性 ● Atom Publishing Protocol(AtomPP) ● WebDAV!? ●
  • 16. WebDAV vs AtomPP Web APIの仕様っていったら ●  AtomPPじゃないの? → WebDAVは1999年にRFCになっている。   対してAtomPPは現在IETFで議論中。   現状、実装も圧倒的にWebDAVが多い。
  • 17. WebDAV vs AtomPP(2) RESTfulなAtomPPの方がWWWと相性が ●  良いんじゃないの?
  • 18. Roy FieldingのREST原則 ステートレスなプロトコル(HTTP) ● 全てのリソースに適用可能な操作のセット ●  (GET, POST, PUT, DELETEなど) リソースを一意に識別できる汎用的な構文 ●  (URI) 情報と状態遷移の両方を扱うことができる ● 「ハイパーメディアの使用」(HTMLやXML)
  • 19. WebDAVはRESTful HTTP 1.1の拡張 ● PROPFIND, COPYなど全てのリソースに ● 適用できる汎用のメソッドを持っている URIをベースとしている ● XMLを使ってやり取りしている ●
  • 20. WebDAV vs AtomPP(3) 本当に普及してるの? ● → Windows, Mac OS X, Linuxで   標準でサポートしている。   実装も圧倒的にWebDAVの方が多い。
  • 21. WebDAVの利点 実は一番普及しているWeb API ● ファイルシステムを扱うのに十分なメソッドと ● 表現力 詳細なわりに抽象度が高い仕様 ●  (ファイルシステム自体の抽象度が高いので  必然的にこうなった)
  • 22. PHPよるサーバ実装 対応するメソッドを実装するだけで良い require_once 'HTTP/WebDAV/Server.php'; class HTTP_WebDAV_Server_Photozou extends HTTP_WebDAV_Server { function GET(&$options) { $options['mimetype'] = 'image/jpeg'; $options['mtime'] = xxxxxx; $options['stream'] = fopen($options['path'], 'r'); return true; } function PROPFIND(&$options, &$files) { (略) } } $server = new HTTP_WebDAV_Server_Photozou(); $server->ServeRequest();
  • 23. Javascriptによるクライアント実装 XHR(Xml Http Request)でWebDAVの拡張メソッドを呼ぶことが出来る var XHR = function() { return window.XMLHttpRequest ? new XMLHttpRequest() : new ActiveXObject("Microsoft.XMLHTTP"); } XHR.open('PROPFIND', 'http://foo.com/pathto, true); headers = headers || {}; headers['Depth'] = headers['Depth']>1 ? 1 : headers['Depth']; headers['Content-Type'] = headers['Content-Type'] || 'text/xml'; for (h in headers) { XHR.setRequestHeader(h, headers[h]); } XHR.send('<?xml version="1.0" ?><propfind xmlns="DAV:"><allprop/></propfind>');
  • 24. 認証 RESTなので既存の様々な認証方法が使えます。 Basic認証 ● PROPFIND /pathto HTTP/1.1 Depth: 1 Authorization: Basic a28tYWdhdGE6dGFrYXNha2k= Digest認証 ● PROPFIND /pathto HTTP/1.1 Depth: 1 WWW-Authenticate: Digest realm="Secret Zone", nonce="RMH1usDrAwA=6dc290ea3304de42a7347e0a94089ff5912c e0de", algorithm=MD5, qop="auth"
  • 25. 認証(2) WSSE認証 ● PROPFIND /pathto HTTP/1.1 Depth: 1 X-WSSE: UsernameToken Username="komagata", PasswordDigest="ZCNaK2jrXr4+zsCaYK/YLUxImZU=", Nonce="Uh95NQlviNpJQR1MmML+zq6pFxE=", Created="2005-01- 18T03:20:15Z"
  • 26. WebDAV API応用例 JavaScriptの画像ブラウザ ● フォト蔵をWindowsにマウント ● JS画像ブラウザ at フォト蔵 ● Flashの画像ブラウザ ●