rest – 如何在GraphQL中建模“索引”列表与“显示”细节?

我的数据模型有两个资源:文件夹和消息.每条消息都属于一个文件夹.有时我会想要获取文件夹列表(包括每个文件夹的一些字段).有时我会想要获取特定文件夹的详细信息(包括该文件夹的一些字段和消息).

在Rails / RESTful系统中,这将对应于文件夹资源上的索引和显示操作;后者将收到指定所需文件夹的id参数.这个架构在“惯用”GraphQL中会是什么样子?

一种方法可能是每个操作都有一个字段:

type Query {
  folders: [Folder]
  folder(id: String!): Folder
}

这里有一些重复,这似乎很混乱,使客户更难以内省和理解架构.

也许可以使用可为空的参数删除重复:

type Query {
  folder(id: String): [Folder]
}

如果传递了id,则只返回该文件夹的详细信息(作为单项数组).如果id为nil,那么它将获取所有文件夹的详细信息.这种重载似乎增加了一些隐藏的复杂性.

哪种方法是“更好的做法”?有没有更好的方法来模拟这种情况?

最佳答案 TLDR:字段很便宜,使用它们.

我建议第一种方法.以同样的方式,REST API可能会被标记混乱以触发不同的行为,因此具有各种参数的字段也是如此.通过创建两个不同的字段,您还可以让类型系统提供更强的客户端保证:

类型Query {
  文件夹:[文件夹!]!
  folder(id:String!):文件夹
}

在这种情况下,您将始终为文件夹获取某种列表,并且它不包含任何空值.空虚只是空名单. API文档本身,如果您尝试将越来越多的可选参数混合到一个字段中,则可能不是这种情况.

此外,如果您需要对文件夹进行分页,则需要针对该端点的特定于分页的参数,以及可能是connection pattern的中间结构.

点赞