【问题标题】:How do i convert my existing REST Api to a GraphQL API如何将现有的 REST Api 转换为 GraphQL API
【发布时间】:2020-09-17 19:38:46
【问题描述】:

我是 GraphQL 的新手,我正在尝试将我现有的 REST Api 之一转换为 GraphQL API

以下是目前可用于 REST API 的操作 1. POST - 创建单个/多个文档(批量操作)以 Http 204 响应 2. GET - 获取单个文档响应单个文档 Http 200 3. PUT - 更新单个/多个文档(批量操作)以 Http 204 响应

【问题讨论】:

    标签: api rest graphql


    【解决方案1】:

    GraphQL 有两种类型的请求,查询(获取内容)和突变(更改内容)。

    对于一个简单的 GraphQL 初学者,我可以推荐 Apollo Server。它拥有我见过的最好的文档之一,并为您提供了一个沙箱,您可以在其中测试您的请求。

    下一步是定义 GraphQL 架构、类型和解析器。

    相关的架构可能类似于

    type Document {
        id: String
        ...
    }
    
    type Query {
        documentById(id: String!): Document
    }
    
    type Mutation {
        createDocument(document: Document!): Document!
        createDocuments(documents: [Document!]): [Document!]
        updateDocument(document: Document!): Document!
        updateDocuments(documents: Document!): [Document!]
    }
    
    schema {
        query: Query
        mutation: Mutation
    }
    

    解析器是您的请求的处理程序,它们可以非常具体,但应该与您已经在 REST 中实现的非常相似。

    另外,请记住 gql 不会使用 HTTP 状态来表示错误,所有请求都会导致 200,即使它们失败。如果出现故障,Gql 会在结果中为您提供错误对象,因此您的 API 使用者的错误处理必须反映这一点。

    【讨论】:

    • 感谢您的回复,这就是我感到困惑的地方,因为在尝试创建/更新多个文档时发生了突变,返回了什么/可以返回什么例如:mutation{ Users(userInput:{ }), {_id} }
    • 对于查询,我们允许某些用户定义的字段是一个未预定义的键值对,那么如何在服务器上为这些字段编写查询
    • 如果我理解了您的问题,突变基本上可以返回您想要的任何内容,尽管返回操作更改的内容是一个好习惯。
    • 能否详细说明您提出的第二个问题?我会使用 JSON 字符串作为通用键值存储。据我所知,gql 中的所有字段都是强类型和预定义的,generalStorage: String 可以适用于您的用例。
    猜你喜欢
    • 1970-01-01
    • 2021-07-07
    • 1970-01-01
    • 2017-06-28
    • 2022-06-18
    • 2021-04-25
    • 1970-01-01
    • 2021-01-25
    相关资源
    最近更新 更多