软件开发

GraphQL适合你的应用程序架构吗?

Istock 648272290特色图片

您的移动应用程序和web应用程序需要从某个地方获取数据,而这个地方通常是您的API层。因此,你如何设计和构建你的api将对你的移动和web应用程序的成功产生重大影响,从而影响你的客户的满意度。

API层设计中的一个关键决定是选择REST还是GraphQL。像所有的架构决策一样,没有一刀切的方法;您必须权衡特定的业务、产品和技术目标与这两种流行替代方案的优点。REST强调为不同的资源创建唯一的端点,而GraphQL提供了一种表达性查询语言,用于通过单个端点访问相互关联的资源。There are a lot of great posts on the internet that attempt to comprehensively compare and contrast REST versus GraphQL, and I recommend that you read them all! This post has a more modest goal — we will discuss a few criteria to consider that can help you determine whether GraphQL might be a good fit for you and your application architecture.

可以说,REST是当今时代构建api的默认方式。RESTful模式提供了一套最佳实践,可以帮助API设计人员以相当标准的方式构建有用、清晰的API。有很多很棒的REST api在为互联网提供支持。也就是说,GraphQL已经存在了10年,所以虽然它可能还没有像REST那样被广泛采用,但它肯定不再是这个领域的新成员。

GraphQL的一个重要特征是它在设计时考虑了模式和类型系统。这对于应用程序如何与API交互具有重要意义。这种模式优先的方法和GraphQL的表达性查询语言将更多的控制权交给了客户端应用程序开发人员。这对整个开发过程的效率以及最终产品的性能和质量都有很大的影响。

在评估GraphQL是否是应用程序架构的一个好的解决方案时,可以问自己以下几个问题:

你是在开发一个全新的产品还是一个概念验证?你会经常改变主意吗?您的需求在快速发展吗?数据的表示是否会不断发展和迭代?

如果是这样,GraphQL的模式优先方法可能非常有吸引力。您可以设计GraphQL API来表示数据和关系,而不必预先准确预测面向用户的应用程序将如何使用您的数据。然后,应用程序开发人员可以在需要时选择需要的数据。这样可以轻松地添加和删除应用程序特性,而不必在整个产品开发过程中不断地重构和重新部署api。这真的可以加速你的产品开发过程,从而加快你的上市速度。

你是否正在构建一个对带宽限制和慢速连接敏感的高性能移动应用程序?

如果是这样,那么优化检索的数据和检索的方式就很重要了。在指定需要在单个调用中检索哪些数据时,GraphQL为客户端应用程序开发人员提供了很大的灵活性。这意味着在一个调用中从引用遍历对象树到另一个引用,而不是使用REST api可能需要的多个调用。这也意味着只获取应用运行所需的数据。回应中没有多余的废话。

相同的数据是否需要在整个应用程序中以各种不同的方式呈现?

GraphQL为客户端应用程序提供了一种简单的方法来指定要检索哪些特定的数据位。同样,也有用于缓存数据的良好客户端库,以便来自一个调用的缓存数据可以潜在地满足未来重叠的数据请求。

您是否计划在移动应用程序或web应用程序中使用强类型语言?

如果是这样的话,这自然可以很好地配合GraphQL对模式和类型定义的强调。在构建和维护应用程序时,您可能会获得有价值的开发效率收益。

你是否贩卖了大量特定于用户的数据?边缘缓存(例如使用CDN)大量未经身份验证的内容对应用程序的优先级低吗?

如果是这样,GraphQL可能是个不错的选择。虽然使用GraphQL当然可以实现内容的边缘缓存,但实现它比使用REST api稍微复杂一些。这是因为GraphQL严重依赖HTTP Post方法和HTTP 200响应。如果边缘不是优先级,那么你可以利用GraphQL的许多优点。如果边缘作为应用程序的优先级,您仍然可以使用GraphQL进行探索,但要确保您预先解决了缓存需求。

这绝不是一份详尽的考虑清单。但如果您对其中几个问题的回答是“是”,那么您可能希望进一步探索在应用程序体系结构中使用GraphQL。GraphQL可能适合您。

标签

留下回复

你的电邮地址将不会公布。必填字段已标记

这个网站使用Akismet来减少垃圾邮件。了解如何处理您的评论数据

史蒂夫Breeser

Steve Breeser拥有多年构建高知名度、面向消费者的全栈移动和web应用程序的经验。

更多来自作者

关注我们
推特 Linkedin 脸谱网 Youtube Instagram