REST API 使用复杂的 SQL 操作
REST API using complex SQL Operations
我有一堆规范化的 tables,称为 danger
、countermeasure
和 module
。
现在我有一个三列 table krt
代表三个 table 之间的连接。 (列名 danger_id
、countermeasure_id
、module_id
)
/danger
等正常端点显示相应 table 的元素。
/krt?where={result: module, danger_id: x}
将向 table krt
查询所有带有 danger_id == x 的危险,并将结果与模块 table 连接起来。
结果看起来像(为显示而转换)
danger_id:
- module a
- module b
danger_id2:
- module ..
[...]
我当然可以提供一个视图并为此视图添加一个自定义端点。但不仅有三种可能的视图,还有带有一两个附加连接的更复杂的视图。 (如果需要也可以提供示例)
因此,这种查询和连接是一个常见的概念,还是我违反了此设计的任何 REST 约束?有没有更好/更直观的方式来提供此类信息?
如果你问 RESTful URL 会是什么样子,可能是
/krt?dangerId=x&result=module
在我看来,您决定如何构建 SQL 查询与 RESTful 设计无关。
也没有指南规定每个 GET 请求都必须是可缓存的——这也取决于其他因素。如果您的数据相当静态,但请求频率足够高,那么您可以将其缓存一小段时间。
我有一堆规范化的 tables,称为 danger
、countermeasure
和 module
。
现在我有一个三列 table krt
代表三个 table 之间的连接。 (列名 danger_id
、countermeasure_id
、module_id
)
/danger
等正常端点显示相应 table 的元素。
/krt?where={result: module, danger_id: x}
将向 table krt
查询所有带有 danger_id == x 的危险,并将结果与模块 table 连接起来。
结果看起来像(为显示而转换)
danger_id:
- module a
- module b
danger_id2:
- module ..
[...]
我当然可以提供一个视图并为此视图添加一个自定义端点。但不仅有三种可能的视图,还有带有一两个附加连接的更复杂的视图。 (如果需要也可以提供示例)
因此,这种查询和连接是一个常见的概念,还是我违反了此设计的任何 REST 约束?有没有更好/更直观的方式来提供此类信息?
如果你问 RESTful URL 会是什么样子,可能是
/krt?dangerId=x&result=module
在我看来,您决定如何构建 SQL 查询与 RESTful 设计无关。
也没有指南规定每个 GET 请求都必须是可缓存的——这也取决于其他因素。如果您的数据相当静态,但请求频率足够高,那么您可以将其缓存一小段时间。