Upgrade to Pro
— share decks privately, control downloads, hide ads and more …
Speaker Deck
Sign up for free
Menu
Search
Features
All features
Private URLs
Password Protection
Custom URLS
Scheduled publishing
Remove Branding
Restrict embedding
Deck Collections
Notes
Features
All features
Private URLs
Password Protection
Custom URLS
Scheduled publishing
Remove Branding
Restrict embedding
Deck Collections
Notes
Explore
Featured decks
Featured speakers
Programming
Technology
Storyboards
Explore
Featured decks
Featured speakers
Programming
Technology
Storyboards
Pricing
Search
Sign in
Sign up for free
Hypermedia APIs with Webmachine and ROAR
Search
Sponsored
·
SiteGround - Reliable hosting with speed, security, and support you can count on.
→
Larry Staton Jr.
November 15, 2012
Technology
550
2
Share
Embed
Copy iframe code
Copy JS code
Copy link
Start on current slide
Hypermedia APIs with Webmachine and ROAR
Building hypermedia APIs with Webmachine and ROAR
Larry Staton Jr.
November 15, 2012
More Decks by Larry Staton Jr.
See All by Larry Staton Jr.
Object-Oriented Programming Basics with Smalltalk
statonjr
0
580
A Tale of Two Teams
statonjr
0
69
Hypermedia with Transit
statonjr
0
97
Hazel & Keyboard Maestro: A Perfect Mac Marriage
statonjr
1
700
Zooming Out
statonjr
0
79
HTTP 101
statonjr
1
300
PUT /time
statonjr
1
89
Other Decks in Technology
See All in Technology
EventBridge に「合流」はない ― サーバーレスのワークフローを育てるということ / No Join in EventBridge
yusukeshimizu
2
510
2026-09-08 そのJavaモダナイゼーション、AIに丸投げで大丈夫?IBM Bobで変わる品質と効率
yutanonaka
1
170
人間はどの意思決定を手放せるのか
kawasima
15
8.1k
SREへの勘違いに気づいた後の話
tomodakengo
0
150
顧客に向き合う開発組織へ。リアーキテクチャとフィーチャーチーム化で挑む組織改革
safie
0
2.4k
2026-09-18 gotanda.sre Terraformで複数環境作ったり、複数Stateに分割したりそれとTerragrunt / Terraform multi envs and multi states
masasuzu
4
710
ADKで始める業務改善 - AIエージェント開発時の考えと設計
harappa80
2
280
LLMに渡さなかった仕事
nanaism
0
1.4k
【ゲームメーカーズスクランブル2026】『Shadowverse: Worlds Beyond』UIとアニメーションで実現する最高のユーザー体験を叶えるプロトタイピング
cygames
PRO
0
320
Claude Codeを「使うほど育つ」AI秘書にするノウハウ
minorun365
PRO
33
31k
アクセスキーこわい やめかたと漏らさない工夫
sassssan68
1
700
Azure Serverless 2026:Production-ready な AI エージェント基盤 / Azure Serverless 2026: Production-Ready AI Agent Platform
miyake
2
570
Featured
See All Featured
Tell your own story through comics
letsgokoyo
1
1.1k
Being A Developer After 40
akosma
91
590k
How GitHub (no longer) Works
holman
316
150k
Odyssey Design
rkendrick25
PRO
2
810
Chasing Engaging Ingredients in Design
codingconduct
0
330
SEOcharity - Dark patterns in SEO and UX: How to avoid them and build a more ethical web
sarafernandez
0
290
Beyond borders and beyond the search box: How to win the global "messy middle" with AI-driven SEO
davidcarrasco
3
260
Introduction to Domain-Driven Design and Collaborative software design
baasie
1
1k
Unsuck your backbone
ammeep
672
58k
The Impact of AI in SEO - AI Overviews June 2024 Edition
aleyda
6
1.2k
Building AI with AI
inesmontani
PRO
1
1.2k
Intergalactic Javascript Robots from Outer Space
tanoku
273
27k
Transcript
Hypermedia APIs Hypermedia APIs Webmachine & ROAR 1 Larry Staton
Jr. : @statonjr 1 Wednesday, 14 November 12
Hypermedia APIs Assumptions 2 2 Wednesday, 14 November 12
Hypermedia APIs REST 3 3 Wednesday, 14 November 12
Hypermedia APIs 4 Constraint Promotes Tradeoff client-server UI Portability Simplified
server stateless Scalability Reliability Efficiency non-shared caching Reduced latency Efficiency Scalability Reliability uniform interface Independent Evolution Decoupled implementation Efficiency layered system Scalability Simplified clients Higher Latency code-on-demand Extensibility Simplified clients Visibility 4 Wednesday, 14 November 12
Hypermedia APIs 5 Uniform Interface 5 Wednesday, 14 November 12
Hypermedia APIs HTTP 6 6 Wednesday, 14 November 12
Hypermedia APIs 7 Constraint Promotes Tradeoff client-server UI Portability Simplified
server stateless Scalability Reliability Efficiency non-shared caching Reduced latency Efficiency Scalability Reliability uniform interface Independent Evolution Decoupled implementation Efficiency layered system Scalability Simplified clients Higher Latency code-on-demand Extensibility Simplified clients Visibility 7 Wednesday, 14 November 12
Hypermedia APIs “REST APIs must be hypertext-driven” 8 — Fielding,
2009! 8 Wednesday, 14 November 12
Hypermedia APIs 9 Richardson Maturity Model 9 Wednesday, 14 November
12
Hypermedia APIs Hypermedia 10 10 Wednesday, 14 November 12
Hypermedia APIs Media Types 11 11 Wednesday, 14 November 12
Hypermedia APIs 12 Media Type Hypermedia? text/html application/atom+xml application/json application/hal+json
12 Wednesday, 14 November 12
Hypermedia APIs HTTP 13 13 Wednesday, 14 November 12
Hypermedia APIs 14 14 Wednesday, 14 November 12
Hypermedia APIs Webmachine 15 15 Wednesday, 14 November 12
Hypermedia APIs Resources 16 16 Wednesday, 14 November 12
Hypermedia APIs 17 class HomeResource < Webmachine::Resource def allowed_methods %W[GET]
end def expires Time.now + 2.weeks end def languages_provided [“en-us”] end end 17 Wednesday, 14 November 12
Hypermedia APIs 18 allow_missing_post? allowed_methods base_uri charsets_provided content_types_accepted content_types_provided create_path
delete_completed? delete_resource encodings_provided expires finish_request forbidden generate_etag is_authorized? is_conflict? known_content_type? known_methods language_chosen languages_provided last_modified malformed_request? moved_permanently? moved_temporarily? multiple_choices? options post_is_create? previously_existed? process_post resource_exists? service_available? uri_too_long? valid_content_headers? valid_entity_length? validate_content_checksum variances Callbacks 18 Wednesday, 14 November 12
Hypermedia APIs 19 Webmachine::Application.new do |app| app.routes do add [],
HomeResource end end 19 Wednesday, 14 November 12
Hypermedia APIs Representation 20 20 Wednesday, 14 November 12
Hypermedia APIs HTML 21 21 Wednesday, 14 November 12
Hypermedia APIs 22 <!DOCTYPE html> <html lang=”en”> <body> <a href=”...”
rel=”../vehicles”>Vehicles</a> </body> </html> Example HTML Representation 22 Wednesday, 14 November 12
Hypermedia APIs 23 class HomeResource < Webmachine::Resource … def content_types_provided
[[‘text/html’, :to_html]] end def to_html template = Slim::Template.new(“home_representer.slim”) template.render end end 23 Wednesday, 14 November 12
Hypermedia APIs HAL+JSON 24 24 Wednesday, 14 November 12
Hypermedia APIs 25 { “_links”: { “self”: { “href”: “.../api”
}, “vehicles”: { “href”: “.../vehicles” } } } Example HAL+JSON Representation 25 Wednesday, 14 November 12
Hypermedia APIs ROAR 26 26 Wednesday, 14 November 12
Hypermedia APIs 27 module HomeRepresenter include Roar::Representer::JSON include Roar::Representer::JSON::HAL include
Roar::Representer::Feature::Hypermedia link :self do "/api" end link :vehicles do ".../vehicles" end end 27 Wednesday, 14 November 12
Hypermedia APIs 28 class HomeResource < Webmachine::Resource … def content_types_provided
[[‘application/hal+json’, :to_hal]] end def to_hal home = Object.new.extend(HomeRepresenter) home.to_json end end 28 Wednesday, 14 November 12
Hypermedia APIs Next Steps 29 29 Wednesday, 14 November 12
Hypermedia APIs Conclusion 30 30 Wednesday, 14 November 12
Hypermedia APIs Questions? 31 31 Wednesday, 14 November 12
Hypermedia APIs Additional Resources 32 seancribbs/webmachine-ruby apotonick/roar Jon Moore’s 2010
Oredev talk Steve Klabnik: “Designing Hypermedia APIs” Mike Amundsen: “Building Hypermedia APIs” Webber/Robinson: “REST in Practice” RESTFest 32 Wednesday, 14 November 12