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
WebAPI の設計
Search
ゆるゆる
December 04, 2021
Programming
0
87
WebAPI の設計
2021-12-04、2022-03-18の1DayインターンでLTした内容です
ゆるゆる
December 04, 2021
Tweet
Share
More Decks by ゆるゆる
See All by ゆるゆる
改行には気をつけよう
sunyryr
0
43
Docker bake(とCache)でCI/CDを改善する
sunyryr
0
550
OpenAPI×LaravelでAPI開発を格段に便利にする方法
sunyryr
0
1k
OpenAPIことはじめ
sunyryr
0
120
server side swift - codable
sunyryr
0
250
iOSアプリだけじゃないSwift
sunyryr
0
150
Other Decks in Programming
See All in Programming
Cloudflare Realtime と Workers でつくるサーバーレス WebRTC
nekoya3
0
400
コード書くの好きな人向けAIコーディング活用tips #orestudy
77web
3
300
ReadMoreTextView
fornewid
1
370
既存デザインを変更せずにタップ領域を広げる方法
tahia910
1
200
「ElixirでIoT!!」のこれまでとこれから
takasehideki
0
350
Enterprise Web App. Development (2): Version Control Tool Training Ver. 5.1
knakagawa
1
110
Passkeys for Java Developers
ynojima
3
850
F#で自在につくる静的ブログサイト - 関数型まつり2025
pizzacat83
0
290
Java on Azure で LangGraph!
kohei3110
0
120
A comprehensive view of refactoring
marabesi
0
300
関数型まつり2025登壇資料「関数プログラミングと再帰」
taisontsukada
2
800
try-catchを使わないエラーハンドリング!? PHPでResult型の考え方を取り入れてみよう
kajitack
3
510
Featured
See All Featured
Large-scale JavaScript Application Architecture
addyosmani
512
110k
How to Create Impact in a Changing Tech Landscape [PerfNow 2023]
tammyeverts
52
2.8k
"I'm Feeling Lucky" - Building Great Search Experiences for Today's Users (#IAC19)
danielanewman
228
22k
BBQ
matthewcrist
89
9.7k
Save Time (by Creating Custom Rails Generators)
garrettdimon
PRO
31
1.2k
Fashionably flexible responsive web design (full day workshop)
malarkey
407
66k
Rebuilding a faster, lazier Slack
samanthasiow
81
9k
A better future with KSS
kneath
239
17k
CSS Pre-Processors: Stylus, Less & Sass
bermonpainter
357
30k
The Cost Of JavaScript in 2023
addyosmani
50
8.3k
Easily Structure & Communicate Ideas using Wireframe
afnizarnur
194
16k
Become a Pro
speakerdeck
PRO
28
5.4k
Transcript
WebAPIͷઃܭ Yumemi 1DayΠϯλʔϯ 2022/03/18 @sun-yryr / גࣜձࣾΏΊΈ
ΏΔΏΔ / Taiyo Minagawa w גࣜձࣾΏΊΈ৽ଔೖࣾ w 4FSWFSTJEF&OHJOFFSͬͯ·͢ɻ ܦྺ ͖ͳ͜ͱ
w 4XJGU 4FSWFSTJEF $*$% w 75VCFS sun-yryr taittide taittide sunyryr
ࢀߟਤॻ λΠτϧ: Web API: The Good Parts ൃߦ: O'Reilly
Ձ֨: ཧຊ ¥2420 ిࢠຊ ¥1936
࣍ • ඒ͍͠WebAPI • URLઃܭͷϙΠϯτ • WebAPIઃܭͷํ • Q&A
ඒ͍͠WebAPI
WebAPI • API => Application Programming Interface • HTTPϓϩτίϧΛͬͯ֎෦ϦιʔεͷػೳΛݺͼग़͢ •
ؔͷΑ͏ͳͷ
“ඒ͍͠”ʁ • ୭ʹͱ͍͍ͬͯ͢͜ͱ • มߋ͍͢͜͠ͱ • ੬ऑੑʹରͯ͠ؤڧͰ͋Δ͜ͱ • ஏ͔ͣ͘͠ͳ͍͜ͱ
ඒ͍͠WebAPIΛ࡞ΔͨΊʹେͳ͜ͱ • RFCͳͲͷ༷͕͋Δ߹ͦΕʹै͏͜ͱ • ༷͕ͳ͍߹σϑΝΫτελϯμʔυʹै͏͜ͱ • ଞͷ༗໊APIΛࢀߟʹ͢Δ
URLઃܭͷϙΠϯτ
• ͍ • ਓ͕ؒಡΜͰཧղͰ͖Δ • খจࣈͷΈ • αʔόʔͷ࣮ʹґଘͯ͠ͳ͍ • ߏ͕౷Ұ͞Ε͍ͯΔ
• HTTPϝιου͕نఆʹԊ͍ͬͯΔ
• ͍ • ਓ͕ؒಡΜͰཧղͰ͖Δ • খจࣈͷΈ • αʔόʔͷ࣮ʹґଘͯ͠ͳ͍ • ߏ͕౷Ұ͞Ε͍ͯΔ
• HTTPϝιου͕نఆʹԊ͍ͬͯΔ
͍URL • ೖྗ͘͢͠ɺ͍֮͑͢ͷͰྑ͍ × http://api.example.com/api/v1/users/ " api͕υϝΠϯ෦ͱύε෦Ͱඃ͍ͬͯΔ ◦ http://api.example.com/v1/users/
• ͍ • ਓ͕ؒಡΜͰཧղͰ͖Δ • খจࣈͷΈ • αʔόʔͷ࣮ʹґଘͯ͠ͳ͍ • ߏ͕౷Ұ͞Ε͍ͯΔ
• HTTPϝιου͕نఆʹԊ͍ͬͯΔ
ਓ͕ؒཧղͰ͖ΔURL • ਪଌ͍͢͠ɺԿ͕ى͜Δ͔͔Γ͍͢ • ຊޠͳͲΤϯίʔυ͞Εͯ͠·͍͔ΓͮΒ͘ͳΔͨΊɺ ආ͚ͨํ͕ྑ͍ × http://api.example.com/u/d/ "
udҙຯ͕Θ͔Βͳ͍ɻ͚Ε͍΄Ͳྑ͍Θ͚Ͱͳ͍ɻ ◦ http://api.example.com/users/detail/
• ͍ • ਓ͕ؒಡΜͰཧղͰ͖Δ • খจࣈͷΈ • αʔόʔͷ࣮ʹґଘͯ͠ͳ͍ • ߏ͕౷Ұ͞Ε͍ͯΔ
• HTTPϝιου͕نఆʹԊ͍ͬͯΔ
খจࣈͷΈͷURL • େจࣈ͕ࠞࡏ͢ΔͱΘ͔ΓͮΒ͘ͳΔ • ϗετ෦େจࣈ͕ແࢹ͞ΕΔ༷͕͋ΔͨΊɺͦΕʹै͏ × http://api.example.com/Users/Detail " ϑΥϯτʹΑͬͯେจࣈখจࣈ͕Θ͔ΓͮΒ͍ɻಛʹIͱlͳͲ
◦ http://api.example.com/users/detail/
• ͍ • ਓ͕ؒಡΜͰཧղͰ͖Δ • খจࣈͷΈ • αʔόʔͷ࣮ʹґଘͯ͠ͳ͍ • ߏ͕౷Ұ͞Ε͍ͯΔ
• HTTPϝιου͕نఆʹԊ͍ͬͯΔ
αʔόʔͷ࣮ʹґଘͯ͠ͳ͍URL • ෦࣮ΒΕͳ͍ํ͕ηΩϡϦςΟతʹ˓ × http://api.example.com/cgi-bin/users.php " CGI൛ͷPHPͬΆ͍ͳͱΘ͔ͬͯ͠·͏ ◦ http://api.example.com/users/
• ͍ • ਓ͕ؒಡΜͰཧղͰ͖Δ • খจࣈͷΈ • αʔόʔͷ࣮ʹґଘͯ͠ͳ͍ • ߏ͕౷Ұ͞Ε͍ͯΔ
• HTTPϝιου͕نఆʹԊ͍ͬͯΔ
ߏ͕౷Ұ͞Ε͍ͯΔURL • ౷Ұ͞Ε͍ͯΔͱ͔Γ͢͞ʹͭͳ͕Δ × http://api.example.com/users/123/ Ϣʔβʔใৄࡉ × http://api.example.com/users/friends?user_id=123 ࢦఆͨ͠Ϣʔβʔͷ༑ୡҰཡ
" ্ύεύϥϝʔλͰɺԼΫΤϦύϥϝʔλͱҰ؏ੑ͕ͳ͍ ◦ http://api.example.com/users/123/ ◦ http://api.example.com/users/123/friends/
• ͍ • ਓ͕ؒಡΜͰཧղͰ͖Δ • খจࣈͷΈ • αʔόʔͷ࣮ʹґଘͯ͠ͳ͍ • URLߏ͕౷Ұ͞Ε͍ͯΔ
• HTTPϝιου͕نఆʹԊ͍ͬͯΔ
HTTPϝιου͕نఆʹԊ͍ͬͯΔ • ༷ʹै͏ • GETͰߋ৽͠ͳ͍ͳͲ (&5 ใΛऔಘ͢Δ 1045 ৽͍͠ใΛొ͢Δ
165 ࢦఆͨ͠63-ʹใΛొ͢Δ ใΛ্ॻ͖͢Δ 1"5$) 165ʹࣅ͍ͯΔ ใͷҰ෦Λߋ৽͢Δ %&-&5& ࢦఆͨ͠ใΛআ͢Δ
WebAPIઃܭͷਐΊํ
1. ػೳͷҰཡΛ࡞͢ΔʢϢʔεέʔεͷ࡞ʣ 2. Ϣʔεέʔε͝ͱʹඞཁͳAPIΛߟ͑Δ 3. 2Ͱߟ͑ͨඞཁͳAPIʹରͯ͠ɺHTTP Method, URL, ϦΫΤε τͷཁૉϨεϙϯεΛܾΊ͍ͯ͘
Q&A
໊ࢺ୯ܥʁෳܗʁ • αʔϏεʹΑͬͯ୯ͩͬͨΓෳͩͬͨΓ͢Δ • جຊతʹू߹Λද͢ͷෳܗ͕దͱ͞Ε͍ͯΔ • ςʔϒϧ໊େମෳܗͳͷͰἧ͑Δͱ͔Γ͔ͬͨ͢Γ ͢Δ ʢ˞ςʔϒϧͱશ͘ಉ͡ΤϯυϙΠϯτΛ༻ҙ͢Δ͚ͩ✖ʣ
ಈࢺͬͯμϝʁ • ઈରͰͳ͍ • searchͳͲͷಈࢺΛ͍ͬͯΔαʔϏε͋Δ • ͨͩɺHTTPMethodͰදͤΔ”GET”ͳͲΘͳ͍ํ͕ྑ͍
୯ޠͷ࿈݁ʮ-ʯʁʮ_ʯʁ • ͲͪΒ͔ยํͰ౷Ұ͢Εྑ͍ • SEOతʹϋΠϑϯͷํ͕ྑ͍͕ɺWebAPIʹؔͳ͍ • ΞϯμʔόʔϦϯΫදهͷԼઢͱඃΔ͜ͱ͕͋ΔͷͰɺϋΠ ϑϯΛ͓͢͢Ί͍ͨ͠
ΫΤϦͱύεͷ͍͚ • URLϦιʔεΛද͢ͷͰ͋ΔͨΊɺҰҙʹܾ·ΔͷͰ͋ ΕύεʹؚΊͨํ͕ྑ͍ʢྫ: ϢʔβʔIDʣ • লུͰ͖ΔͷΫΤϦʹ͢Δͱྑ͍ʢྫ: ҰཡऔಘͷߜΓࠐ Έ݅ʣ
ඞͣ൚༻తʹ͢Δඞཁͳ͍ • ͘ެ։ͤͣɺࣗΒͰดͨ͡APIͷ߹൚༻తʹ͢Δ͜ͱͰ ͔͍͑ͬͯͮΒ͘ʢ=Ԛ͘ʣͳͬͯ͠·͏͜ͱ͕͋Δ • ྫ͑ɺτοϓϖʔδʹඞཁͳͯ͢ͷใΛ1ʹฦ͢APIΛ ࡞͍͍ͬͯ • ϢʔεέʔεΛେࣄʹͯ͠ઃܭ͍ͯ͘͠ͱྑ͍
OpenAPIʹ͍ͭͯগ͠
OpenAPI / Swaggerͱ • REST APIͷهड़ϑΥʔϚοτ • yaml or jsonͰهड़Ͱ͖Δ
• όʔδϣϯ2·ͰSwaggerͱݺΕ͍͕ͯͨɺݱࡏOpenAPI ͱݺΕ͍ͯΔ • ݱࡏόʔδϣϯ3
͕ࣗਪͤΔઃܭΛࢦͯ͠ ؤு͍ͬͯͩ͘͞