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
10
18k
Simplicity on Rails -- RDB, REST and Ruby
moro
15
18k
ちょうどよい Rails E2E テスト/enough-good-rails-e2e-test
moro
5
2.5k
フレームワークを作らない方法/How NOT to build frameworks
moro
4
1.2k
全体がいい感じになるために、私たちRailsをホームにするWeb技術者ができること/let-our-whole-system-grow
moro
2
1.9k
フォームオブジェクトとの向き合い方/Grow Form Objects up
moro
1
2k
チームによるいきいきとしたソフトウェア開発/an-alive-team-grows-software
moro
3
3.4k
Web-E2E-Testing-from-Ruby
moro
5
560
Joyful user foundation restructuring with Ruby
moro
9
19k
Other Decks in Programming
See All in Programming
レベル1の開発生産性向上に取り組む − 日々の作業の効率化・自動化を通じた改善活動
kesoji
0
270
ISUCON研修おかわり会 講義スライド
arfes0e2b3c
1
460
フロントエンドのパフォーマンスチューニング
koukimiura
5
1.8k
効率的な開発手段として VRTを活用する
ishkawa
0
150
Node-RED を(HTTP で)つなげる MCP サーバーを作ってみた
highu
0
120
AIプログラマーDevinは PHPerの夢を見るか?
shinyasaita
1
240
ふつうの技術スタックでアート作品を作ってみる
akira888
1
1.1k
チームで開発し事業を加速するための"良い"設計の考え方 @ サポーターズCoLab 2025-07-08
agatan
1
450
おやつのお供はお決まりですか?@WWDC25 Recap -Japan-\(region).swift
shingangan
0
140
オンコール⼊⾨〜ページャーが鳴る前に、あなたが備えられること〜 / Before The Pager Rings
yktakaha4
1
770
#kanrk08 / 公開版 PicoRubyとマイコンでの自作トレーニング計測装置を用いたワークアウトの理想と現実
bash0c7
1
900
The Modern View Layer Rails Deserves: A Vision For 2025 And Beyond @ RailsConf 2025, Philadelphia, PA
marcoroth
2
670
Featured
See All Featured
The Success of Rails: Ensuring Growth for the Next 100 Years
eileencodes
45
7.5k
How GitHub (no longer) Works
holman
314
140k
Stop Working from a Prison Cell
hatefulcrawdad
271
21k
Building Adaptive Systems
keathley
43
2.7k
Optimising Largest Contentful Paint
csswizardry
37
3.3k
Code Review Best Practice
trishagee
69
19k
Building Flexible Design Systems
yeseniaperezcruz
328
39k
RailsConf & Balkan Ruby 2019: The Past, Present, and Future of Rails at GitHub
eileencodes
138
34k
10 Git Anti Patterns You Should be Aware of
lemiorhan
PRO
656
60k
A better future with KSS
kneath
238
17k
Typedesign – Prime Four
hannesfritz
42
2.7k
Designing for Performance
lara
610
69k
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) Λߦ͏͜ͱͰ ‣
Ϣʔβͷ༻ΛຬͨͤΔΑ͏ʹ͢ΔΞʔΩ ςΫνϟύλʔϯ
ͦΕͰ͚ͬ͜͏ ΞϓϦ͕ग़དྷΔͷͩ