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
how-to-find-restful-api
Search
MOROHASHI Kyosuke
August 19, 2015
Programming
31
14k
how-to-find-restful-api
MOROHASHI Kyosuke
August 19, 2015
Tweet
Share
More Decks by MOROHASHI Kyosuke
See All by MOROHASHI Kyosuke
Identifying User Idenity
moro
9
13k
Simplicity on Rails -- RDB, REST and Ruby
moro
14
17k
ちょうどよい Rails E2E テスト/enough-good-rails-e2e-test
moro
5
2.3k
フレームワークを作らない方法/How NOT to build frameworks
moro
4
1.1k
全体がいい感じになるために、私たちRailsをホームにするWeb技術者ができること/let-our-whole-system-grow
moro
2
1.9k
フォームオブジェクトとの向き合い方/Grow Form Objects up
moro
1
1.9k
チームによるいきいきとしたソフトウェア開発/an-alive-team-grows-software
moro
3
3.3k
Web-E2E-Testing-from-Ruby
moro
5
510
Joyful user foundation restructuring with Ruby
moro
9
19k
Other Decks in Programming
See All in Programming
Full stack testing :: basic to basic
up1
1
910
TypeScript でバックもやるって実際どう? 実運用で困ったこと3選
yuichiro_serita
17
7.7k
あれやってみてー駆動から成長を加速させる / areyattemite-driven
nashiusagi
1
180
KubeCon + CloudNativeCon NA 2024 Overviewat Kubernetes Meetup Tokyo #68 / amsy810_k8sjp68
masayaaoyama
0
200
イマのCSSでできる インタラクション最前線 + CSS最新情報
clockmaker
5
3.9k
Serverless苦闘史
mosh_inc
0
150
テスト自動化失敗から再挑戦しチームにオーナーシップを委譲した話/STAC2024 macho
ma_cho29
1
1k
React + Tauriでデスクトップアプリ開発に入門してみた
ynishimura0922
0
240
Testing Assembly: Code or Low Code - Navigating the Test Automation Options
maaretp
0
100
フロントエンドのディレクトリ構成どうしてる? Feature-Sliced Design 導入体験談
osakatechlab
8
3.9k
これが俺の”自分戦略” プロセスを楽しんでいこう! - Developers CAREER Boost 2024
niftycorp
PRO
0
150
N.E.X.T LEVEL
pluu
2
280
Featured
See All Featured
Build The Right Thing And Hit Your Dates
maggiecrowley
33
2.4k
The Straight Up "How To Draw Better" Workshop
denniskardys
232
140k
Building an army of robots
kneath
302
44k
Templates, Plugins, & Blocks: Oh My! Creating the theme that thinks of everything
marktimemedia
27
2.1k
ReactJS: Keep Simple. Everything can be a component!
pedronauck
665
120k
Imperfection Machines: The Place of Print at Facebook
scottboms
266
13k
Docker and Python
trallard
41
3.1k
Typedesign – Prime Four
hannesfritz
40
2.4k
Statistics for Hackers
jakevdp
796
220k
Designing Dashboards & Data Visualisations in Web Apps
destraynor
229
52k
Faster Mobile Websites
deanohume
305
30k
A Modern Web Designer's Workflow
chriscoyier
693
190k
Transcript
RESTful APIͷ Έ͚͔ͭͨ 2015-08-19 @moro
ॾڮګհ(@moro) Kyosuke MOROHASHI
None
άϥϯυϧʔϧ
3&45GVMͱ%# ͷςʔϒϧΛͦͷ· ·IUUQͰެ։͢Δ͜ ͱΛࢦ͢ͷͰͳ͍
‣ύεϫʔυݟͤͳ͍ɺͱ ͔ͦ͏͍͏Ͱͳ͍ ‣Ϟϊͷ߹ɺಉ͡Α͏ʹͳ Δ͜ͱଟ͍
‣ Web ΞϓϦέʔγϣϯ͕ఏڙ͢ΔػೳΛ ‣ Ϣʔβʹཱཻͭ(Ϧιʔε)Ͱ நԽ͠ ‣ ͦͷϦιʔεͷγϯϓϧͳૢ࡞(CRUD) Λߦ͏͜ͱͰ ‣
Ϣʔβͷ༻ΛຬͨͤΔΑ͏ʹ͢ΔΞʔΩ ςΫνϟύλʔϯ
‣Web ΞϓϦέʔγϣϯ͕ ఏڙ͢ΔػೳΛ ‣Ϣʔβʹཱཻͭ (Ϧιʔε)ͰநԽ
RESTful APIͷ Έ͚͔ͭͨ 2015-08-19 @moro
%#ͷ ϦιʔεΤϯςΟ ςΟى
‣ϞϊͷCRUD ‣ POST /articles ‣Ұ൪ Θ͔Γ͍͢ ‣Α͘αϯϓϧʹग़ͯ͘Δ
%#ͷ ΠϕϯτΤϯ ςΟςΟى
‣ؔੑͷCRUD ‣ POST /groups/42/memberships ‣2൪Ί?ʹΘ͔Γ͍͢ ݸਓతʹ͖
‣ʙ͢Δ/ͨ͜͠ͱ ‣DBςʔϒϧ͕͋ΔͷͰ Θ͔Γ͍͢ ‣has_many :through Ͱ ࢦఆ͢Δͭ
αϒϦιʔεͷ ૢ࡞
‣add_fooͨ͘͠ͳͬͨΒ ߟ͑Δ ‣POSTͷ͜ͱ͕ଟ͍ ‣ϦιʔεͷURIܾ·ΔͳΒ PUT ͋Γ
# よくやっちゃう。こうしたくなったら POST /articles/42/add_comment # サブリソースへ落とせる POST /articles/42/comments #
config/routes resources :articles do resources :comments end
‣verb+object ͳΞΫγϣϯ ͍͍ͩͨαϒϦιʔε ‣ͪΖΜࢀরͳΒGET
αϒίϨΫγϣ ϯͷૢ࡞
‣ಛఆͷςʔϚͰ·ͱΊͨϦ ιʔεͷू߹ ‣indexͰ݅ذΛؤுΓ ա͗ͨΒ
# あと4つくらいパラメータが増える GET /articles?filter=favorited&limit=3 # これは典型的なまとまりに名前をつけるとよい GET /articles/hot
‣ΞΫγϣϯ͕͔ΕΔͷͰ ͖ͬ͢Γ͢Δ
͏Μͪ͘: routing ηϨΫλϒϧσΟ εύονͳΘ͚ͰɺΑ͏͢ΔʹͦΕ ࣗମذͷҰछɻ ͦΕΛҰͭॲʹ·ͱΊ্ͨͰ͏Ұ ճࣗͰذΛॻ͖͢ɺΈ͍ͨͳ ͜ͱΛ͢Δͷෆໟɻ
ϝϯόϦιʔε ͷૢ࡞
‣ ಛఆͷ(ൺֱతେࣄͳ)ଐੑͷૢ࡞ɻ ‣ set_foo Έ͍ͨͳϧʔςΟϯάΛॻ ͖ͨ͘ͳͬͨΒίϨɻ ‣ POST PUT
ͷ͜ͱ͕ଟ͍ɻ
# 記事を下書きから公開にする例 # set_foo ではなく POST /articles/42/set_public # public ->
publication と名詞にした上で # それを「作成」する PUT /articles/42/publication # 非公開にするには「公開していること」を消す POST /articles/42/set_private DELETE /articles/42/publication
τϥϯβΫγϣϯ Ϧιʔε
‣ ʮେ͖Ίͷॲཧ͢Δ͜ͱʯΛ ද͢Ϧιʔε ‣ ಛʹɺෳͷσʔλΛ·ͱΊ ͯѻ͏Α͏ͳ߹ʹ͏
‣ ࡞Δ͚ͩͰͳ͘ɺ࣮ߦ݁Ռ ֬ೝ·ͰؚΉɺॲཧશମΛϦ ιʔεͱͯ͠நԽ͢Δ ‣ ࣮తʹɺॲཧͷ࣮ମඇ ಉظJob ʹྲྀ͢͜ͱ͋Δ
=begin 実際の例: とある条件で、たくさんのデータをエクスポート する必要あり。 まずはエクスポート条件を指定する画面 (ユーザナビゲーション用のリソースが必要) =end # ここでは条件指定フォームを表示 GET
/foo_exports/new # 指定した条件でエクスポート処理リソース作成。 # 処理の本体はActiveJobとかに POST /foo_exports
# ジョブを作ったら詳細にリダイレクト # ジョブの進捗を出せる範囲で出しておく GET /foo_exports/42 # しばらく待ってリロードすると(※)終わる。 # 結果やログへのナビゲーションをつけておく
GET /foo_exports/42/data.csv GET /foo_exports/42/log.txt // ※ もちろんもっといまふうなWebSocketとかでもOK
αϒϦιʔεͷ ΠϯϥΠϯԽ
‣ ؔ࿈͍ͯ͠ΔϦιʔεJSON ͳͲͰωετ͢Δɻ ‣ ωετ͠ͳ͍߹ͷࢀর URLͰɻ ‣ id ͚ͩͰΈཱͯආ͚Δɻ
{article: { id: 42, tiltle: 'RESTful API ͷΈ͚͔ͭͨ', url: ‘http://speaekrdeck.com/moro/...',
comments: [ {id: 1, body: '͍͢͝'}, {id: 2, body: 'ײಈͨ͠'}, ] }}
"3FTਓྨʹ ૣ͗͢Δ
ɺࠓ͠·ͤΜ
σβΠϯͷ ώϯτ
‣ Railsͷ`resources`͕࡞Δͯ͢ͷΞΫ γϣϯΛ࣋ͭඞཁͳ͍ɻ ‣ ͋ͷαϒηοτͱͯ͠ɺϦιʔεΛૢ࡞ ͭͭ͠ɺϦϯΫϑΥʔϜΛͬͯΞ ϓϦέʔγϣϯΛ࡞Δ͜ͱ͕େࣄɻ
Α͋͘Δ φϏήʔγϣϯྫ
‣ Ұཡը໘ͷԼ෦ʹՃϑΥʔϜ͕͋Δ (`new` ͕ͳ͍) ‣ ফͤͳ͍ͷͰ delete ͕ͳ͍ ‣ मਖ਼Ͱ͖ͳ͍ͷͰ
edit / update ͕ͳ͍ɻ
‣ ৄࡉը໘ͷதͰɺ͡Ί͔ΒςΩετ ϑΟʔϧυʹ͕ॻ͍ͯ͋Δ ‣ or JSͰϑΥʔϜΛ࡞ͬͨΓ͢ΔͷͰ͢ ͙ʹߋ৽Ͱ͖Δ(edit ͕ͳ͍) ‣ Ϧιʔεͷৄࡉը໘ʹࢠϦιʔε͕ද
ࣔ͞ΕΔɻ(index show ͳ͍)
ಠࣗݚڀ
ෳ߹Ϧιʔε ଟछϙʔλϧ
‣Q: RESTfulAPIͰʮϙʔλ ϧϖʔδʯΛͲ͏࡞Δ͔ ‣ ͍ΖΜͳͷΛऔΓʹߦ͘ͱϦΫ Τετ૿͑͗ͯͭ͢Β͍
‣ ৽ணΤϯτϦ10݅ ‣ ਓؾΤϯτϦ10݅ ‣ ͓Βͤ 3݅ ‣ χϡʔε 5݅
…
‣A: ϙʔλϧͱ͍͏ ϦιʔεΛఆٛ͢Εྑ͍ ͷͰ?
͓͞Β͍
3&45GVMͱ%# ͷςʔϒϧΛͦͷ· ·IUUQͰެ։͢Δ͜ ͱΛࢦ͢ͷͰͳ͍
‣ Web ΞϓϦέʔγϣϯ͕ఏڙ͢ΔػೳΛ ‣ Ϣʔβʹཱཻͭ(Ϧιʔε)Ͱ நԽ͠ ‣ ͦͷϦιʔεͷγϯϓϧͳૢ࡞(CRUD) Λߦ͏͜ͱͰ ‣
Ϣʔβͷ༻ΛຬͨͤΔΑ͏ʹ͢ΔΞʔΩ ςΫνϟύλʔϯ
ͦΕͰ͚ͬ͜͏ ΞϓϦ͕ग़དྷΔͷͩ