58
REST 信者から見た Ruby on Rails 2.0 山本陽平 YAMAMOTO Yohei

Rubykaigi2008: REST 信者から見た Ruby と Rails

Embed Size (px)

Citation preview

Page 1: Rubykaigi2008: REST 信者から見た Ruby と Rails

REST 信者から見たRuby on Rails 2.0

山本陽平

YAMAMOTO Yohei

Page 2: Rubykaigi2008: REST 信者から見た Ruby と Rails

REST 信者から見たRuby on Rails 2.1

山本陽平

YAMAMOTO Yohei

Page 3: Rubykaigi2008: REST 信者から見た Ruby と Rails
Page 4: Rubykaigi2008: REST 信者から見た Ruby と Rails

REST 信者から見たRuby and Rails

山本陽平

YAMAMOTO Yohei

Page 5: Rubykaigi2008: REST 信者から見た Ruby と Rails

自己紹介Who am I

• ソフトウェアエンジニア– Software Engineer

• XML 野郎– XML guy

• REST 信者– RESTian

• ルビー初心者– JavaからRubyへ– Ruby beginner

– from Java to Ruby

Page 6: Rubykaigi2008: REST 信者から見た Ruby と Rails

自慢I’m very proud for…

Page 7: Rubykaigi2008: REST 信者から見た Ruby と Rails

Ruby スポン

サーな会社で働いています

I’m working in Ruby

sponsor company

Page 8: Rubykaigi2008: REST 信者から見た Ruby と Rails

今日の話題

Today’s theme is…

Page 9: Rubykaigi2008: REST 信者から見た Ruby と Rails

REST と Ruby とRails について

About REST and Ruby and Rails

Page 10: Rubykaigi2008: REST 信者から見た Ruby と Rails

まずは…

First…

Page 11: Rubykaigi2008: REST 信者から見た Ruby と Rails

REST と Ruby について

About REST and Ruby

Page 12: Rubykaigi2008: REST 信者から見た Ruby と Rails

REST と Ruby は仲良し

REST and Ruby are good friends

Page 13: Rubykaigi2008: REST 信者から見た Ruby と Rails

ruby-dev におけるRESTの議論

REST discussion in ruby-dev

Page 14: Rubykaigi2008: REST 信者から見た Ruby と Rails
Page 15: Rubykaigi2008: REST 信者から見た Ruby と Rails
Page 16: Rubykaigi2008: REST 信者から見た Ruby と Rails

REST と Ruby は仲良し

REST and Ruby are good friends

Page 17: Rubykaigi2008: REST 信者から見た Ruby と Rails

REST と Rails も仲良し

REST and Ruby are also friends

Page 18: Rubykaigi2008: REST 信者から見た Ruby と Rails
Page 19: Rubykaigi2008: REST 信者から見た Ruby と Rails
Page 20: Rubykaigi2008: REST 信者から見た Ruby と Rails
Page 21: Rubykaigi2008: REST 信者から見た Ruby と Rails
Page 22: Rubykaigi2008: REST 信者から見た Ruby と Rails

REST と Rails は仲良し

REST and Rails are good friends

Page 23: Rubykaigi2008: REST 信者から見た Ruby と Rails

REST

Representational State Transfer

Page 24: Rubykaigi2008: REST 信者から見た Ruby と Rails

REST

• Web のアーキテクチャスタイル

– Web Architectural style

• 制約の集合

– Set of constrains

– ULCODC$SS

Page 25: Rubykaigi2008: REST 信者から見た Ruby と Rails

抽象化レベルAbstraction Level

• Implementaion

– Apache, Rails, Firefox, bot

• Architecture

– User Agent, Server, HTTP, URI, HTML

• Architectural Style

– Constrains, Styles

Page 26: Rubykaigi2008: REST 信者から見た Ruby と Rails

リソース指向アーキテクチャ

Resource Oriented Architecture

Page 27: Rubykaigi2008: REST 信者から見た Ruby と Rails

ROA の四つの構成要素Four features of the ROA

• (A) アドレス可能性– Addressability

• (S) ステートレス性– Statelessness

• (C) 接続性– Connectedness

• (U) 統一インターフェース– A Uniform Interface

Page 28: Rubykaigi2008: REST 信者から見た Ruby と Rails

A > C > U >>>>>>>>>S

アドレス可能性>接続性>統一インターフェース>>>>>>>>>>ステートレス性

Addressability > Connectedness > A Uniform Interface>>>>>>>>> Statelessness

Page 29: Rubykaigi2008: REST 信者から見た Ruby と Rails

ROA の四つの構成要素Four features of the ROA

• (A) アドレス可能性– Addressability

• (S) ステートレス性– Statelessness

• (C) 接続性– Connectedness

• (U) 統一インターフェース– A Uniform Interface

Page 30: Rubykaigi2008: REST 信者から見た Ruby と Rails

アドレス可能性

Addressability

Page 31: Rubykaigi2008: REST 信者から見た Ruby と Rails

アプリケーションがそのデータセットの重要な部分をリソースとして公開する場合、そのアプリケーションはアドレス可能である。

An application is

addressable if it exposes

the interesting aspects of

the data set as resources.

Page 32: Rubykaigi2008: REST 信者から見た Ruby と Rails

リソースは URI を通じて提供される

ため、アドレス可能なアプリケーションは提供可能な情報ごとにURI を公開する。

Since resources are exposed

through URIs, an addressable

application exposes a URI for

every piece of information it

might conceivably serve.

Page 33: Rubykaigi2008: REST 信者から見た Ruby と Rails

リソース/URI 駆動開発

Resource/URI driven development

Page 34: Rubykaigi2008: REST 信者から見た Ruby と Rails

URI の設計↓

URI の実装

Design URI → Implement URI

Page 35: Rubykaigi2008: REST 信者から見た Ruby と Rails

URIの設計

URI design

Page 36: Rubykaigi2008: REST 信者から見た Ruby と Rails

Blog entries list resource

/entries

(GET/POST)

Blog entry resource

/entries/{entry_id}

(GET/PUT/DELETE)

Page 37: Rubykaigi2008: REST 信者から見た Ruby と Rails

URIの実装

URI implementation

Page 38: Rubykaigi2008: REST 信者から見た Ruby と Rails

map.resources :entries

Page 39: Rubykaigi2008: REST 信者から見た Ruby と Rails

シンプルだけど…

It’s simple, but…

Page 40: Rubykaigi2008: REST 信者から見た Ruby と Rails

Rails のルーティングは

素晴らしいが、コードの構造に依存しがち

Routing of Rails is good, but

code structure dependent

Page 41: Rubykaigi2008: REST 信者から見た Ruby と Rails

URIは設計目標であって実装結果ではない

URIs are design goal,

not implementation result

Page 42: Rubykaigi2008: REST 信者から見た Ruby と Rails

Restlet

router.attach(“/entries”,EntryListResource.class);

router.attach(“/entries/{id}”,EntryResource.class);

Django

urlpatterns = patterns((r’^entries/$’, entry_list),(r’^entries/([¥w-]+)/$’, entry_detail),

)

Page 43: Rubykaigi2008: REST 信者から見た Ruby と Rails

接続性Connectedness

Page 44: Rubykaigi2008: REST 信者から見た Ruby と Rails
Page 45: Rubykaigi2008: REST 信者から見た Ruby と Rails

現在のページ == アプリケーション状態

Current Page = Application State

Page 46: Rubykaigi2008: REST 信者から見た Ruby と Rails

ハイパーメディアを設計== アプリケーションを設計

Design hypermedia

== design application

Page 47: Rubykaigi2008: REST 信者から見た Ruby と Rails

ハイパーメディアを設計== リソースとリンクを設計

Design hypermedia

== design resources and links

Page 48: Rubykaigi2008: REST 信者から見た Ruby と Rails

リンクの設計

Link design

Page 49: Rubykaigi2008: REST 信者から見た Ruby と Rails
Page 50: Rubykaigi2008: REST 信者から見た Ruby と Rails

リンクの実装

Link implementation

Page 51: Rubykaigi2008: REST 信者から見た Ruby と Rails

url_for

link_to

Page 52: Rubykaigi2008: REST 信者から見た Ruby と Rails

シンプルだけど…

It’s simple, but…

Page 53: Rubykaigi2008: REST 信者から見た Ruby と Rails

リンクの意味を意識できればもっといい

Semantics of a link is important

Page 54: Rubykaigi2008: REST 信者から見た Ruby と Rails

続きは WEB+DB

PRESS Vol. 45 で

Page 55: Rubykaigi2008: REST 信者から見た Ruby と Rails

まとめ

Conclusion

Page 56: Rubykaigi2008: REST 信者から見た Ruby と Rails

実際のところ Rails

は RESTful である

Actually, Rails is RESTful

Page 57: Rubykaigi2008: REST 信者から見た Ruby と Rails

アドレス可能性と

接続性でよりよい設計を

A better design by

addressability and connectedness

Page 58: Rubykaigi2008: REST 信者から見た Ruby と Rails