登录
首页 >  Golang >  Go问答

在 REST 查询中指定数据结构

来源:stackoverflow

时间:2024-04-16 22:57:32 183浏览 收藏

有志者,事竟成!如果你在学习Golang,那么本文《在 REST 查询中指定数据结构》,就很适合你!文章讲解的知识点主要包括,若是你对本文感兴趣,或者是想搞懂其中某个知识点,就请你继续往下看吧~

问题内容

我正在尝试用 go 为数据库编写基本的 rest 风格查询。我以前从未使用过 rest,所以我有点不清楚能够处理任何类型的数据的原则应该深入到什么程度。在客户端代码中对从数据库获取的数据/数据类型进行假设是否违反了原则?我应该编写前者还是后者的struct来将json数据解压到其中?

type datum struct {
    ID      int16 `json:"src_id"`
    Time    int64 `json:"timestamp"`
    Lat     float64 `json:"latitude"`
    Long    float64 `json:"longitude"`
    Thermo  float64 `json:"ir_thermo_temperature_filtered"`
    Humid   float64 `json:"relative_humidity"`
    AirTemp float64 `json:"air_temp"`
    Wind    float64 `json:"wind_speed_world_filtered"`
}

type datum struct {
    ID      interface{} `json:"src_id"`
    Time    interface{} `json:"timestamp"`
    Lat     interface{} `json:"latitude"`
    Long    interface{} `json:"longitude"`
    Thermo  interface{} `json:"ir_thermo_temperature_filtered"`
    Humid   interface{} `json:"relative_humidity"`
    AirTemp interface{} `json:"air_temp"`
    Wind    interface{} `json:"wind_speed_world_filtered"`
}

我的想法是,后一个结构可能违反了 rest 原则,因为它对您将从服务器接收的数据类型做出假设,因此它不完全统一。我希望我是不正确的,但我可以看到结论可能来自于对 rest 原则的严格阅读。


解决方案


我相信您错误地阅读了 REST 原则。

REST 是一种架构,而不是具有严格规则的协议。关键点是它是无状态的,并且它代表类似于网络运行方式的底层资源。

REST 描述了资源(在您的情况下为 datum)、如何访问和修改这些资源,以及这些资源应如何描述相对于该资源可以访问哪些其他资源。这与网页浏览的工作原理类似:每个页面都有一个唯一的 URI,并且该页面可能包含数据(datum 的字段)以及您可以从该页面访问的其他页面的链接。

因此,在您的情况下,datum 的字段类似于网页的内容。如果您有可从 datum 访问的其他资源,则必须将这些资源作为 URI 提供给调用者,并且调用者可以跟踪它们。这并不意味着您必须放弃类型安全并处理各种数据。再次强调,这不是一个协议。如果提交的信息不是预期的格式,您应该返回错误。由于您的通信格式是 JSON,因此您的数据类型仅限于字符串、数字和布尔值。您期望 ID 为整数,如果客户端向您发送字符串(即使它类似于“123”),则这是一个错误。使用第一个结构,如果解组输入返回错误,则将其返回给调用者。

以上就是《在 REST 查询中指定数据结构》的详细内容,更多关于的资料请关注golang学习网公众号!

声明:本文转载于:stackoverflow 如有侵犯,请联系study_golang@163.com删除
相关阅读
更多>
最新阅读
更多>
课程推荐
更多>