Как использовать тип времени в качестве скаляра в GraphQL SDL? - PullRequest
0 голосов
/ 22 апреля 2020

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

Business.graphql :

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

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

1 Ответ

0 голосов
/ 22 апреля 2020

«Дата» и «DateTime» могут быть хитрыми. Например, «15:00» 15:00 Pacifi c Time?

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

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


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

GraphQL Spe c

3.5 Скаляры:

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

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

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

...