【问题标题】:How to use Time type as scalar in a GraphQL SDL?如何在 GraphQL SDL 中使用时间类型作为标量?
【发布时间】:2020-08-04 21:02:08
【问题描述】:

我有一个对象“业务”,我正在尝试在GraphQL 中对其进行模式化。由于 Graphql 上默认不提供 DateTime 和 Time,因此我遇到了以下库:github

Business.graphql

type Business {
    businessId: ID!
    name: String!
    createdAt: Date!
    closeHour: Time
}

不幸的是,该库仅提供一个 DateTime。如何仅将“时间”(即 15:00 或 09:45)用于 closeHour 属性?有没有其他图书馆可以提供帮助?

【问题讨论】:

    标签: graphql graphql-js graphql-schema


    【解决方案1】:

    “日期”和“日期时间”可能很棘手。例如,“15:00”是太平洋时间下午 3:00?

    许多(大多数)实现通过将“日期时间”存储为相对于某个“纪元”的大整数来解决该问题。例如,“0”可能表示“自 1970 年 1 月 1 日以来的秒数”。

    也许您可以考虑将 GraphQL “DateTime”存储为 ISO 8601 字符串,或使用此模块:https://www.npmjs.com/package/graphql-iso-date


    在“模式”级别(相对于 JS 代码,正如我上面建议的那样),您可能会考虑这样:

    GraphQL Spec

    3.5 标量:

    标量 ScalarTypeDefinition 说明optscalarNameDirectivesConstopt 标量类型表示 GraphQL 类型系统中的原始叶值。 GraphQL 响应采取 层次树的形式;这些树上的叶子是 GraphQL 标量。

    所有 GraphQL 标量都可以表示为字符串,尽管取决于 正在使用的响应格式,可能有更合适的 给定标量类型的原语,服务器应该使用这些类型 在适当的时候。

    GraphQL 提供了许多内置的标量,但类型系统可以 添加具有语义含义的附加标量。例如,一个 GraphQL 系统可以定义一个称为 Time 的标量,它虽然被序列化为 字符串,承诺符合 ISO-8601。查询类型字段时 时间,然后您可以依靠解析结果的能力 ISO-8601 解析器并使用特定于客户端的原语来表示时间。

    【讨论】:

      猜你喜欢
      • 2019-01-07
      • 2019-04-10
      • 2021-06-22
      • 2017-09-06
      • 2018-09-28
      • 2019-10-19
      • 2021-05-11
      • 1970-01-01
      相关资源
      最近更新 更多