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
Designing robust APIs in Kotlin
Search
Jaewoong
March 17, 2022
Technology
2
170
Designing robust APIs in Kotlin
Designing robust APIs in Kotlin.
Jaewoong
March 17, 2022
Tweet
Share
More Decks by Jaewoong
See All by Jaewoong
[KR] Jetpack Compose Structure and Stability
skydoves
0
28
Jetpack Compose Structure and Stability
skydoves
1
19
[KR] 2024 DroidKnights: Compose 성능 최적화를 위한 Stability 마스터하기
skydoves
1
1k
[KR] What an Android Developer Does
skydoves
1
200
Jetpack Compose Mechanism
skydoves
2
1.3k
Google I/O Extended 2023: What's New in Kotlin for Android
skydoves
4
930
Google Tech Talk DevLibrary - Exploring an Android Open Source Project : Pokedex
skydoves
4
480
Becoming an Android Librarian (Android World Wide 2023 Jan)
skydoves
2
420
[UMC] Developer Journey
skydoves
0
220
Other Decks in Technology
See All in Technology
AWSを始めた頃に陥りがちなポイントをまとめてみた
oshanqq
1
1.7k
SHIFTの課題と目指したい組織像 / 20240827 Rinto Ikenoue
shift_evolve
0
140
強いチームを夢見て-PMからSREに転身して1年の振り返り / 20240906_bengo4_sre
bengo4com
1
750
マーケットプレイス版Oracle WebCenter Content For OCI
oracle4engineer
PRO
1
160
[RSJ24] Task Success Prediction for Open-Vocabulary Manipulation Based on Multi-Level Aligned Representations
keio_smilab
PRO
0
220
すぐに始めるAWSコスト削減。短期でできる改善策と長期的な運用負荷軽減への取り組み方を解説
ncdc
1
120
PlaywrightによるE2Eテスト入門 / Introduction to E2E Testing with Playwright
rhumie
3
910
RAGHack: Kickoff and RAG 101
pamelafox
0
200
トレタO/X アーキテクチャ移行記 Next.js App Router化への道のり / TORETA TECH UPDATE 1
okunokentaro
2
560
Oracle Database Backup Service:サービス概要のご紹介
oracle4engineer
PRO
0
4k
Oracle Exadata Database Service(Dedicated Infrastructure):サービス概要のご紹介
oracle4engineer
PRO
0
9.3k
標準ライブラリの奥深アップデートを掘り下げよう!
logica0419
2
390
Featured
See All Featured
Embracing the Ebb and Flow
colly
83
4.4k
Building Applications with DynamoDB
mza
89
5.9k
Learning to Love Humans: Emotional Interface Design
aarron
270
40k
Design and Strategy: How to Deal with People Who Don’t "Get" Design
morganepeng
122
18k
Product Roadmaps are Hard
iamctodd
PRO
48
10k
In The Pink: A Labor of Love
frogandcode
139
22k
5 minutes of I Can Smell Your CMS
philhawksworth
201
19k
Writing Fast Ruby
sferik
623
60k
Principles of Awesome APIs and How to Build Them.
keavy
125
16k
Refactoring Trust on Your Teams (GOTO; Chicago 2020)
rmw
29
2.5k
Why Our Code Smells
bkeepers
PRO
333
56k
Java REST API Framework Comparison - PWX 2021
mraible
PRO
27
7.4k
Transcript
Designing robust APIs in Kotlin Jaewoong Eum
About me github.com/skydoves
How to build solid APIs? 🤔
API design API surface
API design Client Client Client Client API surface
API design Client Client Client Client API surface
API design Client Client Client Client API surface
API design Client Client Client Client API surface
API design Minimal API surface area
API design Client Client Client Client Minimal API surface area
API design Client Client Client Client Minimal API surface area
API design Client Client Client Client Minimal API surface area
API visibility private internal importance protected public Visibility modifiers
API visibility public importance Client Client Client private internal protected
Visibility modifiers
API visibility Property
API visibility Property setter getter
API visibility Property // penguin setter getter
API visibility Property setter getter Cannot assign to 'data': the
setter is private in 'MyViewModel`
API visibility Extension
API visibility Extension
API visibility Extension Unresolved reference
API visibility Extension
API visibility Extension 😵
API visibility @JvmSynthetic
API visibility @JvmSynthetic
API visibility @JvmSynthetic Unresolved reference
API visibility @JvmSynthetic
API visibility @PublishedApi
API visibility @PublishedApi
API visibility @PublishedApi
API visibility @PublishedApi
API visibility @PublishedApi
API visibility KEEP
API visibility Explicit API mode
API visibility Explicit API mode
API visibility Explicit API mode (strict)
API visibility Explicit API mode (strict)
API visibility Explicit API mode (strict)
API visibility Explicit API mode (strict)
API visibility Explicit API mode (warning)
API visibility Explicit API mode (warning)
API visibility Binary compatibility validator
API visibility Binary compatibility validator build.gradle module.gradle On terminal
API visibility Binary compatibility validator module.api
API visibility Binary compatibility validator
API visibility metalava
API visibility metalava
Client Client Client Client API maintenance API surface
Client Client Client Client API maintenance API surface
Client Client Client Client API maintenance API surface
Client Client Client Client API maintenance API surface
API maintenance API lifecycle Created Deprecated (warning) Removed Deprecated (error)
API maintenance API lifecycle Created Deprecated (warning) Removed Deprecated (error)
API maintenance @Deprecated (warning)
API maintenance @Deprecated (warning)
API maintenance @Deprecated (warning)
API maintenance @Deprecated (warning)
API maintenance @Deprecated (warning) Show Context Actions
API maintenance @Deprecated (error)
API maintenance API lifecycle Created Deprecated (warning) Removed Deprecated (error)
v4.2.10 v4.2.20 v4.2.21 v4.3.0
API maintenance API lifecycle Created Deprecated (warning) Removed Deprecated (error)
v4.2.10 v4.2.20 v4.2.21 v4.3.0
API maintenance API lifecycle Created Deprecated (warning) Removed Deprecated (error)
v4.2.10 v4.2.20 v4.2.21 v4.3.0 Client
API maintenance API lifecycle Client Client Created Deprecated (warning) Removed
Deprecated (error) v4.2.10 v4.2.20 v4.2.21 v4.3.0
API maintenance API lifecycle Client Client Created Deprecated (warning) Removed
Deprecated (error) v4.2.10 v4.2.20 v4.2.21 v4.3.0
API maintenance Deprecations
Client Client Client Client API maintenance @RequiresOptIn
Client Client Client Client API maintenance @RequiresOptIn Experimental
Client Client Client Client API maintenance @RequiresOptIn @RequiresOptIn
API maintenance @RequiresOptIn
API maintenance @RequiresOptIn
API maintenance @RequiresOptIn
API maintenance @RequiresOptIn
API maintenance @RequiresOptIn
API maintenance @RequiresOptIn
API maintenance @RequiresOptIn Core module UI module
API maintenance @RequiresOptIn Core module UI module Client Client
API maintenance @RequiresOptIn Core module UI module Client Client
API maintenance @RequiresOptIn Core module UI module Client Client
API maintenance @RequiresOptIn Core module UI module Client Client
API maintenance @RequiresOptIn Core module UI module Client Client
API maintenance @RequiresOptIn
API maintenance @RequiresOptIn
References • Kotlin Docs ◦ https://kotlinlang.org/docs/home.html • Mastering API Visibility
in Kotlin (Márton Braun) ◦ https://zsmb.co/mastering-api-visibility-in-kotlin/ • KEEP - Kotlin Evolution and Enhancement Process ◦ https://github.com/Kotlin/KEEP • Binary Compatibility Validator ◦ https://github.com/Kotlin/binary-compatibility-validator • Effective Kotlin ◦ https://leanpub.com/effectivekotlin • Balloon ◦ https://github.com/skydoves/Balloon • Stream Chat Android ◦ https://github.com/GetStream/stream-chat-android
Reach out
[email protected]
https://github.com/skydoves https://twitter.com/github_skydoves https://medium.com/@skydoves
Thank You!