Что такое схема графиков, называя лучшие практики?

Я начинаю разработку в нетривиальном приложении, для которого мы рассматриваем 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. Вы найдете эту статью Ли Байрона.