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
51
Docker bake(とCache)でCI/CDを改善する
sunyryr
0
600
OpenAPI×LaravelでAPI開発を格段に便利にする方法
sunyryr
0
1.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
The Past, Present, and Future of Enterprise Java with ASF in the Middle
ivargrimstad
0
170
基礎から学ぶ大画面対応(Learning Large-Screen Support from the Ground Up)
tomoya0x00
0
3.3k
OSS開発者という働き方
andpad
5
1.7k
個人開発で徳島大学生60%以上の心を掴んだアプリ、そして手放した話
akidon0000
1
150
Navigation 2 を 3 に移行する(予定)ためにやったこと
yokomii
0
340
Performance for Conversion! 分散トレーシングでボトルネックを 特定せよ
inetand
0
2.4k
JSONataを使ってみよう Step Functionsが楽しくなる実践テクニック #devio2025
dafujii
1
640
私の後悔をAWS DMSで解決した話
hiramax
4
210
請來的 AI Agent 同事們在寫程式時,怎麼用 pytest 去除各種幻想與盲點
keitheis
0
130
意外と簡単!?フロントエンドでパスキー認証を実現する WebAuthn
teamlab
PRO
2
770
250830 IaCの選定~AWS SAMのLambdaをECSに乗り換えたときの備忘録~
east_takumi
0
400
知っているようで知らない"rails new"の世界 / The World of "rails new" You Think You Know but Don't
luccafort
PRO
1
190
Featured
See All Featured
Building Applications with DynamoDB
mza
96
6.6k
Music & Morning Musume
bryan
46
6.8k
Optimizing for Happiness
mojombo
379
70k
Evolution of real-time – Irina Nazarova, EuRuKo, 2024
irinanazarova
8
930
Being A Developer After 40
akosma
90
590k
Typedesign – Prime Four
hannesfritz
42
2.8k
Six Lessons from altMBA
skipperchong
28
4k
Intergalactic Javascript Robots from Outer Space
tanoku
272
27k
Principles of Awesome APIs and How to Build Them.
keavy
126
17k
Faster Mobile Websites
deanohume
309
31k
Unsuck your backbone
ammeep
671
58k
The Web Performance Landscape in 2024 [PerfNow 2024]
tammyeverts
9
810
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
͕ࣗਪͤΔઃܭΛࢦͯ͠ ؤு͍ͬͯͩ͘͞