|
| 1 | +# 远程模式(Remote Schemas) |
| 2 | + |
| 3 | +Hasura 为您提供带有授权和访问控制的 CRUD + 实时 GraphQL API。然而,在许多情况下,您需要编写包含自定义逻辑的 API(查询、变更)。例如,实现支付 API,或查询数据库中不存在的数据。 |
| 4 | + |
| 5 | +Hasura 具备合并远程 GraphQL 模式并提供统一 GraphQL API 的能力。可以将其视为自动化的模式合并。您只需构建自己的 GraphQL 服务,并将其 HTTP 端点提供给 Hasura。您的 GraphQL 服务可以使用任何编程语言或框架编写。 |
| 6 | + |
| 7 | +远程模式适用于以下场景: |
| 8 | + |
| 9 | +* 自定义变更(*例如:在插入数据前运行验证*) |
| 10 | +* 支持支付等功能,并提供一致的接口来访问它们,例如:即通过 GraphQL 引擎的 API 进行 |
| 11 | +* 从其他来源获取不同的数据(*例如:从天气 API 或另一个数据库*) |
| 12 | + |
| 13 | +为了支持自定义业务逻辑,您需要创建一个自定义的 GraphQL 服务器(请参阅 [boilerplates](community/boilerplates/remote-schemas))并将其模式与 GraphQL 引擎的模式合并。 |
| 14 | + |
| 15 | + |
| 16 | + |
| 17 | +## 演示 (*40 秒*) |
| 18 | + |
| 19 | +[](https://www.youtube.com/watch?v=eY4n9aPsi0M) |
| 20 | + |
| 21 | +[合并远程 GraphQL 模式(YouTube 链接)](https://youtu.be/eY4n9aPsi0M) |
| 22 | + |
| 23 | +[添加远程模式](https://youtu.be/01t4t2t4q1c) |
| 24 | + |
| 25 | +## 快速入门 |
| 26 | + |
| 27 | +尝试远程模式的最快方式是通过 Heroku。 |
| 28 | + |
| 29 | +1. 点击以下按钮,将 GraphQL 引擎与免费的 Postgres 插件一起部署到 Heroku: |
| 30 | + |
| 31 | + [](https://heroku.com/deploy?template=https://github.com/hasura/graphql-engine-heroku) |
| 32 | + |
| 33 | +2. 打开 Hasura 控制台 |
| 34 | + |
| 35 | + 访问 `https://<app-name>.herokuapp.com`(*将 \<app-name\> 替换为您的应用名称*)以打开管理控制台。 |
| 36 | + |
| 37 | +3. 合并您的第一个远程模式并查询它 |
| 38 | + |
| 39 | + 在管理控制台中,打开 ``Remote Schemas`` 标签页并点击 ``Add`` 按钮。填写以下信息: |
| 40 | + * 远程模式名称:``countries`` (*此远程模式的别名*)。 |
| 41 | + * GraphQL 服务器 URL:``https://countries.trevorblades.com/`` (*一个公共的 GraphQL API,我们将用它快速查看此功能;由 [@trevorblades](https://github.com/trevorblades) 维护*)。 |
| 42 | + * 忽略其余的配置设置并点击 ``Add Remote Schema`` 按钮。 |
| 43 | + |
| 44 | + 前往 ``GraphQL`` 标签页并运行以下查询 (*将其粘贴到左侧的查询窗口并点击* ▶️ *(播放) 按钮*): |
| 45 | + |
| 46 | + ```graphql |
| 47 | + { |
| 48 | + countries { |
| 49 | + emoji |
| 50 | + name |
| 51 | + languages { |
| 52 | + name |
| 53 | + native |
| 54 | + } |
| 55 | + } |
| 56 | + } |
| 57 | + ``` |
| 58 | + |
| 59 | + 您可以使用 ``GraphQL`` 界面右上角的 ``Docs`` 浏览器来探索远程模式中的 GraphQL 类型。 |
| 60 | + |
| 61 | +## 模板 |
| 62 | + |
| 63 | +适用于流行语言/框架的自定义 GraphQL 服务器的模板可用。 |
| 64 | + |
| 65 | +* [常规模板](community/boilerplates/graphql-servers),可以部署到任何地方。 |
| 66 | +* [无服务器模板](https://github.com/hasura/graphql-serverless),可以部署到 AWS Lambda 等无服务器平台。 |
| 67 | + |
| 68 | +请注意,更多语言、框架、无服务器平台等的模板正在不断更新,社区贡献非常欢迎。 |
| 69 | + |
| 70 | +## 注意事项 |
| 71 | + |
| 72 | +**当前的限制**: |
| 73 | + |
| 74 | +* 命名规则:类型名称和节点名称在所有合并的模式中必须是唯一的(区分大小写)。在接下来的几个版本中,将支持合并名称和结构相同的类型。 |
| 75 | +* 来自不同 GraphQL 服务器的节点无法在同一个查询/变更(query/mutation)中使用。所有顶层节点必须来自同一个 GraphQL 服务器。 |
| 76 | +* 不支持远程 GraphQL 服务器的订阅(subscription)。 |
| 77 | + |
| 78 | +这些限制将在后续版本中內解决 |
| 79 | + |
| 80 | +## 📄 文档 |
| 81 | + |
| 82 | +阅读完整[文档](https://hasura.io/docs/latest/graphql/core/remote-schemas/index.html) |
| 83 | + |
| 84 | +## 翻译 |
| 85 | + |
| 86 | +此文档提供以下翻译版本: |
| 87 | + |
| 88 | +- [French :fr:](translations/remote-schemas.french.md) |
| 89 | +- [Hindi :india:](translations/remote-schemas.hindi.md) |
0 commit comments