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.4k
お前はこれまでに作った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
1k
NeurIPS 2021 論文読み会: How Modular should Neural Module Networks Be for Systematic Generalization?
edvakf
0
120
8年物のJavaのシステムをKotlinに変えていく選択に至るまで
edvakf
2
1k
ピクシブ社内のImageFlux利用事例紹介
edvakf
1
2.7k
学びの文化を育む社内読書会のススメ
edvakf
0
210
フルCDNアーキテクチャでサービス設計した話
edvakf
5
3.7k
Goでバイナリを読む+α
edvakf
1
880
「ふつうのRailsアプリケーション」についての考え方
edvakf
2
750
ggplot.galleryというお遊びウェブアプリケーションを作った話
edvakf
0
360
Other Decks in Technology
See All in Technology
Introduction to Works of ML Engineer in LY Corporation
lycorp_recruit_jp
0
140
強いチームと開発生産性
onk
PRO
35
11k
『Firebase Dynamic Links終了に備える』 FlutterアプリでのAdjust導入とDeeplink最適化
techiro
0
140
開発生産性を上げながらビジネスも30倍成長させてきたチームの姿
kamina_zzz
2
1.7k
New Relicを活用したSREの最初のステップ / NRUG OKINAWA VOL.3
isaoshimizu
3
630
データプロダクトの定義からはじめる、データコントラクト駆動なデータ基盤
chanyou0311
2
330
リンクアンドモチベーション ソフトウェアエンジニア向け紹介資料 / Introduction to Link and Motivation for Software Engineers
lmi
4
300k
OCI Vault 概要
oracle4engineer
PRO
0
9.7k
SREが投資するAIOps ~ペアーズにおけるLLM for Developerへの取り組み~
takumiogawa
1
450
ドメインの本質を掴む / Get the essence of the domain
sinsoku
2
160
AI前提のサービス運用ってなんだろう?
ryuichi1208
8
1.4k
OCI Network Firewall 概要
oracle4engineer
PRO
0
4.2k
Featured
See All Featured
Designing Experiences People Love
moore
138
23k
GitHub's CSS Performance
jonrohan
1030
460k
Put a Button on it: Removing Barriers to Going Fast.
kastner
59
3.5k
StorybookのUI Testing Handbookを読んだ
zakiyama
27
5.3k
Making Projects Easy
brettharned
115
5.9k
Happy Clients
brianwarren
98
6.7k
Learning to Love Humans: Emotional Interface Design
aarron
273
40k
Building Applications with DynamoDB
mza
90
6.1k
The Psychology of Web Performance [Beyond Tellerrand 2023]
tammyeverts
44
2.2k
XXLCSS - How to scale CSS and keep your sanity
sugarenia
246
1.3M
Site-Speed That Sticks
csswizardry
0
29
[Rails World 2023 - Day 1 Closing Keynote] - The Magic of Rails
eileencodes
33
1.9k
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υΩϡϝϯτઈରॻ͜͏