Google Cloud 中的 GraphQL:将 Restful API 迁移到 GraphQL

阅读时长 7 分钟读完

介绍

GraphQL 是由 Facebook 在 2015 年推出的一种语言,它通过一套清晰的 API 描述语言来替代 RESTful API,并提供了一个用于查询和执行数据的运行时库。GraphQL 使得客户端可以精确控制所获取的数据,避免了 RESTful API 中出现的“过渡获取”(Over-fetching)或“不完整获取”(Under-fetching)的问题。

许多企业已经从传统的 RESTful API 迁移到了 GraphQL,其中包括 Google。Google Cloud 中的云函数(Cloud Functions)可以轻松地将 Restful API 迁移到 GraphQL,使得开发者可以更加方便地管理和处理数据。

在本篇文章中,我们将介绍在 Google Cloud 中如何将 Restful API 迁移到 GraphQL,并且提供相关的示例代码和指导意义。

一个完整的 GraphQL API

在 GraphQL 中,我们可以通过定义一个 Schema 来描述所有的可查询字段和类型,该 Schema 包含了各种 Query 和 Mutation,它们是类似于 REST 方法的操作或修改数据的方法。

以下是一个示例的 Schema:

-- -------------------- ---- -------
---- ------- -
    --- ---
    ----- -------
    ------------ ------
    ------ ------
    ------ -------
-

---- ----- -
    ----------- ----- -------
    --------------- -------- -----------
-

---- -------- -
    ------------------- -------- ------------ ------- ------ ------- ------ --------- --------
    ----------------- ---- ----- ------- ------------ ------- ------ ------ ------ -------- --------
    ----------------- ----- --------
-

以上代码中,我们定义了一个 Product 类型,该类型包含了四个字段,它们分别是 idnamedescriptionpricecolor。我们还定义了一个 Query 类型,Query 类型包含了两个方法,一个是获取产品 product,通过传入一个 id 参数返回一个 Product 对象;另一个是获取产品列表 products,通过传入一个 color 参数来过滤出对应颜色的 Product 列表。

同时,我们还定义了一个 Mutation 类型,Mutation 类型包含了三个方法,一个是创建产品 createProduct,通过传入 name、description、price 和 color 参数来创建一个新的 Product 对象;另一个是修改产品 updateProduct,通过传入 id 和需要修改的字段来更新对应的 Product 对象;最后,我们还定义了删除一个产品 deleteProduct,通过传入 id 参数删除一个 Product 对象。

将 Restful API 迁移到 GraphQL

通过上面的 GraphQL Schema,我们可以看到相较于传统的 Restful API,GraphQL 可以更加精确地控制所获取的数据、避免查询结果中不必要的数据,同时还可以通过 Mutation 来操作数据。

在 Google Cloud 的云函数中,我们可以通过编写一个 index.js 文件,该文件会将所有的查询和操作代码整合到一个文件中,并且将 GraphQL 请求解析为对应的函数调用。

以下是一个示例的 index.js 文件:

-- -------------------- ---- -------
----- - ------------- --- - - -----------------------------------------

----- -------- - ----
---- ------- -
    --- ---
    ----- -------
    ------------ ------
    ------ ------
    ------ -------
-

---- ----- -
    ----------- ----- -------
    --------------- -------- -----------
-

---- -------- -
    ------------------- -------- ------------ ------- ------ ------- ------ --------- --------
    ----------------- ---- ----- ------- ------------ ------- ------ ------ ------ -------- --------
    ----------------- ----- --------
---

----- --------- - -
    ------ -
        --------------- - -- -- -------- -
            -- -- -- --- ------- --
        --
        ---------------- - ----- -- -------- -
            -- ----- ----- - ------- ----
        -
    --
    --------- -
        --------------------- - ----- ------------ ------ ----- -- -------- -
            -- ------ ------- --
        --
        --------------------- - --- ----- ------------ ------ ----- -- -------- -
            -- -- -- --- ------- ----
        --
        --------------------- - -- -- -------- -
            -- -- -- --- ------- --
        -
    -
--

----- ------ - --- -------------- --------- --------- ---

--------------- - -----------------------

以上代码中,我们首先定义了一个包含 Product、Query 和 Mutation 三个类型的 Schema,同时还定义了对应类型的结构体和字段。接着,我们定义了一个 resolvers 对象作为解析器,该对象包含了三个方法,一个是查询 id 对应的 Product 对象 product,一个是获取颜色为 color 的 Product 对象列表 products,另外,我们还定义了三个目的在于创建、更新和删除一个 Product 对象的方法,分别是 createProductupdateProductdeleteProduct

最后,我们可以通过 ApolloServer 来创建一个服务器,并将 typeDefs 和 resolvers 传入其中,最后通过 createHandler() 方法将服务器变为一个可执行的函数,以便于进行 GraphQL 请求的解析和处理。

总结

通过本篇文章的介绍,我们了解了 GraphQL 在 Google Cloud 中的应用,了解了如何将 Restful API 迁移到 GraphQL 以及如何创建一个完整的 GraphQL API。如果您有类似的迁移需求,那么可以参考本文提供的示例代码,将 Restful API 迁移到 GraphQL,优化您的数据获取与操作。

来源:JavaScript中文网 ,转载请注明来源 https://www.javascriptcn.com/post/651940e695b1f8cacd1728ce

纠错
反馈