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
2.7k
0
Share
お前はこれまでに作ったAPIの数を覚えているのか?
Nulabさんで行われたGeeks Who Drink -Public API Edition-というイベントで発表しました。
Atsushi Takayama
April 17, 2018
More Decks by Atsushi Takayama
See All by Atsushi Takayama
最高の開発者体験の追求が開発生産性を改善し続ける文化を生み出した話
edvakf
3
1.6k
NeurIPS 2021 論文読み会: How Modular should Neural Module Networks Be for Systematic Generalization?
edvakf
0
220
8年物のJavaのシステムをKotlinに変えていく選択に至るまで
edvakf
2
1.1k
ピクシブ社内のImageFlux利用事例紹介
edvakf
2
3k
学びの文化を育む社内読書会のススメ
edvakf
0
310
フルCDNアーキテクチャでサービス設計した話
edvakf
5
4.1k
Goでバイナリを読む+α
edvakf
1
1k
「ふつうのRailsアプリケーション」についての考え方
edvakf
2
930
ggplot.galleryというお遊びウェブアプリケーションを作った話
edvakf
0
430
Other Decks in Technology
See All in Technology
運用システムにおけるデータ活用とPlatform
sansantech
PRO
0
150
ファインディの事業拡大を支える 拡張可能なデータ基盤へのリアーキテクチャ
hiracky16
0
650
エージェントスキルを作って自分のインプットに役立てよう
tsubakimoto_s
0
490
コードや知識を組み込む / Incorporate Code and Knowledge
ks91
PRO
0
190
GitHub Copilot Dev Days
tomokusaba
0
120
AIでAIをテストする - 音声AIエージェントの品質保証戦略
morix1500
1
160
The 7 pitfalls of AI
ufried
0
140
巨大プラットフォームを進化させる「第3のROI」
recruitengineers
PRO
2
2k
20260428_Product Management Summit_tadokoroyoshiro
tadokoro_yoshiro
15
17k
Oracle Cloud Infrastructure:2026年4月度サービス・アップデート
oracle4engineer
PRO
0
230
はじめての MagicPod生成AI機能 機能紹介から活用方法まで
magicpod
0
130
UIライブラリに依存しすぎないReact Native設計を目指して
grandbig
0
170
Featured
See All Featured
Cheating the UX When There Is Nothing More to Optimize - PixelPioneers
stephaniewalter
287
14k
Lightning talk: Run Django tests with GitHub Actions
sabderemane
0
170
Ecommerce SEO: The Keys for Success Now & Beyond - #SERPConf2024
aleyda
1
1.9k
Utilizing Notion as your number one productivity tool
mfonobong
4
300
Chrome DevTools: State of the Union 2024 - Debugging React & Beyond
addyosmani
10
1.1k
Helping Users Find Their Own Way: Creating Modern Search Experiences
danielanewman
31
3.2k
The #1 spot is gone: here's how to win anyway
tamaranovitovic
2
1k
Navigating the moral maze — ethical principles for Al-driven product design
skipperchong
2
350
Odyssey Design
rkendrick25
PRO
2
590
Sam Torres - BigQuery for SEOs
techseoconnect
PRO
0
250
Fireside Chat
paigeccino
42
3.9k
Introduction to Domain-Driven Design and Collaborative software design
baasie
1
750
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υΩϡϝϯτઈରॻ͜͏