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
91
0
Share
Embed
Copy iframe code
Copy JS code
Copy link
Start on current slide
WebAPI の設計
2021-12-04、2022-03-18の1DayインターンでLTした内容です
ゆるゆる
December 04, 2021
More Decks by ゆるゆる
See All by ゆるゆる
改行には気をつけよう
sunyryr
0
79
Docker bake(とCache)でCI/CDを改善する
sunyryr
0
690
OpenAPI×LaravelでAPI開発を格段に便利にする方法
sunyryr
0
1.2k
OpenAPIことはじめ
sunyryr
0
150
server side swift - codable
sunyryr
0
280
iOSアプリだけじゃないSwift
sunyryr
0
170
Other Decks in Programming
See All in Programming
AI時代に学ぶ 好きなルール 嫌いなルール Linter編
shorty5121
0
860
LoopHub - ローカルで動く GitHub で、AI と共同開発
jugyo
0
430
Webエンジニアなのにブラウザの仕組みがわからないので、Pythonで自作してみた
tatsuki12
4
1.7k
[DroidKaigi 2026] Bring your own phones to Gradle Managed Devices
f2lk
0
110
{ Android | Kotlin } Gradle Plugin in 2026
ryunen344
1
280
書籍「プロフェッショナルAI駆動開発」紹介スライド
juntaromatsumoto
0
990
『寄り添うラジオ』をAIで作る 体験価値から逆算した、会話しないUXと品質設計
theoriatec2024
2
110
片田舎のおっさん、 Swift Buildのダイアモンド問題解決の不具合修正PRを出すが、解決方法がキャッシュをしないようにすることであり、ビルド時間が伸びると言われてマージされないので高速化もする/swiftbuild
yimajo
0
360
DynamoDBの基礎を振り返りながらベクトル検索機能を理解する
musan
3
270
自分的「カンファレンスの楽しみ方」
syumai
0
190
ALB ログから Trace を気合で繋げる技術
fohte
7
870
go-spidermonkeyでAIエージェントのCode Modeを実装する
syumai
3
1.5k
Featured
See All Featured
The agentic SEO stack - context over prompts
schlessera
0
900
The Cost Of JavaScript in 2023
addyosmani
55
10k
Raft: Consensus for Rubyists
vanstee
141
7.7k
Optimising Largest Contentful Paint
csswizardry
37
3.9k
Measuring & Analyzing Core Web Vitals
bluesmoon
9
990
Fireside Chat
paigeccino
42
4k
How STYLIGHT went responsive
nonsquared
100
6.3k
Impact Scores and Hybrid Strategies: The future of link building
tamaranovitovic
0
430
Art, The Web, and Tiny UX
lynnandtonic
304
22k
Are puppies a ranking factor?
jonoalderson
2
3.9k
Visual Storytelling: How to be a Superhuman Communicator
reverentgeek
2
650
Why You Should Never Use an ORM
jnunemaker
PRO
61
10k
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
͕ࣗਪͤΔઃܭΛࢦͯ͠ ؤு͍ͬͯͩ͘͞