sql - REST API 关系,模块化(多个请求)与 SQL 连接的聚合(单个请求)获取的优缺点

标签 sql postgresql rest api

据我所知,REST API 通常以模块化方式实现。例如,假设我们在包含 RSS 提要的数据库上构建 API,然后获取提要和项目将需要执行以下操作:

+-----------+--------------------+
|   REST    |        SQL         |
+-----------+--------------------+
| GET /feed | SELECT * FROM feed |
+-----------+--------------------+

后跟类似的东西

+-------------------------+-----------------------------------------------+
|          REST           |                      SQL                      |
+-------------------------+-----------------------------------------------+
| GET /feed/1/item        | SELECT * FROM item WHERE feed_id = 1          |
| GET /item?feed_id=1,2,3 | SELECT * FROM item WHERE feed_id IN (1, 2, 3) |
+-------------------------+-----------------------------------------------+

如果你想一次做一个,或者分别做一次。


我想知道的是,减少这种模块化并使用 JOIN 和聚合来处理它是否有任何优势,例如,如果您事先知道您需要一个聚合,您会改为使用

+--------------+---------------------------------+
| REST         | SQL                             |
+--------------+---------------------------------+
| GET /feedagg | SELECT                          |
|              |   f.*,                          |
|              |   json_agg(i.*) as items        |
|              | FROM feed f                     |
|              | JOIN item i USING (feed_url)    |
|              | GROUP BY f.feed_url             |
|              | ORDER BY f.title ASC            |
+--------------+---------------------------------+

它是更多的 SQL,但另一方面,它只是一个 SQL 查询和一个 API 请求。


我知道这两种方法可以共存,因为我将它们放在不同的路线下,但我不清楚第二种方法是否真的比第一种更好。由于请求/查询计数较少,它似乎更好,但我找不到详细说明这方面的任何资源。

关于第一种模块化方法的示例数不胜数,但相比之下,人们在网上严重缺乏人们使用 JOIN + 聚合的示例。我没有经验,而且我知道很多因素,包括我可能没有想到的因素,都在起作用。

可能性能差异可以忽略不计,但无论如何,我想对这两种方法进行优缺点分析。有人可以为我澄清一下吗?

最佳答案

一般 1 个 API 查询会比 2 个快,因为准备 2 个单独的查询会产生开销,但您是否会受益取决于 API 的使用方式。

如果您的用户不打算通过 GET/feedagg 方法使用 API,那么性能上不会有明显的好处。

您所说的模块化是 REST 的关键原则,它将您的 API 划分为逻辑资源。务实地说,坚持使用模块化方法,除非您的 API 总是以第二种方式使用,在这种情况下,这样做可以实现它提供的性能优势。

这是关于实用的 RESTful API 开发的重要资源:http://www.vinaysahni.com/best-practices-for-a-pragmatic-restful-api#ssl

关于sql - REST API 关系,模块化(多个请求)与 SQL 连接的聚合(单个请求)获取的优缺点,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/43729695/

相关文章:

sql - 使用花括号和通配符转义 Oracle 文本

Mysql 创建函数不起作用

sql - 使用 setweight() 时 Postgres 全文搜索错误

java - 如何通过jdbc在postgres中获取数组基类型

javascript - 如何共享 Swagger 文档

mysql - LEFT JOIN - 从左表中获取所有数据,右表中没有匹配项

php - PHP cronjob脚本使用mysqli查询引发语法错误

postgresql - 包含顺序对覆盖索引有任何影响吗?

java - 使用 ConcurrentHashMap 时的并发问题

c# - 如何在 C# 中使用 REST,包括 PUT、POST 和 DELETE?