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.7k
お前はこれまでに作った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.5k
NeurIPS 2021 論文読み会: How Modular should Neural Module Networks Be for Systematic Generalization?
edvakf
0
210
8年物のJavaのシステムをKotlinに変えていく選択に至るまで
edvakf
2
1.1k
ピクシブ社内のImageFlux利用事例紹介
edvakf
2
3k
学びの文化を育む社内読書会のススメ
edvakf
0
300
フルCDNアーキテクチャでサービス設計した話
edvakf
5
4.1k
Goでバイナリを読む+α
edvakf
1
990
「ふつうのRailsアプリケーション」についての考え方
edvakf
2
920
ggplot.galleryというお遊びウェブアプリケーションを作った話
edvakf
0
430
Other Decks in Technology
See All in Technology
How to install a gem
indirect
0
250
Phase05_ClaudeCode入門
overflowinc
0
1.8k
俺の/私の最強アーキテクチャ決定戦開催 ― チームで新しいアーキテクチャに適合していくために / 20260322 Naoki Takahashi
shift_evolve
PRO
1
420
GitHub Copilot CLI で Azure Portal to Bicep
tsubakimoto_s
0
180
A4)シラバスを超えて語る、テストマネジメント
moritamasami
0
120
Phase10_組織浸透_データ活用
overflowinc
0
1.4k
SaaSに宿る21g
kanyamaguc
2
140
スピンアウト講座05_実践活用事例
overflowinc
0
1k
SLI/SLO 導入で 避けるべきこと3選
yagikota
0
140
Agent Skill 是什麼?對軟體產業帶來的變化
appleboy
0
210
Phase03_ドキュメント管理
overflowinc
0
2.2k
AIエージェント×GitHubで実現するQAナレッジの資産化と業務活用 / QA Knowledge as Assets with AI Agents & GitHub
tknw_hitsuji
0
180
Featured
See All Featured
Helping Users Find Their Own Way: Creating Modern Search Experiences
danielanewman
31
3.1k
WCS-LA-2024
lcolladotor
0
490
Navigating Team Friction
lara
192
16k
The World Runs on Bad Software
bkeepers
PRO
72
12k
Site-Speed That Sticks
csswizardry
13
1.1k
Leveraging Curiosity to Care for An Aging Population
cassininazir
1
200
RailsConf & Balkan Ruby 2019: The Past, Present, and Future of Rails at GitHub
eileencodes
141
35k
Primal Persuasion: How to Engage the Brain for Learning That Lasts
tmiket
0
300
Making the Leap to Tech Lead
cromwellryan
135
9.8k
VelocityConf: Rendering Performance Case Studies
addyosmani
333
24k
Chasing Engaging Ingredients in Design
codingconduct
0
150
The agentic SEO stack - context over prompts
schlessera
0
710
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υΩϡϝϯτઈରॻ͜͏