Upgrade to Pro — share decks privately, control downloads, hide ads and more …

Designing robust APIs in Kotlin

Jaewoong
March 17, 2022

Designing robust APIs in Kotlin

Designing robust APIs in Kotlin.

Jaewoong

March 17, 2022
Tweet

More Decks by Jaewoong

Other Decks in Technology

Transcript

  1. Designing robust APIs in Kotlin
    Jaewoong Eum

    View Slide

  2. About me
    github.com/skydoves

    View Slide

  3. How to build solid APIs? 🤔

    View Slide

  4. API design API surface

    View Slide

  5. API design
    Client
    Client
    Client
    Client
    API surface

    View Slide

  6. API design
    Client
    Client
    Client
    Client
    API surface

    View Slide

  7. API design
    Client
    Client
    Client
    Client
    API surface

    View Slide

  8. API design
    Client
    Client
    Client
    Client
    API surface

    View Slide

  9. API design Minimal API surface area

    View Slide

  10. API design
    Client
    Client
    Client
    Client
    Minimal API surface area

    View Slide

  11. API design
    Client
    Client
    Client
    Client
    Minimal API surface area

    View Slide

  12. API design
    Client
    Client
    Client
    Client
    Minimal API surface area

    View Slide

  13. API visibility
    private internal
    importance
    protected public
    Visibility modifiers

    View Slide

  14. API visibility
    public
    importance
    Client
    Client
    Client
    private internal
    protected
    Visibility modifiers

    View Slide

  15. API visibility Property

    View Slide

  16. API visibility Property
    setter getter

    View Slide

  17. API visibility Property
    // penguin
    setter getter

    View Slide

  18. API visibility Property
    setter getter
    Cannot assign to 'data': the setter is private in 'MyViewModel`

    View Slide

  19. API visibility Extension

    View Slide

  20. API visibility Extension

    View Slide

  21. API visibility Extension
    Unresolved reference

    View Slide

  22. API visibility Extension

    View Slide

  23. API visibility Extension
    😵

    View Slide

  24. API visibility @JvmSynthetic

    View Slide

  25. API visibility @JvmSynthetic

    View Slide

  26. API visibility @JvmSynthetic
    Unresolved reference

    View Slide

  27. API visibility @JvmSynthetic

    View Slide

  28. API visibility @PublishedApi

    View Slide

  29. API visibility @PublishedApi

    View Slide

  30. API visibility @PublishedApi

    View Slide

  31. API visibility @PublishedApi

    View Slide

  32. API visibility @PublishedApi

    View Slide

  33. API visibility KEEP

    View Slide

  34. API visibility Explicit API mode

    View Slide

  35. API visibility Explicit API mode

    View Slide

  36. API visibility Explicit API mode (strict)

    View Slide

  37. API visibility Explicit API mode (strict)

    View Slide

  38. API visibility Explicit API mode (strict)

    View Slide

  39. API visibility Explicit API mode (strict)

    View Slide

  40. API visibility Explicit API mode (warning)

    View Slide

  41. API visibility Explicit API mode (warning)

    View Slide

  42. API visibility Binary compatibility validator

    View Slide

  43. API visibility Binary compatibility validator
    build.gradle
    module.gradle
    On terminal

    View Slide

  44. API visibility Binary compatibility validator
    module.api

    View Slide

  45. API visibility Binary compatibility validator

    View Slide

  46. API visibility metalava

    View Slide

  47. API visibility metalava

    View Slide

  48. Client
    Client
    Client
    Client
    API maintenance API surface

    View Slide

  49. Client
    Client
    Client
    Client
    API maintenance API surface

    View Slide

  50. Client
    Client
    Client
    Client
    API maintenance API surface

    View Slide

  51. Client
    Client
    Client
    Client
    API maintenance API surface

    View Slide

  52. API maintenance API lifecycle
    Created
    Deprecated
    (warning)
    Removed
    Deprecated
    (error)

    View Slide

  53. API maintenance API lifecycle
    Created
    Deprecated
    (warning)
    Removed
    Deprecated
    (error)

    View Slide

  54. API maintenance @Deprecated (warning)

    View Slide

  55. API maintenance @Deprecated (warning)

    View Slide

  56. API maintenance @Deprecated (warning)

    View Slide

  57. API maintenance @Deprecated (warning)

    View Slide

  58. API maintenance @Deprecated (warning)
    Show Context Actions

    View Slide

  59. API maintenance @Deprecated (error)

    View Slide

  60. API maintenance API lifecycle
    Created
    Deprecated
    (warning)
    Removed
    Deprecated
    (error)
    v4.2.10 v4.2.20 v4.2.21 v4.3.0

    View Slide

  61. API maintenance API lifecycle
    Created
    Deprecated
    (warning)
    Removed
    Deprecated
    (error)
    v4.2.10 v4.2.20 v4.2.21 v4.3.0

    View Slide

  62. API maintenance API lifecycle
    Created
    Deprecated
    (warning)
    Removed
    Deprecated
    (error)
    v4.2.10 v4.2.20 v4.2.21 v4.3.0
    Client

    View Slide

  63. API maintenance API lifecycle
    Client
    Client
    Created
    Deprecated
    (warning)
    Removed
    Deprecated
    (error)
    v4.2.10 v4.2.20 v4.2.21 v4.3.0

    View Slide

  64. API maintenance API lifecycle
    Client
    Client
    Created
    Deprecated
    (warning)
    Removed
    Deprecated
    (error)
    v4.2.10 v4.2.20 v4.2.21 v4.3.0

    View Slide

  65. API maintenance Deprecations

    View Slide

  66. Client
    Client
    Client
    Client
    API maintenance @RequiresOptIn

    View Slide

  67. Client
    Client
    Client
    Client
    API maintenance @RequiresOptIn
    Experimental

    View Slide

  68. Client
    Client
    Client
    Client
    API maintenance @RequiresOptIn
    @RequiresOptIn

    View Slide

  69. API maintenance @RequiresOptIn

    View Slide

  70. API maintenance @RequiresOptIn

    View Slide

  71. API maintenance @RequiresOptIn

    View Slide

  72. API maintenance @RequiresOptIn

    View Slide

  73. API maintenance @RequiresOptIn

    View Slide

  74. API maintenance @RequiresOptIn

    View Slide

  75. API maintenance @RequiresOptIn
    Core module UI module

    View Slide

  76. API maintenance @RequiresOptIn
    Core module UI module
    Client
    Client

    View Slide

  77. API maintenance @RequiresOptIn
    Core module UI module
    Client
    Client

    View Slide

  78. API maintenance @RequiresOptIn
    Core module UI module
    Client
    Client

    View Slide

  79. API maintenance @RequiresOptIn
    Core module UI module
    Client
    Client

    View Slide

  80. API maintenance @RequiresOptIn
    Core module UI module
    Client
    Client

    View Slide

  81. API maintenance @RequiresOptIn

    View Slide

  82. API maintenance @RequiresOptIn

    View Slide

  83. 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

    View Slide

  84. Reach out
    [email protected]
    https://github.com/skydoves
    https://twitter.com/github_skydoves
    https://medium.com/@skydoves

    View Slide

  85. Thank You!

    View Slide