有哪些 GraphQL 架构命名最佳实践?
What are some GraphQL schema naming best practices?
我正在开始开发我们正在考虑使用 GraphQL 的重要应用程序。在处理我们的模式的初稿时,我在尝试建立将随着产品成熟而扩展的命名约定时变得有点瘫痪。我真的很感激任何必须将模式扩展到 运行 或成功避免死胡同或不一致的人的一些见解:
一般useful/idiomatic在接口名称中保留名称"Interface"吗?例如,在大型应用程序中 Profile
或 ProfileInterface
更可取?
interface ProfileInterface {
# fields here...
}
type UserProfile implements ProfileInterface {
# implemented fields here...
}
将单个枚举值指定为 "constants" 是否很常见?
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 中的命名约定或类型声明相关的最佳实践,如果没有经验则很难理解。
提前致谢!
这个问题没有得到我想要的动力,所以我将开始发布我发现的有用片段,这些片段可能会演变成某种答案。
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.
我也在思考这些相同的问题,希望对您有所帮助。
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。整个教程中的命名约定。
我正在开始开发我们正在考虑使用 GraphQL 的重要应用程序。在处理我们的模式的初稿时,我在尝试建立将随着产品成熟而扩展的命名约定时变得有点瘫痪。我真的很感激任何必须将模式扩展到 运行 或成功避免死胡同或不一致的人的一些见解:
一般useful/idiomatic在接口名称中保留名称"Interface"吗?例如,在大型应用程序中
Profile
或ProfileInterface
更可取?interface ProfileInterface { # fields here... } type UserProfile implements ProfileInterface { # implemented fields here... }
将单个枚举值指定为 "constants" 是否很常见?
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 中的命名约定或类型声明相关的最佳实践,如果没有经验则很难理解。
提前致谢!
这个问题没有得到我想要的动力,所以我将开始发布我发现的有用片段,这些片段可能会演变成某种答案。
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.
我也在思考这些相同的问题,希望对您有所帮助。
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。整个教程中的命名约定。