什么是GraphQL模式命名最佳实践?

时间:2016-12-02 02:54:59

标签: reactjs schema graphql idioms

我开始开发一个我们考虑使用GraphQL的非常重要的应用程序。在处理我们架构的初始草案时,我已经变得有点瘫痪,试图建立随着产品的成熟而扩展的命名约定。我真的很感激任何不得不发展架构并遇到或成功避免死角或不一致的人的见解:

  1. 保持名称&#34;界面&#34;通常是否有用/惯用?在界面的名称?例如,在大型应用中,<script type="text/javascript"> jQuery(document).ready(function() { jQuery('.star').each(function() { jQuery('[data-product-id="876"]').attr('id'); }); }); </script> Profile会更好吗?

    ProfileInterface
  2. 将单枚举值指定为&#34;常量&#34;

    是否常见?
    interface ProfileInterface {
      # fields here...
    }
    
    type UserProfile implements ProfileInterface {
      # implemented fields here...
    }
    
  3. 最佳做法是将全部或全部enum GeoJSONFeatureTypeConstant { feature } interface GeoJSONFeatureInterface { id: ID type: GeoJSONFeatureTypeConstant! geometry: GeoJSONGeometryInterface! properties: GeoJSONProperties } 声明为objectscalar,两者之间的界线在哪里?想象一下type类型,通常表示为数组Point;哪个更像是白痴?

    [x,y]
  4. 与GraphQL中的命名约定或类型声明特别相关的任何其他最佳实践,如果没有经验,很难知道。
  5. 提前致谢!

    这个问题并没有获得我想要的动力,因此我会在找到它们时开始发布有用的片段,这可能会演变成各种答案。

      

    使用输入结尾命名输入类型是一个有用的约定,   因为您经常需要输入类型和输出类型   对于单个概念对象而言略有不同。

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

2 个答案:

答案 0 :(得分:10)

我思考这些问题,希望这对你有所帮助。

1。我不认为在每个界面的末尾附加接口都是惯用的。更改一个描述性名称要好得多。考虑与接口有关的GraphQL Specification中提供的示例。他们不会将Interface附加到他们的任何类型。

2。只有存在多个相关值时,枚举才有用。当只有一个可能的值时,我没有看到包含类型是如何有用的。枚举值也以与枚举相关的GraphQL Specification的所有大写和下划线命名。

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

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

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

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

答案 1 :(得分:3)

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