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
83
WebAPI の設計
2021-12-04、2022-03-18の1DayインターンでLTした内容です
ゆるゆる
December 04, 2021
Tweet
Share
More Decks by ゆるゆる
See All by ゆるゆる
改行には気をつけよう
sunyryr
0
27
Docker bake(とCache)でCI/CDを改善する
sunyryr
0
300
OpenAPI×LaravelでAPI開発を格段に便利にする方法
sunyryr
0
980
OpenAPIことはじめ
sunyryr
0
110
server side swift - codable
sunyryr
0
230
iOSアプリだけじゃないSwift
sunyryr
0
130
Other Decks in Programming
See All in Programming
これでLambdaが不要に?!Step FunctionsのJSONata対応について
iwatatomoya
2
3.7k
ある日突然あなたが管理しているサーバーにDDoSが来たらどうなるでしょう?知ってるようで何も知らなかったDDoS攻撃と対策 #phpcon.2024
akase244
0
100
Stackless и stackful? Корутины и асинхронность в Go
lamodatech
0
790
バグを見つけた?それAppleに直してもらおう!
uetyo
0
180
rails statsで大解剖 🔍 “B/43流” のRailsの育て方を歴史とともに振り返ります
shoheimitani
2
940
선언형 UI에서의 상태관리
l2hyunwoo
0
170
useSyncExternalStoreを使いまくる
ssssota
6
1.1k
モバイルアプリにおける自動テストの導入戦略
ostk0069
0
110
ドメインイベント増えすぎ問題
h0r15h0
2
340
ゆるやかにgolangci-lintのルールを強くする / Kyoto.go #56
utgwkk
2
390
MCP with Cloudflare Workers
yusukebe
2
220
数十万行のプロジェクトを Scala 2から3に完全移行した
xuwei_k
0
270
Featured
See All Featured
Building Your Own Lightsaber
phodgson
103
6.1k
Rails Girls Zürich Keynote
gr2m
94
13k
Documentation Writing (for coders)
carmenintech
66
4.5k
Code Reviewing Like a Champion
maltzj
520
39k
Fireside Chat
paigeccino
34
3.1k
Designing for humans not robots
tammielis
250
25k
"I'm Feeling Lucky" - Building Great Search Experiences for Today's Users (#IAC19)
danielanewman
226
22k
Site-Speed That Sticks
csswizardry
2
190
Keith and Marios Guide to Fast Websites
keithpitt
410
22k
Scaling GitHub
holman
458
140k
10 Git Anti Patterns You Should be Aware of
lemiorhan
PRO
656
59k
RailsConf 2023
tenderlove
29
940
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
͕ࣗਪͤΔઃܭΛࢦͯ͠ ؤு͍ͬͯͩ͘͞