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.4k
NeurIPS 2021 論文読み会: How Modular should Neural Module Networks Be for Systematic Generalization?
edvakf
0
190
8年物のJavaのシステムをKotlinに変えていく選択に至るまで
edvakf
2
1.1k
ピクシブ社内のImageFlux利用事例紹介
edvakf
2
2.9k
学びの文化を育む社内読書会のススメ
edvakf
0
300
フルCDNアーキテクチャでサービス設計した話
edvakf
5
4k
Goでバイナリを読む+α
edvakf
1
980
「ふつうのRailsアプリケーション」についての考え方
edvakf
2
900
ggplot.galleryというお遊びウェブアプリケーションを作った話
edvakf
0
420
Other Decks in Technology
See All in Technology
Oracle Database@Azure:サービス概要のご紹介
oracle4engineer
PRO
3
350
Scrum Guide Expansion Pack が示す現代プロダクト開発への補完的視点
sonjin
0
610
田舎で20年スクラム(後編):一個人が企業で長期戦アジャイルに挑む意味
chinmo
1
1.4k
スクラムを一度諦めたチームにアジャイルコーチが入ってどう変化したか / A Team's Second Try at Scrum with an Agile Coach
kaonavi
0
220
AI Agent Standards and Protocols: a Walkthrough of MCP, A2A, and more...
glaforge
0
230
ECS_EKS以外の選択肢_ROSA入門_.pdf
masakiokuda
1
130
Digitization部 紹介資料
sansan33
PRO
1
6.5k
Keynoteから見るAWSの頭の中
nrinetcom
PRO
1
180
ファインディにおけるフロントエンド技術選定の歴史
puku0x
2
1.4k
モノタロウ x クリエーションラインで実現する チームトポロジーにおける プラットフォームチーム・ ストリームアラインドチームの 効果的なコラボレーション
creationline
0
780
Introduction to Sansan for Engineers / エンジニア向け会社紹介
sansan33
PRO
5
61k
ソフトとハード両方いけるデータ人材の育て方
waiwai2111
0
150
Featured
See All Featured
世界の人気アプリ100個を分析して見えたペイウォール設計の心得
akihiro_kokubo
PRO
65
35k
Making the Leap to Tech Lead
cromwellryan
135
9.7k
Self-Hosted WebAssembly Runtime for Runtime-Neutral Checkpoint/Restore in Edge–Cloud Continuum
chikuwait
0
280
A brief & incomplete history of UX Design for the World Wide Web: 1989–2019
jct
1
270
Organizational Design Perspectives: An Ontology of Organizational Design Elements
kimpetersen
PRO
1
57
HDC tutorial
michielstock
1
320
Chasing Engaging Ingredients in Design
codingconduct
0
97
コードの90%をAIが書く世界で何が待っているのか / What awaits us in a world where 90% of the code is written by AI
rkaga
58
41k
The Straight Up "How To Draw Better" Workshop
denniskardys
239
140k
Getting science done with accelerated Python computing platforms
jacobtomlinson
1
94
Navigating Weather and Climate Data
rabernat
0
68
Hiding What from Whom? A Critical Review of the History of Programming languages for Music
tomoyanonymous
1
350
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υΩϡϝϯτઈରॻ͜͏