当前位置: 首页 > 知识库问答 >
问题:

RESTful搜索深度嵌套资源

岑俊弼
2023-03-14

我需要实现一个在我看来更适合SOAP而不是RESTful服务的搜索,因此我正在努力将其表达为RESTendpoint。

公司(companyId)
合同(Contractd,companyId,privilegeGroupId)
PrivilegeGroup(privilegeGroupId,privilegeId)
特权(privilegeId)

主键以粗体显示。

FindPrivilegesByCompanyId

我已经尝试了很多方法,试图通过某种REST请求来解决这个问题,但没有什么能真正说服我,因为特权和公司没有直接的关系
实际关系由以下长URI表示:

/公司/{companyId}/合同/特权组/特权

然而,尽管这个URI说的是事实,但将其公开给API客户机似乎不是一个好主意。因此,我试图想出一些替代方案:

  • GET /companies/{companyId}/权限
  • 获取 /privileges/search?companyId={companyId}

你知道如何处理这些情况吗?如何在RESTful API中表达这些类型的查询?有可能吗?我认为从理论上讲,这个查询的结果甚至不是REST术语中的资源。

注意:API已经公开了域模型每个对象的CRUD操作。

共有2个答案

夏华藏
2023-03-14

如果您觉得资源之间没有直接关系,可以使用查询参数根据其他资源进行筛选。例如:/特权?company\u id=$company\u id

(IMO,您在示例url中提到的搜索一词在这种情况下是不需要的。即使搜索是发生的事情,它也可以被视为使用另一个资源id的过滤器)

阴宏爽
2023-03-14

我认为从理论上讲,这个查询的结果甚至不是REST术语中的资源。

它是。

REST中信息的关键抽象是资源。任何可以命名的信息都可以是资源

在REST中,URI只是资源的标识符。例如,如果我们想检索Acme Corporation的特权,那么这个URI是完全“restful”的

/7B7F1B30-7A84-4406-8D88-FAC9B647AC12

拼写对其他人来说无关紧要。

您的实现框架和您的API消费者可能更喜欢可破解的URI;但这不是REST约束。

此外,没有REST约束要求域模型中的每个实体都有一个URI。“您的资源模型不是您的域模型”。

简而言之,如果您有一个生成此查询结果表示的endpoint,并且需要在标识符中编码一个公司id来进行查找,那么这些都可以。

/7B7F1B30-7A84-4406-8D88-FAC9B647AC12/{companyId}
/7B7F1B30-7A84-4406-8D88-FAC9B647AC12?{companyId}
/{companyId}/7B7F1B30-7A84-4406-8D88-FAC9B647AC12
/7B7F1B30-7A84-4406-8D88-FAC9B647AC12;{companyId}

困难的部分是试图选择语义上有意义/可识别的拼写;本质上与您在代码中尝试命名变量时遇到的问题相同,并且受到类似的限制,即:编译器不在乎,您编写代码是为了与其他人进行清晰的通信。

您可能会查看您支持的用例以了解有关拼写的想法,但您可能正在提供某种特权“摘要”,类似于帐户摘要或资产负债表。

 类似资料:
  • 本文向大家介绍深度优先搜索,包括了深度优先搜索的使用技巧和注意事项,需要的朋友参考一下 图遍历是按某种系统顺序访问图的所有顶点的问题。遍历图主要有两种方法。 广度优先搜索 深度优先搜索 深度优先搜索(DFS)算法从顶点v开始,然后遍历到之前未访问过的相邻顶点(例如x),并将其标记为“已访问”,然后继续处理x的相邻顶点,依此类推。 如果在任何一个顶点上遇到所有相邻顶点都被访问过,则它将回溯直到找到具

  • 主要内容:深度优先搜索(简称“深搜”或DFS),广度优先搜索,总结前边介绍了有关图的 4 种存储方式,本节介绍如何对存储的图中的顶点进行遍历。常用的遍历方式有两种: 深度优先搜索和 广度优先搜索。 深度优先搜索(简称“深搜”或DFS) 图 1 无向图 深度优先搜索的过程类似于树的先序遍历,首先从例子中体会深度优先搜索。例如图 1 是一个无向图,采用深度优先算法遍历这个图的过程为: 首先任意找一个未被遍历过的顶点,例如从 V1 开始,由于 V1 率先访问过了,所以

  • 问题内容: 我如何在mongodb文档中嵌套文档的地方搜索文档。例如,我有一组私人消息。每条私人消息都有两个嵌套文档- 一个代表发送用户,另一个代表接收使用。两个嵌套文档的格式均为- userID:34343,名称:Joe Bloggs 我希望能够搜索用户发送的所有邮件(例如,搜索发件人用户的嵌套文档)。 我正在使用Java驱动程序。我是否需要创建一个代表嵌套文档的DBObject? 谢谢 问题答

  • 3. 深度优先搜索 现在我们用堆栈解决一个有意思的问题,定义一个二维数组: int maze[5][5] = { 0, 1, 0, 0, 0, 0, 1, 0, 1, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 0, 0, 0, 0, 1, 0, }; 它表示一个迷宫,其中的1表示墙壁,0表示可以走的路,只能横着走或竖着走,不能斜着走,要求编程序找出从左上角到右下角的路线

  • Elasticsearch版本:2.3.3 基本上,标题说明了一切。如果二个嵌套聚合下使用reverse_nested,尽管文档似乎通过限定范围(请参阅结果中的最后一个字段),但其后面的聚合不会以某种方式工作。 这里我准备了一个例子——一个文档是一个学生的注册日期和考试历史。 映射: 试验文件: 聚合查询(无实际意义): 结果是: ...您可以在其中看到聚合“newest_exam_date”不起

  • 如何获得空数组和美国的结果和