Как использовать тип Time как скаляр в GraphQL SDL?

У меня есть объект "бизнес", и я пытаюсь схематизировать его в GraphQL. Поскольку DateTime и Time по умолчанию недоступны в Graphql, я столкнулся со следующей библиотекой: github.

Business.graphql:

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

К сожалению, библиотека предоставляет только DateTime. Как я могу использовать только "Время" (например, 15:00 или 09:45) для свойства closeHour? Есть ли другая библиотека, которая может помочь?

1 ответ

Решение

"Дата" и "DateTime" могут быть непростыми. Например, 15:00 15:00 по тихоокеанскому времени?

Многие (большинство) реализаций решают проблему, сохраняя "datetime" как большое целое число относительно некоторой "эпохи". Например, "0" может представлять "количество секунд с 1 января 1970 года".

Возможно, вы могли бы подумать о том, чтобы сохранить GraphQL "DateTime" в виде строки ISO8601 или использовать этот модуль: https://www.npmjs.com/package/graphql-iso-date


На уровне "схемы" (по сравнению с кодом JS, как я предлагал выше) вы можете подумать об этом:

Спецификация GraphQL

3.5 Скаляры:

Скаляры ScalarTypeDefinition Описание optscalarNameDirectivesConstopt Скалярные типы представляют примитивные конечные значения в системе типов GraphQL. Ответы GraphQL имеют форму иерархического дерева; листья на этих деревьях являются скалярами GraphQL.

Все скаляры GraphQL могут быть представлены в виде строк, хотя в зависимости от используемого формата ответа для данного скалярного типа может быть более подходящий примитив, и сервер должен использовать эти типы, когда это необходимо.

GraphQL предоставляет ряд встроенных скаляров, но системы типов могут добавлять дополнительные скаляры с семантическим значением. Например, система GraphQL может определить скаляр с именем Time, который, будучи сериализованным в виде строки, обещает соответствовать ISO-8601. При запросе поля типа Time вы можете положиться на способность анализировать результат с помощью анализатора ISO-8601 и использовать специфичный для клиента примитив для времени.

Другие вопросы по тегам