我正在这样编写API端点,但是这里有些模糊。 这些端点正在使用具有CompanyId和KeywordId的CompanyKeyword表。因此,该表与公司和关键字表相关。
我将分别在端点下方获得所有公司关键字和特定公司关键字。
当我在互联网上查看REST API: Design Guidelines时。准则说
如果关系只能存在于另一个资源中,请使用 根据它。
这将我引向以下端点:
[HttpGet("api/company/{companyId}/keyword/{keywordId}")]
[HttpGet("api/company/{companyId}/keyword")]
但是我在后端代码中没有使用companyId和keywordId。我只需要companyKeywordId。
因此,我正在使用如下所示的端点。
(1)
[HttpGet]
public async Task<IActionResult> GetAllAsync()
{
// Some Code
}
[HttpGet("{id}")]
public async Task<IActionResult> GetByIdAsync(Guid id)
{
// Some Code
}
当我查看互联网时,如果在代码中使用了companyId和keywordId,而不是从端点请求它们。如果不需要它们,则不会从api端点请求它们。
(2)
[HttpGet("api/company/{companyId}/keyword")]
[HttpGet("api/company/{companyId}/keyword/{keywordId}")]
我很困惑。哪一个是正确的1或2?
您能帮我吗?
答案 0 :(得分:0)
这是一致性和清晰度的问题。通过查看请求:
api/company/{companyId}/keyword
api/company/{companyId}/keyword/{keywordId}
我知道我正在获得companyId
的关键字列表或keywordId
的特定关键字companyId
。这是一个明确的api请求,因为我可以通过查看url来确定得到的结果。
现在,如果网址会更改,因为我真的不需要后端上的companyId
api/keyword/{keywordId}
然后从URL中我不再可以确定此关键字所属的位置。实际上,甚至还不清楚您是否真的需要它属于一家公司。
如果资源属于其他资源,那么即使您实际上并不需要关联的ID,也请在URL中写清楚。
说了;为什么不使用companyId
,即使您不需要它呢?作为您的API的用户,我可能会认为关键字342属于公司589,但如果不属于该公司呢? url api/keyword/342
仍将返回它,因为您没有在select语句中包括公司ID。因此,即使您的 似乎 没有道理,也可以使用您网址中的任何标识符进行通话。
select * from keywords where companyId = 589 and keywordId = 342;