【发布时间】:2019-10-21 00:17:33
【问题描述】:
我正在尝试找出设计我的 rest api 的 URL 的最佳/正确方法,但我在 company 资源之间感到困惑。
这是位于http://localhost:8085/api/v1/company/1 的company 资源。这将从company 表中返回一些基本数据。
到目前为止还好。但是现在公司可以有两种类型:1.机械 2.其他。每个人在 DB 中都有各自的表,1:1 与 company 表的关系。要获取有关公司的更多详细信息,我需要从某个 API 端点公开另外两个表。
所以,我对这里的三个 URL 感到困惑:
http://localhost:8085/api/v1/company/1?type=mechanicalhttp://localhost:8085/api/v1/company/1/mechanicalhttp://localhost:8085/api/v1/company/mechanical/1
我拒绝选项 1 的原因之一是我在 SO 上找到的,即无法缓存具有参数的路径。 Rest Standard: Path parameters or Request parameters
我主要在 2 和 3 之间感到困惑?正确的方法是什么?
您可能会问一个问题,为什么我不提供来自http://localhost:8085/api/v1/company/1 的完整公司信息?那是因为我想利用延迟加载。公司的详细信息可能需要更多时间才能获取,因此我将内容分开。
【问题讨论】:
-
首先应该是
/companies。?type=mechanical让您看起来像是在过滤,但/companies/:id是单一资源,所以不清楚您要过滤什么(而/companies?type=mechanical将是“所有机械类型的公司”)。也许详细数据应该被视为子资源,/companies/:id/details;客户不必真正关心它是来自一张桌子还是另一张桌子。 -
是的,应该是
companies。那么,第二个选项会是最准确的方式吗? -
没有针对 URL 的 REST 标准。 REST 将 URL 视为完全不透明的。 REST 是一种架构风格。
标签: rest restful-url