3

虽然使用 GraphiQL 效果很好,但我的老板要求我实现一个用户界面,用户可以在其中检查通过 UI 元素(如复选框、映射关系并获取数据)呈现给他们的元素,这样做将为该人生成一个 graphql 输入,调用API 并将结果返回给用户。

所以,基本上这涉及2代。从 GraphQL 模式生成用户界面并根据用户的选择生成 GraphQL 输入查询。

我进行了搜索,但找不到任何已经执行此操作的工具。我的服务器在 Node 中,我正在使用 Express GraphQL。我使用 https://github.com/graphql-cli/graphql-cli 将我的 express 模式转换为 GraphQLSchema 语言,并使用https://github.com/sheerun/graphqlviz/blob/master上的自省函数自省了 GraphQLSchema语言/cli.js

我得到的对象是这样的(下面只给出部分模式输出)`

"data": {
        "__schema": {
            "queryType": {
                "name": "Query"
            },
            "mutationType": {
                "name": "Mutation"
            },
            "subscriptionType": null,
            "types": [{
                "kind": "OBJECT",
                "name": "Query",
                "description": null,
                "fields": [{
                    "name": "employee",
                    "description": null,
                    "args": [{
                        "name": "ecode",
                        "description": null,
                        "type": {
                            "kind": "SCALAR",
                            "name": "String",
                            "ofType": null
                        },
                        "defaultValue": null
                    }],

`

我正在循环尝试生成 UI 的元素,但我被卡住了。

做这个的最好方式是什么?提前致谢。

4

1 回答 1

2

那么对于从自省查询生成 ui 的部分,我认为响应包含足够的数据来获得足够的 ui(每个字段的描述可以用作每个字段输入框的占位符)。如果您问如何从内省响应中生成动态表单,您可以查看其他创建从 json 到 html 表单的转换器的项目以获取灵感/使用(查看https://github.com/ brutusin/json-forms/blob/master/README.md#cdn)。对于复杂的字段(不是原始类型),您可能需要做更多的工作。

对于从 ui 生成模式,您可以使用任何查询构建器工具,并根据用户输入构建查询。每个组合框都将映射到特定的 SCHEMANAME.FIELDNAME 并且值将是输入框的值。

我希望它有点帮助。顺便说一句,这听起来像是一个有趣的工具,所以如果你成功了,请告诉我们!

于 2018-04-25T05:53:56.823 回答