【发布时间】:2020-01-16 05:13:27
【问题描述】:
我正在开发一个电子商务网站,该网站需要为其移动应用程序提供 API。最初看到 GraphQL 的实现问题让我想到了集成 GraphQL 用于查询数据和 REST 用于变异操作(存储、更新、删除)。
可以做这些事情还是我应该坚持其中任何一个来完成操作?
【问题讨论】:
我正在开发一个电子商务网站,该网站需要为其移动应用程序提供 API。最初看到 GraphQL 的实现问题让我想到了集成 GraphQL 用于查询数据和 REST 用于变异操作(存储、更新、删除)。
可以做这些事情还是我应该坚持其中任何一个来完成操作?
【问题讨论】:
在许多个别情况下,使用单独的端点更合适甚至是必要的。仅举几例:身份验证、文件上传、第三方 webhook 或任何应返回 JSON 以外的内容的请求。
说所有具有副作用的操作都应该通过单独的端点完成似乎有点过头了。您不仅会失去与 GraphQL 相关的典型优势(声明性数据获取、可预测的响应等),而且还会使前端开发人员的工作变得更加困难,尤其是在使用 Apollo 的情况下。这是因为缓存的查询响应可以自动根据突变中返回的数据进行更新——但是,如果您不使用 GraphQL 来改变该数据,则必须自己手动更新缓存.
【讨论】:
由于以下原因,我建议坚持使用单一方法
1) 操作后对缓存数据的预测性更改,否则您将不得不编写大量胶带代码以确保基于REST 的更新会改变客户端上的缓存数据。
2) 代码维护单一模式,阅读代码时开销更少。
3) 将schema 放在一个地方,否则您可能会重复代码。
【讨论】: