【问题标题】:In Elixir, should I be using structs to model data contracts in an SDK I'm building for an API?在 Elixir 中,我是否应该在为 API 构建的 SDK 中使用结构来建模数据合约?
【发布时间】:2017-07-22 05:23:43
【问题描述】:

我是 Elixir 的新手,并且通常是函数式编程,我正在寻找一些指导,以了解在我的 SDK 中构建数据合约的结构模型是否是“正确”的事情为 Xero API 构建。

SDK 的要点在于它公开了 Xero API 的端点以及对这些端点的操作,执行 OAuth1.0a 授权,然后向 API 发出 Web 请求。我的 SDK 应该返回给消费者什么?

我应该

  • 只返回原始 HTTPoison 响应并留给消费者处理?
  • 使用 Poison 将返回的 JSON 负载反序列化为映射并返回?
  • 为每个数据合约创建结构并使用 Poison 将 JSON 字符串解码为这些结构?

在 Elixir/函数式编程中还有其他更正确的方法吗?

API 还支持 PUT/POST 操作,因此如果使用结构,可以将结构提供给这些操作并编码为 JSON 字符串。

API 中的数据合约非常复杂,有很多嵌套。 You can see an example of one in the documentation

This is the SDK repo for anyone interested

【问题讨论】:

  • 我看不出这个问题与语言范式有什么关系:无论是函数式、命令式、OO 还是尚未发明的。无论如何,您应该只根据您的理解或消费者的需求来生产一些东西。当您不了解消费者的需求时,最好尽可能保持通用(因此使用地图)。无论您是否希望您的消费者是基于 Elixir 的,并且您有机会与他们共享结构代码 - 使用结构,他们都将具有开箱即用的实例化。在此,我投票结束基于意见的问题。
  • 因此,如果您在应用程序中的所有不同功能中传递大量信息,那么结构将是最佳解决方案。

标签: functional-programming elixir


【解决方案1】:

如果您询问是否应在请求有效负载到达您后立即将其转换为结构,那么答案是肯定的。结构是底层的裸映射,但它们只使用:atoms 作为键,这意味着它们获取速度更快。

对于以后可能维护您的代码的其他程序员来说,它也更容易阅读。我还建议阅读this article.

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2015-10-27
    • 1970-01-01
    • 2015-01-23
    • 2015-11-17
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多