- html - 出于某种原因,IE8 对我的 Sass 文件中继承的 html5 CSS 不友好?
- JMeter 在响应断言中使用 span 标签的问题
- html - 在 :hover and :active? 上具有不同效果的 CSS 动画
- html - 相对于居中的 html 内容固定的 CSS 重复背景?
问题
我有一个复杂的查询,该查询连接三个表并返回一组行,每一行都包含来自其同级表的数据。如何以RESTful方式表示这一点?
FWIW我知道不一定有“正确”的方法来做,但是我有兴趣了解什么是这种情况下最可扩展和持久的解决方案。
背景
过去,我代表的单个表或多或少地反射(reflect)了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" }
我可以将这个QUERY表示为一个网址,而不是将TABLES表示为该网址。这个网址可以是
/vehicles
,如果有人要查询它(使用id或其他参数,例如
/vehicles?vehicle_color=red
),我可以将该值传递到准备好的语句中。
最佳答案
您想从数据库表和查询中退后一步,然后考虑一下基本资源。在您的示例中,很明显,这些是agent
,customer
vehicle
和policy
。
资源与馆藏
我在您的示例中看到的一个失误是,您没有使用复数将集合与资源分开,这在处理 Controller 路由和进行逻辑搜索时非常有用。在您的示例中,您具有:GET /agents/1/policies
假设这是GET /agent/1/policies
。
现在,您可以清楚地知道等幂资源的位置/agent/1
和查找/搜索代理集合:/agents
。
但是,按照这一过程,您将开始从API的关系的各个方面解除枚举关系的关联,这本质上是多余的。
在您的示例中,显然策略不是由代理专门拥有的。一个策略应该是一个独立的资源,它可以通过某个等幂url来标识,该ID使用唯一标识该策略的ID来找到该策略。 /policy/{Id}
搜索集合
现在,这可以为您提供服务,使您可以通过以下方式将对策略的发现分开:/policies
,其中仅返回特定Agent的策略只是您访问该集合的多种不同方式之一。
因此,与其使用GET /agents/1/policies
,您不如通过以下方式找到与代理相关的策略:GET /policies?agent=1
预期的结果将是匹配策略的资源标识符的集合:
{ "policies" : ["/policy/234234", "/policy/383282"] }
GET /policy/234234?filter=agentName,policyStatus,vehicleYear
{ ... Policy data + "customer": "/customer/2834", "vehicle": "/vehicle/88328", "agent": "/agent/32" }
GET /agents/1/policies
之类的api来提供与代理相关联的策略列表的方法,但根据我的经验,这有时会变得局限性和冗余,因为这需要最终用户熟悉您的方式。建立与基础资源的关系模型。
GET \query?filter=agent.name, policy.status, vehicle.year&from=policies&join=agents,vehicles&where=...
关于sql - REST API体系结构: How to Represent Joined Tables,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/49366042/
如果向下滚动 this page有点,你会看到英国英语连字符模式,如: \patterns{ % just type if you're not using INITEX .ab4i .ab3ol
这可能是一个愚蠢的菜鸟问题,但 : 在以下上下文中表示什么: var stuffToDo = { 'bar' : function() { alert('the value w
考虑一个基于方 block 的游戏,其中每个代理都可以直线/对角线(8 个方向)移动。基本上,像这样的 map 可以表示为规则的二维网格,其中 0 表示可步行位置,1 表示不可步行位置(我使用的是 L
这个问题已经有答案了: Retrieving the last record in each group - MySQL (33 个回答) 已关闭 4 年前。 我正在尝试进行查询,我正在尝试获取某些字
我们正在创建一种非常简单的编程语言,使用 Flex 和 Bison 进行解析和语法分析,并使用 C 构建编译器。 在直接进行汇编之前,我们将根据语言规则创建一个抽象语法树。但是我们很难从语言中表示一个
我从一个文本文件中接收数据,其中的日期通常采用“标准时间”(例如中部标准时间或东部标准时间。我的意思是没有观察到夏令时调整)。使用 Noda Time,我试图找出表示这一点的最佳方式。 我的第一个想法
我有一个实体,例如 compound_tax。每个compound_tax 可以由另一个实体tax 的多个实例组成。例如,一个 compound_tax 可以由两种税组成(顺序可能很重要): VAT:
问题:如何使用连续 map - Link1: Bernoulli Shift Map为二进制序列建模? 概念:Dyadic 映射也称为 Bernoulli Shift 映射,表示为 x(k+1) =
我正在玩指向成员的指针,并决定实际打印指针的值。结果出乎我的意料。 #include struct ManyIntegers { int a,b,c,d; }; int main () {
我一直在学习 C# OOP 的速成类(class),很想知道“LIST”关键字在下面的代码中代表什么: var actors = new List(); 最佳答案 List是一个带有类型参数的类。这称
我刚刚开始使用 Coursera 的 Scala 函数式编程,我发现很难提交我的作业。我可以在我的 IntelliJ IDE 中单独运行我的函数,但是当我进入终端并输入 sbt about 时,我收到
我有一个基本的 Nestjs - Mongoose - Graphql api,我定义了两个模式:User和 Event //USER Schema @Schema() export class Us
我有这个数据: # A tibble: 19 x 8 country Prop_A Prop_B Prop_C
在 Akka 流中,Mat in Source[Out, Mat] 或 Sink[In, Mat] 代表什么。什么时候会真正使用? 最佳答案 Mat type 参数表示此流的具体化值的类型。 请记住,
Range.SpecialCells method可用于返回满足特定条件的 Range 对象。标准的类型是使用 xlCellType 常量指定的。 其中一个常量 (xlCellTypeBlanks)
问题 我有一个复杂的查询,该查询连接三个表并返回一组行,每一行都包含来自其同级表的数据。如何以RESTful方式表示这一点? FWIW我知道不一定有“正确”的方法来做,但是我有兴趣了解什么是这种情况下
有没有一种方法可以生成从 red 到 的 UIColor 表(或者 UIColor 的数组) green 这样变量 var match = 100 将具有相应的颜色 green 而 var match
你好, 我正在学习 html 和 css。为了更好地理解进度条的工作原理,我创建了一个带有几个按钮和进度条的小型演示页面。 正如您在下面的 CSS 代码中看到的,我特别要求进度条的背景显示为红色。这在
我正在尝试编写一个函数来初始化数组并在返回之前将其打乱。 将 numba 导入为 nb @nb.jit(nopython=True, cache=True) def test(x): ind
我有一个数据库 winforms 应用程序,它使用以 C# 编写的 SQLite。我正在尝试使用 C# 包装器执行一些 SQLite 查询,但在检查 NULL 值的查询中遇到了一些问题。这是调用语句。
我是一名优秀的程序员,十分优秀!