Какие схемы GraphQL называя лучшие практики?
я начинаю разработку нетривиального приложения, для которого мы рассматриваем 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]
; что было бы больше idiomadic?scalar Point type Point { x: Float y: Float }
- любые другие рекомендации, конкретно связанные с соглашениями об именах или объявлениями типов в GraphQL, которые было бы трудно узнать без опыта.
спасибо заранее!
этот вопрос не набрал тот импульс, который мне бы хотелось, поэтому я собираюсь начать публиковать полезные фрагменты, как я их нахожу, что может перерасти в ответ.
именование типов ввода с Вклад в конце-полезное соглашение, потому что вам часто понадобится как тип ввода, так и тип вывода, который несколько отличаются для одного концептуального объекта.
1 ответов
Я размышлял над этими же вопросами, и я надеюсь, что это будет полезно для вас.
1. Я не считаю, что добавление интерфейса в конце каждого интерфейса является идиоматическим. Гораздо лучше иметь описательное имя. Рассмотрим пример, приведенный в Спецификация GraphQL относящиеся к интерфейсам. Они не добавляют интерфейс ни к одному из своих типов.
2. перечисления выгодны только тогда, когда есть несколько связанных значений. Я не вижу, как включение типа полезно, когда есть только одно возможное значение. Значения перечисления также называются со всеми шапками и подчеркиваниями на Спецификация GraphQL относящиеся к перечислениям.
3. если вы решили реализовать скалярный тип, то это до вас, чтобы проверить поле. В этом конкретном случае предоставление точки как типа имеет наибольший смысл, поскольку точка может быть 2-D или 3-D. определение ее как типа является более декларативным.
значения, такие как дата, электронная почта и Url, являются общими примерами для скалярных типов. Они предоставляют семантическую ценность, и клиенты будут знать, чего ожидать от этих полей.
вот раздел для пользовательских скаляры. Вот это пример.
4. вы найдете этой статья ли Байрона полезна.