Upgrade to Pro
— share decks privately, control downloads, hide ads and more …
Speaker Deck
Features
Speaker Deck
PRO
Sign in
Sign up for free
Search
Search
Hypermedia APIs with Webmachine and ROAR
Search
Larry Staton Jr.
November 15, 2012
Technology
2
470
Hypermedia APIs with Webmachine and ROAR
Building hypermedia APIs with Webmachine and ROAR
Larry Staton Jr.
November 15, 2012
Tweet
Share
More Decks by Larry Staton Jr.
See All by Larry Staton Jr.
Object-Oriented Programming Basics with Smalltalk
statonjr
0
450
A Tale of Two Teams
statonjr
0
40
Hypermedia with Transit
statonjr
0
63
Hazel & Keyboard Maestro: A Perfect Mac Marriage
statonjr
1
680
Zooming Out
statonjr
0
50
HTTP 101
statonjr
1
220
PUT /time
statonjr
1
66
Other Decks in Technology
See All in Technology
On Your Data を超えていく!
hirotomotaguchi
2
620
Oracle Cloud Infrastructure:2024年4月度サービス・アップデート
oracle4engineer
PRO
1
170
SIEMを用いて、セキュリティログ分析の可視化と分析を実現し、PDCAサイクルを回してみた
coconala_engineer
0
270
KubeConにproposalを送りたい人へのアドバイス
sat
PRO
2
150
[PlatformCon 24] Platform Orchestrators: The Missing Middle of Internal Developer Platforms?
danielbryantuk
1
820
Next'24 事例セッションの紹介とクラウド資格を活用したキャリア形成について語りMuscle
yasumuusan
1
420
開発生産性向上サービスを作るFindyが自分たちで開発生産性を爆上げした組織づくりの歩み / Findy's path to boosting its own development productivity 2024-04-17
ma3tk
3
470
Java EE/Jakarta EEの現状と将来―クラウドネイティブ時代にJava EEは対応できるのか?―
takakiyo
1
120
2024/4/26 コンピュータ歴史博物館解説告知
toshi_atsumi
0
210
カオナビの利用実績をアウトカムへつなげる旅 / example-of-data-management-startup-in-kaonavi
kaonavi
0
130
DevOpsメトリクスとアウトカムの接続にトライ!開発プロセスを通して計測できるメトリクスの活用方法
ham0215
2
230
Google Cloud の AI を支える裏側のインフラを垣間見る!
maroon1st
0
320
Featured
See All Featured
The Success of Rails: Ensuring Growth for the Next 100 Years
eileencodes
30
6k
Helping Users Find Their Own Way: Creating Modern Search Experiences
danielanewman
19
1.9k
Optimizing for Happiness
mojombo
370
69k
Fireside Chat
paigeccino
20
2.6k
How to Create Impact in a Changing Tech Landscape [PerfNow 2023]
tammyeverts
13
1.5k
Design by the Numbers
sachag
274
18k
10 Git Anti Patterns You Should be Aware of
lemiorhan
647
58k
Building Effective Engineering Teams - LeadDev
addyosmani
28
1.8k
実際に使うSQLの書き方 徹底解説 / pgcon21j-tutorial
soudai
119
39k
What's in a price? How to price your products and services
michaelherold
237
11k
Debugging Ruby Performance
tmm1
70
11k
Statistics for Hackers
jakevdp
789
220k
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