问题
我有一个复杂的查询,连接了三个表,并返回一组行,每行都有来自其兄弟表的数据。如何以RESTful方式表示这种情况?
顺便说一下,我知道并不一定有“正确”的方法,但我对了解针对这种情况可能是最具可扩展性和耐用性的解决方案很感兴趣。
背景
过去,我曾经代表过单个表,这些表或多或少地反映了url的字面结构。例如,url GET /agents/1/policies
会导致类似于select * from policies where agent_id = 1
的查询。
假设
看起来url并不一定要与数据库层的结构紧密耦合。例如,如果复杂查询是这样的:
select
agent.name as agent_name,
policy.status as policy_status,
vehicle.year as vehicle_year
from
policies as policy
join agents as agent on policy.agent_id = agent.id
join vehicles as vehicle on vehicle.policy_id = policy.id
where 1=1
and policy.status = 'active';
# outputs something like:
{ "agent_name": "steve", "policy_status": "single", "vehicle_year": "1999" }
我可以将这个查询表示为一个URL而不是表格作为URL。该URL可以是
/vehicles
,如果有人想要查询它(使用id或其他参数,如/vehicles?vehicle_color=red
),我只需将该值传递到预处理语句中。
奖励问题
- 这是反模式吗?
- 我的查询应该始终针对现有表格运行,而不是预处理语句吗?