gihyo.jp » DEVELOPER STAGE » 特集 » Web APIの次世代標準プロトコル「Atom Publishing Protocol」 » 第3回 リソースの操作を追う

Web APIの次世代標準プロトコル「Atom Publishing Protocol」

第3回 リソースの操作を追う

おさらい

前回の最後にサービス文書についてご紹介しました。このサービス文書はコレクション及びメンバリソースを操作する上で最初の手がかりとなるものです。サービス文書内においては,collection要素で,どういったコレクションがあるのか,またそのURIは何か,が記述されていました。

では前回のサービス文書の例をもとに,リソースの操作を追っていきましょう。

フィードの取得とページング

サービス文書内で規定されているコレクションのURIは,<http://example.org/blog/main>でした。これにGETメソッドを適用するとフィード文書が得られます(以下,HTTPヘッダはリクエスト,レスポンス共に一部主要部分のみ掲載をします)。

フィード取得のためのリクエスト例

GET /blog/main HTTP/1.1
Host: example.org

するとサーバから以下のようなレスポンスが返ってきます。

フィード取得のレスポンス例

HTTP/1.1 200 Ok
Date: Fri, 8 Oct 2006 17:17:11 GMT

<feed xmlns="http://www.w3.org/2005/Atom" xmlns:app="http://www.w3.org/2007/app">
  <title>asakuraの記事一覧</title>
  <generator>feed generator version 1.0</generator>
  <icon>http://example.org/img/icon/feed.jpg</icon>
  <id>http://example.org/blog/main/1</id>
  <link rel="self" type="application/atom+xml" href="http://example.org/blog/main/1"/>
  <updated>2007-11-30T00:00:00+09:00</updated>
  <link rel="first" href="http://example.org/blog/main/1"/>
  <link rel="next"  href="http://example.org/blog/main/2"/>
  <link rel="last"  href="http://example.org/blog/main/25"/>
  <entry>
    <title>紅葉</title>
    <id>http://example.org/blog/main/article/20382</id>
    <published>2007-11-14T15:12:55+09:00</published>
    <updated>2007-11-30T00:00:00+09:00</updated>
    <app:edited>2007-11-30T00:00:00+09:00</app:edited>
    <summary>今日は紅葉を見に行きました。</summary>
    <link rel="alternate" type="text/html" href="http://example.org/blog/main/article/20382"/>
    <link rel="enclosure" type="image/png" href="http://example.org/img/fall.jpg"/>
    <link rel="edit" href="http://example.org/blog/main/1"/>
    <author>
      <name>asakura</name>
    </author>
  </entry>
  ... 同じようにエントリがあと29個続きますが割愛します ...
</feed>

ずらずらっと複数のエントリが入ったフィードが返されてきます。このときコレクションに入っているメンバリソースが少ない場合は良いのですが,多くの場合100件,200件,いやもっと多くのメンバリソースがコレクションの中に入っているかもしれません。このような場合,一度にフィードで返してしまうとサーバもクライアントも処理が大変です。このためページングの仕組みが用意されています。フィードに記述されるエントリは,サーバ側が決めたある件数以上については次のページに繰り越されます。このため次ページ,前ページ,最初のページ,最後のページを取得するためのURIが取得したフィードの中にatom:link要素として記述されています。atom:link要素はhref属性としてURIを持っています。そのURIがどのような意味を持つのかについては,rel属性にかかれています。表1にその対応をまとめてみました。

表1 ページング機能を表現するatom:link要素の一覧

rel属性の値意味
next次ページのフィード取得URIを示す
prev前ページのフィード取得URIを示す
first最初のページのフィード取得URIを示す
last最後のページのフィード取得URIを示す

app:editedとフィードにおけるエントリの順序

フィードに含まれるエントリの中には,app:editedという要素が入っているかもしれません。これは,最終更新日時を示すものです。atom:updatedも似たような要素ですが,重要な変更が行われた日時を指すもので,必ずしも全ての更新が対象ではありません。また,app:editedの値はHTTPヘッダにあるLast-Modifiedヘッダの値と同じとは限りません。

フィードの中に出てくるエントリの順番は大抵このapp:edited要素の時刻で最新のものからならんでいます。しかし実装によってはそうなっていない場合もあるので注意が必要です。

リソースの取得

では次にリソースを取得してみましょう。フィードに記載されているエントリが完全なリソースの表現であることは保障されていません。もしかしたら概要として表現されており,必須ではない要素が一部省略されているかもしれません。

取得したフィードの中から一番最初のエントリを取得してみます。

エントリ取得のためのリクエスト例

GET /blog/main/1 HTTP/1.1
Host: example.org

サーバからは指定されたエントリを取得することができます。

エントリ取得のレスポンス例

HTTP/1.1 200 Ok
Date: 

<entry xmlns="http://www.w3.org/2005/Atom" xmlns:app="http://www.w3.org/2007/app">
  <title>紅葉</title>
  <id>http://example.org/blog/main/article/20382</id>
  <published>2007-11-14T15:12:55+09:00</published>
  <updated>2007-11-30T00:00:00+09:00</updated>
  <app:edited>2007-11-30T00:00:00+09:00</app:edited>
  <content>今日は紅葉を見に行きました。もうこんな季節なんですね。でも例年よりも全然遅いそうです。</content>
  <link rel="alternate" type="text/html" href="http://example.org/blog/main/article/20382"/>
  <link rel="enclosure" type="image/png" href="http://example.org/img/fall.jpg"/>
  <link rel="edit" href="http://example.org/blog/main/1"/>
  <author>
    <name>asakura</name>
  </author>
</entry>

それぞれの要素の内容については第2回で簡単にご紹介しましたので割愛させていただきます。

著者プロフィール

朝倉浩志(あさくらひろし)

NTTコミュニケーションズ 先端IPアーキテクチャセンタ リサーチエンジニア。上位層プロトコル及びWebテクノロジの技術開発に取り組む。

コメント

コメントの記入

パスサポ

多数の情報処理技術者試験対策書籍の発行実績を誇る技術評論社がお届けする,資格試験合格サイト「めざせ! 情報処理試験 パスサポ」が開設されました。

ピックアップ

サクセスストーリーに続く,快適サーバー運用管理のヒント!

データの増大,煩雑な管理,システムダウン,セキュリティなど,迫りくる課題からシステム管理者の負担を軽くするポイントを解説します。

gihyo.jp インフラエンジニア情報局

ネットワークやITにかかわるあらゆる業種で必要とされるインフラエンジニアに向けた技術情報や心構え,その魅力について多角的に紹介。

テストエンジニア ステーション

いま,ITに関わるあらゆる開発業務で注目されつつあるテスト系エンジニアをターゲットにしたコンテンツサイトを展開します。

一行クイックアンケート

gihyo.jpで取り上げてほしいネタは?

※検索はページ右上の検索ボックスをご利用ください。

その他の連載

2010年版SEO体得講座

本連載では,いまや企業サイトの戦略の1つとして欠かすことのできないSEOについて,最新トレンドからすぐに使えるTipsまでを紹介します。

小型Linuxサーバの最高峰 OpenBlockS 600活用指南

搭載メモリの増加,CPUクロックの向上など,あらゆる面が強化された期待の新モデルOpenBlockS 600。この記事ではOpenBlockS 600の紹介から,活用するためのさまざまなノウハウを紹介していきます。

はじめMath! Javaでコンピュータ数学

プログラミング言語入門者向けに,知っていると役立つ数学的トピックスを紹介します。簡単な演習問題と解説で,即活用できる知識を目指します。

教科書には載っていない ネットワークエンジニアの実践技術

ネットワークエンジニア,インフラエンジニアのトラブル対応には,時には「教科書通りにいかない」テクニックが必要となります。資格試験では得られないこうした実践的な技術について,実例を元に紹介します。

Googleケータイ,世に現る

2008年9月,Googleが中心となって開発されている「Android」を採用した携帯電話「T-Mobile G1」が発表されました。本連載ではT-Mobile G1を中心にGoogleケータイに迫ります。

モバゲーオープンプラットフォームに挑戦!――面白法人カヤック流モバゲーオープンプラットフォーム企画と開発のイロハ

2010年1月にリリースとなったモバゲーオープンプラットフォーム。その制作企業であるカヤックが,アイデアを企画に落とし込み,開発までのノウハウを紹介します。

プロトタイピングツールSketchFlowを用いた,Silverlightアプリ開発

SketchFlowプロトタイプ作成からアプリケーション開発までをExpression Blend 3を使って実践的に解説します。

Ubuntu Weekly Recipe

Ubuntuの強力なデスクトップ機能を活用するための,いろいろなレシピをお届けします。

連載一覧

gihyo.jp

  • DEVELOPER STAGE
  • ADMINISTRATOR STAGE
  • WEB+DESIGN STAGE
  • LIFESTYLE STAGE
  • SCIENCE STAGE
  • NEWS & REPORT

書籍案内

  • 新刊書籍
  • 書籍ジャンル一覧
  • 書籍シリーズ一覧
  • 新刊ピックアップ
  • ロングセラー
  • 電脳会議

定期刊行物一覧

  • Software Design
  • WEB+DB PRESS
  • Web Site Expert
  • 組込みプレス

最近のコメント