如何在 GraphQL 中对“索引”列表与“显示”详细信息进行建模?

Fei*_*anZ 5 rest restful-architecture graphql

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

在 Rails/RESTful 系统中,这将对应于资源上的indexshow操作Folder;后者将接收id指定所需文件夹的参数。这个模式在“惯用的”GraphQL 中会是什么样子?

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

type Query {
  folders: [Folder]
  folder(id: String!): Folder
}
Run Code Online (Sandbox Code Playgroud)

这里有一些重复,这看起来很混乱,并且使客户端更难自省和理解模式。

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

type Query {
  folder(id: String): [Folder]
}
Run Code Online (Sandbox Code Playgroud)

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

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

Jor*_*ers 0

我使用第二种方法。通过这种方式,您可以稍后向同一端点添加更多参数。也许一个文件夹有一个路径,或者您想根据创建日期进行过滤。