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
Web APIについての雑談
Search
Tomohiro Nishimura
December 23, 2015
Technology
0
410
Web APIについての雑談
よく悩むところを列挙しました
Tomohiro Nishimura
December 23, 2015
Tweet
Share
More Decks by Tomohiro Nishimura
See All by Tomohiro Nishimura
レガシーシステム洗い出し大作戦
sixeight
0
1.6k
我々のRealmはどこからやってくるのか
sixeight
1
400
まだ見ぬAPIに思いを馳せて
sixeight
0
130
復習OptionSet
sixeight
0
270
今年読んだまんが
sixeight
0
230
べんりな検索ワード
sixeight
0
250
Readable Width in action
sixeight
0
170
UIPreviewInteraction: Overview
sixeight
1
630
Accessing the Music Library
sixeight
1
2.8k
Other Decks in Technology
See All in Technology
Snowflake Intelligenceにはこうやって立ち向かう!クラシルが考えるAI Readyなデータ基盤と活用のためのDataOps
gappy50
0
240
要件定義・デザインフェーズでもAIを活用して、コミュニケーションの密度を高める
kazukihayase
0
110
5年目から始める Vue3 サイト改善 #frontendo
tacck
PRO
3
220
ハードウェアとソフトウェアをつなぐ全てを内製している企業の E2E テストの作り方 / How to create E2E tests for a company that builds everything connecting hardware and software in-house
bitkey
PRO
1
140
Terraformで構築する セルフサービス型データプラットフォーム / terraform-self-service-data-platform
pei0804
1
180
未経験者・初心者に贈る!40分でわかるAndroidアプリ開発の今と大事なポイント
operando
5
630
Function Body Macros で、SwiftUI の View に Accessibility Identifier を自動付与する/Function Body Macros: Autogenerate accessibility identifiers for SwiftUI Views
miichan
2
180
RSCの時代にReactとフレームワークの境界を探る
uhyo
10
3.4k
OCI Oracle Database Services新機能アップデート(2025/06-2025/08)
oracle4engineer
PRO
0
150
バイブスに「型」を!Kent Beckに学ぶ、AI時代のテスト駆動開発
amixedcolor
2
560
共有と分離 - Compose Multiplatform "本番導入" の設計指針
error96num
2
570
「何となくテストする」を卒業するためにプロダクトが動く仕組みを理解しよう
kawabeaver
0
410
Featured
See All Featured
Why You Should Never Use an ORM
jnunemaker
PRO
59
9.5k
GitHub's CSS Performance
jonrohan
1032
460k
Art, The Web, and Tiny UX
lynnandtonic
303
21k
[RailsConf 2023 Opening Keynote] The Magic of Rails
eileencodes
30
9.7k
Designing for humans not robots
tammielis
253
25k
Java REST API Framework Comparison - PWX 2021
mraible
33
8.8k
Code Reviewing Like a Champion
maltzj
525
40k
It's Worth the Effort
3n
187
28k
What's in a price? How to price your products and services
michaelherold
246
12k
Balancing Empowerment & Direction
lara
3
620
The Illustrated Children's Guide to Kubernetes
chrisshort
48
50k
The MySQL Ecosystem @ GitHub 2015
samlambert
251
13k
Transcript
Web API ʹ͍ͭͯͷࡶஊ ؔϞό #9
ג ͯͳ 8FCΞϓϦέʔγϣϯΤϯδχΞ εϚʔτϑΥϯΞϓϦΤϯδχΞ ͲΕத్ͰযΔ ޚࡏॴַΑ͔ͬͨ id:Sixeight (@tomohi_ro)
Web API ΣϒΤʔϐʔΞΠ
ؔϞό#9 Web API ͱͳΜͧ )551ϓϩτίϧΛར༻ͯ͠ωοτϫʔ Ϋӽ͠ʹݺͼग़͢"1* 8FC"1*5IF(PPE1BSUT
εϚʔτϑΥϯΞϓϦ ͱ Web API
͑ͳ͍
ؔϞό#9 LSUDs ͱSSKDs ▸ LSUDs (large set of unknown developers)
▸ ͘Ұൠతʹެ։͞Ε͍ͯΔ ▸ Twitter/Facebook/Instagram/ Google/etc ▸ SSKDs (small set of known developers) ▸ ݶΒΕͨൣғʹެ։͞Ε͍ͯΔ ▸ ࣗࣾΞϓϦͳͲ
44,%T গͷ͍ͬͯΔ։ൃऀ͚
ؔϞό#9 SSKDs (small set of known developers) ▸ ఆ͞Ε͍ͨํ͔͠͞Εͳ͍ ▸
ΞϓϦʹ࠷దԽͨ͠ܗͰఏڙͰ͖Δ ▸ ։ൃऀಉ࢜ͰձͰ͖Δ ▸ ີ݁߹͕ͪ͠ ▸ ଥڠ͕ͪ͠
ίʔϧ 1εΫϦʔϯɺ
ؔϞό#9 1εΫϦʔϯɺ1ίʔϧ ▸ 1ը໘Λදࣔ͢ΔͷʹɺWeb APIͷݺͼग़͠Ұճʹ͓͍͑ͨ͞ ▸ جຊతʹෳͷϦιʔε͕ඞཁ ▸ αʔόʔଆͷ࣮ෳࡶʹͳΔ ▸
ͲΜͲΜRESTͷߟ͑ํ͔ΒͦΕΔ ▸ ҙਂ͘ઃܭ͢ΕՄೳ ▸ ը໘Λத৺ʹߟ͑͗͢Δͱมߋʹऑ͘ͳΔ
ΤϯυϙΠϯτ APIͷإ
ؔϞό#9 ΤϯυϙΠϯτ ▸ SSKDsͩͱΤϯυϙΠϯτͳΜͰ͍͍ͱ͍͏ ▸ ϝϯςφϯεੑ ▸ ݟͨѱ͍ͱΔؾʹӨڹ͢Δ ▸ ෳܥͳͷ͔୯ܗͳͷ͔
▸ HATEOASΈ͍ͨͳͷਅ໘ʹߟ͑ͯྑͦ͞͏
3&45 Ԟ͞Μʹઆ໌͠ΖͱݴΘΕ͍ͯ͠ see also: http://www.geocities.jp/yamamotoyohei/rest/rest-to-my-wife.htm
ؔϞό#9 REST ▸ ͜͜ͰϑΟʔϧσΟϯάͬΆ͍ ▸ 1εΫϦʔϯɺ1ίʔϧͱ૬ੑѱ͍ؾ͕͢Δ ▸ ϩάΞτ DELETE ͳͷ͔Ͳ͏͔
▸ λΠτϧͷߋ৽ PATCHʁʁʁʁʁʁ ▸ ૢ࡞͕ႈͳΒ PUT/DELETEɺͦ͏͡Όͳ͚ΕPOST
Ϩεϙϯε ҙ֎ͱ໎͏
ؔϞό#9 Ϩεϙϯε ▸ ϦιʔεΛߋ৽ͨ͠ͱ͖ͷϨεϙϯεɺߋ৽લʁͦΕͱߋ৽ޙʁ ▸ ϦιʔεΛফͨ͠ͱ͖204? ▸ 200͚ͩΕͲϨεϙϯεཁΒͳ͍ͱ͖ʁ ▸ {“success”:
true} vs {} vs ۭจࣈྻ (←͜Εͳ͍) ▸ ྻΛฦ͢ͱ͖ʹΦϒδΣΫτʹ͢Δ͔Ͳ͏͔ ▸ ͜ΕηΩϡϦςΟͷ͕͋ΔͷͰΦϒδΣΫτͰ ▸ ඞཁͳཁૉ͚ͩʁ֦ுੑΛߟ͑ͯଟΊʹΒ͓ͬͯ͘ʁ ▸ {“user”: { id: 1, name: “hoge”}} vs {“user_id”: 1, “user_name”: “hoge”} ▸ ͷϑΥʔϚοτͲ͏͢Δͷ͔ ▸ ϖʔδϯάͲ͏͢Δͷ͔ ▸ JSONͳͷ͔ଞͷϑΥʔϚοτͳͷ͔
ΤϥʔϨεϙϯε ࣮ॏཁ
ؔϞό#9 ΤϥʔϨεϙϯε ▸ ϑΥʔϚοτݻఆ͍ͨ͠ ▸ ϝοηʔδΛ;͘ΊΔ vs ΞϓϦͰੜ ▸ ଟݴޠԽͲ͏͢Δ͔ɺߋ৽͢͠͞Ͳ͏͔
▸ ΞϓϦଆͰΤϥʔʹର͢ΔέΞ͕ͻͭΑ͏͕Ͳ͏͔ ▸ Τϥʔίʔυඞཁͳͷ͔ ▸ Ͳ͜·Ͱใ͕͍Δͷ͔
ೝূ ࣗͰ͋Δ͜ͱͷূ໌
ؔϞό#9 ೝূ ▸ APIτʔΫϯΈ͍ͨͳͷ༻ҙ͢Δ ▸ Expireͱ͔ϦϑϨογϡͷΈ͕͍Δ ▸ ΕͨΒࠔΔ ▸ ܦ࿏͕҉߸Խ͞Ε͍ͯͨΒ·͍͍͋
▸ OAuth 2.0 ▸ ͏·͘Δํ๏͋Γͦ͏͚ͩΕͲݟͳ͠
҉߸Խ ಡԽ Ӆ͍ͨ͠ͷͰ
ؔϞό#9 ҉߸Խ,ಡԽ ▸ Ӆ͍ͨ͠ใΛӅ͢ ▸ ୈࡾऀʹରͯ͠(ݸਓใ)ɺ༻ऀʹରͯ͠ (ήʔϜͱ͔) ▸ HTTPSͩͱ͍͍ͩͨ҆৺ ▸
༰ΛಡԽͯ͠όΠφϦͰૹΔͱ͔ ▸ ΞϓϦଆͰσίʔυ͢Δͷେม ▸ σίϯύΠϧ͞Εͨͱ͖ͷରࡦ ▸ ૬खCIA͡Όͳͯ͘ૉਓ
όʔδϣϯ ޙํޓͷཁ
ؔϞό#9 όʔδϣϯ ▸ ޙํޓੑΛอ͍ͪͨ ▸ όʔδϣϯΛࢦఆ͢Δ͜ͱͰϨεϙϯεΛฦ͠Θ͚Δ ▸ /v1/hoge/piyo, ?version=1, X-API-Version:
1, application/ vnd.example.v1+json ▸ Ͳ͏ͬͯཧ͢Δ͔ ▸ ผͷϑΝΠϧͰཧ͢Δ ▸ ifจͰذ͢Δ ▸ ݹ͍όʔδϣϯΛ͍ͭഇࢭ͢Δ͔
ඇޓͳมߋ ආ͚ΒΕͳ͍
ؔϞό#9 ඇޓͳมߋ ▸ ਃͲ͏͢Δͷ͔ ▸ ਃ༻ͷαʔόʔΛ༻ҙͯͦͪ͠Βʹ͚Δ ▸ ΤϯυϙΠϯτΛฦ͢API (HATEOASʹͭͳ͕Δ) ▸
ਃ࣌ͷΈຊ൪ͱผͷͷݟͤΔͷͲ͏ͳͷ͔ ▸ ͪͳΈʹͯͳͰͬͯͳ͍ ▸ ڧ੍όʔδϣϯΞοϓ ▸ ΞϓϦͷόʔδϣϯΛ্͛ͳ͍ͱ͑ͳ͘͢Δ
ͦͷଞͷ
ؔϞό#9 ▸ υΩϡϝϯτ ▸ ςετ ▸ ΦʔέεϨʔγϣϯ ▸ ཉ͍͚ͩ͠Β͏ͱ͔
▸ ࣗಈੜ ▸ Swaggerͱ͔ ▸ ແݶʹ͋Δ
·ͱΊ ͦͯ͠
ؔϞό#9 ·ͱΊ ▸ ͑ͳ͍ ▸ ϓϩδΣΫτຖʹߟ͑Δඞཁ͕͋Δ ▸ ͱʹ͔͘໎͏ ▸ ձ͠·͠ΐ͏
ϝϦʔΫϦε Ϛε