是否可以使用Ktor和/或Kotlin多平台在Rest API和Android应用程序之间“共享”公开的数据?

3phpmpom  于 2023-01-11  发布在  Android
关注(0)|答案(2)|浏览(155)

主要思想是拥有一种“序列化/反序列化模块”,可以在后端(使用Ktor)和Android应用程序之间共享。
我不知道这能走多远,但我可以想象,路由是“公开”的,供前端应用程序使用(就像Retrofit对它的带注解的接口所做的那样),(去)序列化逻辑也是共享的。
因此,基本上,是否可以在服务器(我猜使用Ktor)和Android应用程序(Java /Kotlin)之间不仅“共享”API响应的“POJO / POKO”表示,而且还”共享“具有预期参数的可能端点?

sulc1iza

sulc1iza1#

是的。
您可以使用多项目gradle构建构建来构建代码,如下所示:

      • API模块**:把你的DTO,searialization/deserialization和route作为常量放在这里。在这里也定义一个http客户端到你的api(Ktor也有一个http客户端)。OpenAPI也是你可以用来定义你的http api然后生成客户端的东西。
      • 服务器模块**:依赖于API模块来实现定义了DTO的路由。如果您在API中定义了客户端,请测试您的服务器实现是否满足它。
      • 安卓模块**:依赖于API模块。使用客户端,并模拟它进行测试。

这有点像SOLID的Dependency Inversion Principal。您在一个单独的模块(API模块)中定义数据交换的接口。然后,实现(服务器模块)和更高级别的代码(Android模块)都依赖于它的使用和实现。

sh7euo9m

sh7euo9m2#

我试过运行这样的东西,但它不以我的方式工作

主要答案:目前没有。

Kotlin多平台模式下Ktor和Android之间无法共享数据,让我们来解决这个问题:

  • 您的共享库将是多平台的。它构建在特殊平台中以支持所有平台
  • Android是多平台的,可以获取您的库。当您添加库时,Android KMM项目将识别它需要的部分。
  • Ktor(作为服务器)正在使用JVM或Kotlin/Native,这意味着您不能只提供您的KMM库并将其放在Ktor中,您的库结构是为另一个KMM项目配置的,不能由Ktor获取,它不知道如何处理它。

多平台和多平台是朋友.那么谁不被淘汰呢

理论性回答:是的。

由于多平台库构建成部件之一应该是. jar,你可以共享它的Android项目和Ktor项目。我不知道你可以在哪里找到他们,但我认为这是可能的。
在我的情况下,这是不合适的,因为它不是跨平台的方式。你不能有iOS,macOS在这种情况下。你必须建立和存储您的. jar分开。
Example of KMM library
There are some facts about build artifacts

相关问题