Что такое схема графиков, называя лучшие практики?
Я начинаю разработку в нетривиальном приложении, для которого мы рассматриваем GraphQL. При работе над первоначальным проектом нашей схемы я стал немного парализованным, пытаясь установить соглашения об именах, которые будут масштабироваться по мере созревания продукта. Я был бы очень признателен за то, что кто-то, кто должен был разработать схему и наткнулся на нее, или успешно избегал тупиков или несоответствий:
-
Как правило, полезно/идиоматично сохранять имя "Интерфейс" во имя интерфейса? Например, желательно ли Profile
или ProfileInterface
в большом приложении?
interface ProfileInterface {
# fields here...
}
type UserProfile implements ProfileInterface {
# implemented fields here...
}
-
Общепринято ли указывать значения одиночного перечисления как "константы"?
enum GeoJSONFeatureTypeConstant {
feature
}
interface GeoJSONFeatureInterface {
id: ID
type: GeoJSONFeatureTypeConstant!
geometry: GeoJSONGeometryInterface!
properties: GeoJSONProperties
}
-
Лучше всего объявить все или ничего object
как scalar
или type
, а где линия, нарисованная между двумя? Представьте, что тип Point
, который обычно представляется в виде массива [x,y]
; что было бы более идиоматичным?
scalar Point
type Point {
x: Float
y: Float
}
- Любые другие передовые методы, специально связанные с соглашениями об именах или объявлениями типов в GraphQL, которые будут трудно знать без опыта.
Спасибо заранее!
Этот вопрос не получил импульса, который мне бы очень понравился, поэтому я собираюсь начать публикацию полезных фрагментов, когда я их нахожу, что может превратиться в ответ рода.
Именование типов ввода с помощью ввода в конце - полезное соглашение, потому что вам часто требуется как тип ввода, так и тип вывода, который немного отличаются для одного концептуального объекта.
http://graphql.org/graphql-js/mutations-and-input-types/
Ответы
Ответ 1
Я размышлял об этих же вопросах, и я надеюсь, что это будет полезно для вас.
1. Я не считаю, что добавление интерфейса в конце каждого интерфейса является идиоматичным. Вместо этого лучше иметь описательное имя. Рассмотрим пример, приведенный в Спецификация GraphQL, относящийся к интерфейсам. Они не добавляют интерфейс к любому из их типов.
2. Перечисления являются только преимущественными, если имеется несколько связанных значений. Я не вижу, как включение типа полезно, когда есть только одно возможное значение. Значения Enum также называются всеми шапками и символами подчеркивания в Спецификация GraphQL, относящаяся к Enums.
3. Если вы решили реализовать скалярный тип, вам нужно проверить это поле. В этом конкретном случае предоставление точки как типа имеет наибольший смысл, поскольку точка может быть двухмерной или трехмерной. Определение его как типа является более декларативным.
Значения, такие как Date, Email и Url, являются типичными примерами для скалярных типов. Они обеспечивают семантическое значение, и клиенты будут знать, чего ожидать от этих полей.
Здесь для пользовательских скаляров.
Здесь пример.
4. Вы найдете эту статью Ли Байрона.