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
お前はこれまでに作ったAPIの数を覚えているのか?
Search
Atsushi Takayama
April 17, 2018
Technology
0
2.5k
お前はこれまでに作ったAPIの数を覚えているのか?
Nulabさんで行われたGeeks Who Drink -Public API Edition-というイベントで発表しました。
Atsushi Takayama
April 17, 2018
Tweet
Share
More Decks by Atsushi Takayama
See All by Atsushi Takayama
最高の開発者体験の追求が開発生産性を改善し続ける文化を生み出した話
edvakf
3
1.2k
NeurIPS 2021 論文読み会: How Modular should Neural Module Networks Be for Systematic Generalization?
edvakf
0
160
8年物のJavaのシステムをKotlinに変えていく選択に至るまで
edvakf
2
1k
ピクシブ社内のImageFlux利用事例紹介
edvakf
1
2.8k
学びの文化を育む社内読書会のススメ
edvakf
0
250
フルCDNアーキテクチャでサービス設計した話
edvakf
5
3.9k
Goでバイナリを読む+α
edvakf
1
930
「ふつうのRailsアプリケーション」についての考え方
edvakf
2
820
ggplot.galleryというお遊びウェブアプリケーションを作った話
edvakf
0
390
Other Decks in Technology
See All in Technology
ドキュメント管理の理想と現実
kazuhe
1
210
AI AgentOps LT大会(2025/04/16) Algomatic伊藤発表資料
kosukeito
0
140
地味にいろいろあった! 2025春のAmazon Bedrockアップデートおさらい
minorun365
PRO
1
270
3月のAWSアップデートを5分間でざっくりと!
kubomasataka
0
120
Notion x ポストモーテムで広げる組織の学び / Notion x Postmortem
isaoshimizu
1
120
ワールドカフェI /チューターを改良する / World Café I and Improving the Tutors
ks91
PRO
0
120
エンジニアリングで組織のアウトカムを最速で最大化する!
ham0215
1
110
クォータ監視、AWS Organizations環境でも楽勝です✌️
iwamot
PRO
1
320
【Λ(らむだ)】最近のアプデ情報 / RPALT20250422
lambda
0
110
ビジネスとデザインとエンジニアリングを繋ぐために 一人のエンジニアは何ができるか / What can a single engineer do to connect business, design, and engineering?
kaminashi
0
110
彩の国で始めよう。おっさんエンジニアから共有したい、当たり前のことを当たり前にする技術
otsuki
0
150
C++26アップデート 2025-03
faithandbrave
0
650
Featured
See All Featured
Building an army of robots
kneath
304
45k
How GitHub (no longer) Works
holman
314
140k
Helping Users Find Their Own Way: Creating Modern Search Experiences
danielanewman
29
2.5k
How to train your dragon (web standard)
notwaldorf
90
6k
Automating Front-end Workflow
addyosmani
1369
200k
Into the Great Unknown - MozCon
thekraken
37
1.7k
I Don’t Have Time: Getting Over the Fear to Launch Your Podcast
jcasabona
32
2.2k
Producing Creativity
orderedlist
PRO
344
40k
It's Worth the Effort
3n
184
28k
Sharpening the Axe: The Primacy of Toolmaking
bcantrill
41
2.2k
YesSQL, Process and Tooling at Scale
rocio
172
14k
GraphQLの誤解/rethinking-graphql
sonatard
71
10k
Transcript
͓લ͜Ε·Ͱʹ࡞ͬͨ APIͷΛ͍֮͑ͯΔͷ͔ʁ Geeks Who Drink -Public API Edition- 2018/4/16
ࣗݾհ ߴࢁԹ @edvakf ϐΫγϒגࣜձࣾ ࣥߦһCTO݉ԬΦϑΟεϚ ωʔδϟʔ JavaScript, PHP, Ruby, Go,
Scala
ࠓͷςʔϚ pixivͰ͜Ε·ͰؔΘ͖ͬͯͨ৭ΜͳAPIͷΛ͠·͢ Web APIͷ͜ͱͰ͢ ΫϥεΠϯλʔϑΣΠεͳͲͷ͜ͱͰ͋Γ·ͤΜ
PHP→JS API 2010͝Ζ͔Β͋ͬͨɺ͍ΘΏΔී௨ͷJSON over HTTP API PHPͷarrayʢྻʹ࿈ྻʹͳΔߏʣΛjson_encodeͨ͠ͷ ܕఆٛͳͲແ͍ αʔόʔͱΫϥΠΞϯτΛಉ࣌ʹσϓϩΠͰ͖Δ PHPJSʮintͬΆ͍stringΛͱͯ͠ѻ͑ΔʯͳͲܕʹॊೈ
DB͔Βऔಘͨ͠Λͦͷ··JSONʹͨ͠Γ͍ͯͨ͠ͷͰɺͪΐͬͱةͳ͍͜ͱ ͕͋ͬͨ Τϥʔॲཧద
JSON APIͷΤϥʔॲཧ JSONͱͯ͠ύʔεͰ͖ͳ͚ΕΤϥʔ PHPͷΤϥʔॲཧΛHTMLΛฦ͢߹ͱJSONΛฦ͢߹Ͱ͚ͯͳ͔ͬͨͷͰɺ200Ҏ֎ͩ ͱHTMLͷΤϥʔϖʔδΛฦ͍ͯͨ͠ 200Ҏ֎ͳΒΤϥʔ εςʔλείʔυϓϩΩγϩάॲཧݕࡧΤϯδϯͳͲɺࣗͨͪͰίϯτϩʔϧ͠ ʹ͍͘ॴͰΘΕΔ αʔόʔͱΫϥΠΞϯτ྆ํΛࣗࣾͰ࣋ͬͯΔͳΒ͋·Γεςʔλείʔυʹ߆Βͳ͍Ͱ ͍͍
errorͱ͍͏Ωʔ͕͋ΕΤϥʔʢ200Ͱ͋ͬͯʣ →ͲͷύλʔϯΑͬͯ͘Δ
CSV API ࠷ॳظͷpixivΞϓϦ༻APICSVΛฦ͍ͯͨ͠ ྫ͑ `id, name, age` Λฦ͢ͳΒ `1000,ࢁాଠ,23` Έ͍ͨͳϨεϙϯεͩͬͨ
ෳϨεϙϯεΛฦ͢APIෳߦʹͳΔ APIΛ֦ு͢Δ࣌ӈଆʹΧϥϜΛՃ͢Δ Θͳ͘ͳͬͨΧϥϜۭจࣈʹͳΔʢͭ·ΓΧϯϚ͕࿈ଓ͢Δʣ ΧϥϜͷఆٛࣾυΩϡϝϯτʹ͋Δ ͳͥJSONΛΘͳ͔ͬͨͷ͔ܦҢෆ໌ JSONʹൺͯΩʔΛ࣋ͨͳ͍ͷͰϨεϙϯεαΠζখ͍͞
"Public API" 2012ࠒʹCSVͰͳ͍ʮͪΌΜͱͨ͠ʯεϚϗΞϓϦ͚API͕ཉ ͍͠ͱ͍͏͕ߴ·Δ ࣾ֎ͷఏܞاۀ͔ΒAPIΛٻΊΒΕΔ͜ͱ͕͋ͬͨ ʮ֎෦͚APIʯΛ࡞ͬͯɺΞϓϦͦΕΛ͏Α͏ʹ͠Α͏ →"Public API" APIυΩϡϝϯτυΩϡϝϯταΠτΛ࡞ͬͯMarkdownͰॻ͍ͨ OAuthೝূΛ͜ͷ࣮࣌
"Public API"ͷࣦഊ Twitter APIGitHub APIͳͲɺެ։API͕ීٴͨ࣌ͩͬͨ͠ͷͰɺෆಛ ఆଟͷ։ൃऀ͕͏APIΛఆͯ͠࡞ͬͨ pixivͱ͍͏αʔϏεͷબͱͯ͠ɺAPIΛҰൠެ։͢Δ͜ͱͳ͔ͬ ͨ ͍͔ͭ͘ͷఏܞاۀͱɺࣗࣾΞϓϦɾαʔϏε͔Β͔͠Θͳ͍ ࣾ֎͚ఆͨ͠APIͳͷʹɺ͔ࣾΒ͔͠Θͳ͍Ӆ͠ύϥϝʔλ
͕͋ͬͨΓ υΩϡϝϯταΠτͷߋ৽͍ͬͯͨΓ
LSUDsͱSSKDs Web API: The Good Parts (2014) LSUDs: Large Set
of Unknown Developers େͷΒͳ͍։ൃऀ͚ APIͷߋ৽ك SSKDs: Small Set of Known Developers গͷͬͯΔ։ൃऀ͚ʢࣗࣾΞϓϦ༻APIͳͲʣ APIͷߋ৽සൟ
ࣾAPI ࣾͷαʔόʔؒ௨৴APIΛThriftͰߏங ThriftɿAPIهड़ݴޠΛॻ͍ͯαʔόʔͷΠϯλʔϑΣΠεͱΫϥΠΞϯτϥΠϒ ϥϦΛࣗಈੜ͢Δπʔϧ αʔόʔͷΠϯλʔϑΣΠε࣮͚ͩΛ࡞Εྑ͍ ࣮ͱυΩϡϝϯτͷဃ͕΄΅ੜ·Εͳ͍ pixivPHPɺपลαʔϏεRubyͩͬͨΓScalaͩͬͨΓGoͩͬͨΓ εϚϗΞϓϦͷAPIͱͯ͠Θͳ͍͜ͱʹͨ͠ طʹJSON͕σϑΝΫτελϯμʔυʹͳ͍ͬͯͨ όΠφϦͳͷͰɺcurlͰͪΐͬ͜ͱୟ͘Έ͍ͨͳσόοά͕໘
ݱࡏͷpixivΞϓϦ༻API "Public API"ເͱرΛ٧ΊࠐΜͩͷͩͬͨ ෦࣮తʹɺܧঝநԽͷմʹͳ͍ͬͯͨ ݱࡏͷΞϓϦ༻APIۃྗγϯϓϧʹɺDBݺͼग़͠ͷؔΛݸݺΜ ͰJSONͷܗΛ࡞Δ͚ͩʹಛԽ CQRSʢDBҾͬுͬͯ͘Δ͚ͩͳͷʹؤுΓ͗͢Δͳʣ ຊCommand Query Responsibility
Separation Swaggerఆٛඞͣॻ͘
Swagger (Open API Spec) APIఆٛΛॻ͘πʔϧ YAMLͰॻ͘ɺιʔείʔυதʹॻ͘ɺίϝϯτͰॻ͘ͳͲ swagger-uiͱ͍͏υΩϡϝϯτϖʔδͰ࣮ࡍʹϦΫΤετΛૹͬͯΈΔ͜ ͱ͕Ͱ͖Δ swagger-codegenͰΫϥΠΞϯτϥΠϒϥϦੜ ͦ͏͍͏ΤίγεςϜ͕ॆ࣮͍ͯ͠Δ
ࣾͰ3͙Β͍લʹScalaͷAPIͰಋೖͨ͠ͷΛ͖͔͚ͬʹɺRailsPHPͰ ಋೖ͕ਐΈɺݱࡏSwaggerͷແ͍APIك
Swagger-UI
APIఆٛͷࣗಈςετ APIͷ࣮͕ఆ͔ٛΒဃ͍ͯ͠ͳ͍͜ͱΛ୲อ͍ͨ͠ SwaggerΛRspecͰςετ SwaggerͷAPIఆٛJSON SchemaͷαϒηοτͳͷͰJSON SchemaͷπʔϧͰݕূͰ͖Δ ͋Γ͕ͪͳʮΩʔ͕૿͑ͨͷʹυΩϡϝϯτॻ͖ΕͯΔʯ ͛ΔΑ͏ʹͨ͠ APIͷϦϑΝΫλϦϯά͕ѹతʹϥΫʹʂ
To REST or Not To REST ʮRESTʹ͢Δ͖͔൱͔ʯΑٞ͘ʹͳΔ ݸਓతʹɺಛʹRESTʹͩ͜ΘΔඞཁͳ͍ͱײ͡Δ RailsΛ͍ͬͯΔͳΒRESTʹͯ͠ྑ͍ͷͰɺఔ RailsͰϧʔςΟϯάͰଟগαϙʔτ͕͋Δ͚ͩ
Swaggerॻ͍͓͚ͯURLͷܗࣜΦϚέఔ ಉ༷ʹGraphQL͋·Γ৯ࢦ͕ಈ͔ͳ͍ JSON+SwaggerͷΤίγεςϜ͕͜Ε͚ͩॆ࣮ͨ͠ࠓͱͳͬͯ…
ͦͷଞ APIΛͬͯ৭ʑͰ͖Δ
ΞϓϦͱΣϒͰಉ͡API
Viron
·ͱΊ ࣾͰ͔͠Θͳ͍ͷͳΒγϯϓϧʹ࡞Ζ͏ APIυΩϡϝϯτઈରॻ͜͏