博客
关于我
为什么RESTful很糟糕?
阅读量:796 次
发布时间:2023-03-22

本文共 1172 字,大约阅读时间需要 3 分钟。

RESTful服务设计中的两大难题及其解决方案

在设计手机端界面时,RESTful服务面临着两个主要问题:发送过多的请求和处理过多的信息。以下将详细探讨这些问题及其解决方案。

问题分析

  • 发送过多的请求

    • 手机端需要获取文章列表,每个文章包含作者的头像信息。由于头像信息不在Article资源中,而是位于User资源中,查询过程需要额外的HTTP请求。例如,获取一个文章列表时,需要为每个文章进行一次额外的查询以获取头像链接,导致请求次数增加。
  • 处理过多的信息

    • 返回的数据中包含了大量不需要的字段,例如gender、age等,这些信息对前端展示没有实际用处,增加了数据处理的负担。
  • 解决方案一:中间层(HotArticle资源)

  • 引入中间资源

    • 创建一个新的资源HotArticle,将ArticleUser的信息组合在一起,只返回需要的字段。例如,HotArticle可以包含idtitleabstractliked_countauthor.avatar_url
  • 优点

    • 简化了前端的数据处理逻辑,只需一次请求获取所需数据。
    • 界面变化时,HotArticle资源也可以相应调整,保持数据的一致性。
  • 缺点

    • HotArticle资源与界面紧密耦合,界面变化会导致资源频繁更新,增加维护成本。
    • 随着需求的变化,HotArticle需要不断调整,可能导致开发复杂度增加。
  • 解决方案二:灵活查询

  • 灵活查询方法

    • 在手机端发送复杂的查询请求,服务器端处理后返回所需的数据。例如,使用类似SQL的查询方式,直接从ArticleUser表中进行关联查询,获取所需的数据。
  • 优点

    • 减少了无效的数据返回,提高了查询效率。
    • 支持动态查询,适应不同需求。
  • 缺点

    • 复杂的关联查询可能导致难以管理和维护。
    • 随着关联关系的增加,查询复杂度会不断提升。
  • 解决方案三:GraphQL

  • 引入GraphQL

    • 使用GraphQL进行查询,通过定义查询语法一次性获取所需的数据。例如,可以定义一个查询,返回特定用户的信息,或者将文章和作者的信息嵌套在一起,减少不必要的数据返回。
  • 优点

    • 支持复杂的关联查询,减少了多次请求带来的开销。
    • 返回的数据结构清晰,易于处理,减少了数据冗余。
  • 缺点

    • 需要对后端数据模型进行调整,可能需要将关系型数据库更改为图数据库。
    • 需要明确定义数据模型和查询语法,增加了后端开发的复杂性。
  • 总结

    在解决RESTful服务中的问题时,可以选择不同的方法根据实际需求进行权衡:

    • 中间层(HotArticle):适合当前系统架构简单,需求变化不大的情况。
    • 灵活查询:适合对查询复杂度有一定控制的场景。
    • GraphQL:适合需要灵活和高效查询的复杂场景,能够长期支持多样化的需求。

    选择哪种方案取决于项目的具体需求、技术栈以及团队的开发能力。

    转载地址:http://acqfk.baihongyu.com/

    你可能感兴趣的文章
    Objective-C实现merge insertion sort合并插入排序算法(附完整源码)
    查看>>
    Objective-C实现merge sort归并排序算法(附完整源码)
    查看>>
    Objective-C实现mergesort归并排序算法(附完整源码)
    查看>>
    Objective-C实现miller rabin米勒-拉宾素性检验算法(附完整源码)
    查看>>
    Objective-C实现Miller-Rabin素性测试程序(附完整源码)
    查看>>
    Objective-C实现MinhashLSH算法(附完整源码)
    查看>>
    Objective-C实现MinHeap最小堆算法(附完整源码)
    查看>>
    Objective-C实现multilayer perceptron classifier多层感知器分类器算法(附完整源码)
    查看>>
    Objective-C实现n body simulationn体模拟算法(附完整源码)
    查看>>
    Objective-C实现naive string search字符串搜索算法(附完整源码)
    查看>>
    Objective-C实现natural sort自然排序算法(附完整源码)
    查看>>
    Objective-C实现nested brackets嵌套括号算法(附完整源码)
    查看>>
    Objective-C实现nevilles method多项式插值算法(附完整源码)
    查看>>
    Objective-C实现newtons second law of motion牛顿第二运动定律算法(附完整源码)
    查看>>
    Objective-C实现newton_raphson牛顿拉夫森算法(附完整源码)
    查看>>
    Objective-C实现NLP中文分词(附完整源码)
    查看>>
    Objective-C实现NLP中文分词(附完整源码)
    查看>>
    Objective-C实现not gate非门算法(附完整源码)
    查看>>
    Objective-C实现NumberOfIslands岛屿的个数算法(附完整源码)
    查看>>
    Objective-C实现n皇后问题算法(附完整源码)
    查看>>