有哪些 GraphQL 架构命名最佳实践?

What are some GraphQL schema naming best practices?

我正在开始开发我们正在考虑使用 GraphQL 的重要应用程序。在处理我们的模式的初稿时,我在尝试建立将随着产品成熟而扩展的命名约定时变得有点瘫痪。我真的很感激任何必须将模式扩展到 运行 或成功避免死胡同或不一致的人的一些见解:

  1. 一般useful/idiomatic在接口名称中保留名称"Interface"吗?例如,在大型应用程序中 ProfileProfileInterface 更可取?

    interface ProfileInterface {
      # fields here...
    }
    
    type UserProfile implements ProfileInterface {
      # implemented fields here...
    }
    
  2. 将单个枚举值指定为 "constants" 是否很常见?

    enum GeoJSONFeatureTypeConstant {
      feature
    }
    
    interface GeoJSONFeatureInterface {
      id: ID
      type: GeoJSONFeatureTypeConstant!
      geometry: GeoJSONGeometryInterface!
      properties: GeoJSONProperties
    }
    
  3. 将全有或全无 object 声明为 scalartype 是最佳做法吗?两者之间的界线在哪里?想象一个 Point 类型通常表示为数组 [x,y];哪个更地道?

    scalar Point
    
    type Point {
      x: Float
      y: Float
    }
    
  4. 任何其他与 GraphQL 中的命名约定或类型声明相关的最佳实践,如果没有经验则很难理解。

提前致谢!


这个问题没有得到我想要的动力,所以我将开始发布我发现的有用片段,这些片段可能会演变成某种答案。

Naming input types with Input on the end is a useful convention, because you will often want both an input type and an output type that are slightly different for a single conceptual object.

http://graphql.org/graphql-js/mutations-and-input-types/

我也在思考这些相同的问题,希望对您有所帮助。

1. 我不认为在每个接口的末尾附加接口是惯用的。取而代之的是一个描述性名称要好得多。考虑 GraphQL Specification 中提供的与接口相关的示例。他们不将接口附加到他们的任何类型。

2. 枚举只有在有多个相关值时才有优势。当只有一个可能的值时,我看不出包含类型有何帮助。根据与枚举相关的 GraphQL Specification,枚举值也使用全部大写和下划线命名。

3. 如果您决定实施标量类型,则由您来验证该字段。在这种特定情况下,提供 Point 作为类型最有意义,因为 Point 可以是 2-D 或 3-D。将其定义为一种类型更具声明性。

日期、电子邮件和 Url 等值是标量类型的常见示例。它们提供语义值,客户将知道对这些字段的期望。

这是自定义标量的相关 section。 这是一个 example.

4. 您会发现 this Lee Byron 的文章很有帮助。

我前一段时间发现了这个 graphql API design tutorial from Shopify。我认为没有明确的章节,但最佳实践 w.r.t。整个教程中的命名约定。