【问题标题】:What is correct API endpoint?什么是正确的 API 端点?
【发布时间】:2019-12-12 17:32:09
【问题描述】:

我正在编写这样的 API 端点,但这里有一个模糊的东西。 这些端点正在使用具有 CompanyId 和 KeywordId 的 CompanyKeyword 表。所以这个表是与Company和Keyword表相关的。

我将分别获取所有公司关键字和具有以下端点的特定公司关键字。

当我在互联网上查看REST API: Design Guidelines 时。指南说

如果关系只能存在于另一个资源中,则使用 then 根据它。

这引导我到达以下端点:

[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?

你能帮我解决这个问题吗?

【问题讨论】:

    标签: c# rest api .net-core asp.net-core-webapi


    【解决方案1】:

    这是一个一致性和清晰性的问题。通过查看请求:

    api/company/{companyId}/keyword
    api/company/{companyId}/keyword/{keywordId}
    

    我知道我正在获取companyId 的关键字列表或companyId 的特定关键字keywordId。这是一个明确的 api 请求,因为我可以通过查看 url 来确定我得到的结果。

    现在如果 url 会改变,因为我真的不需要后端的companyId

    api/keyword/{keywordId}
    

    然后从 URL 我不能再确定这个关键字属于哪里。事实上,甚至不清楚你是否真的需要它属于一家公司。

    如果资源属于不同的资源,那么为了清楚起见,将其写在 url 中,即使您实际上并不需要关联的 id。

    话虽如此;为什么不使用companyId,即使你不需要它?作为 API 的用户,我可能认为关键字 342 属于公司 589,但如果它不属于呢? url api/keyword/342 仍然会返回它,因为您没有在 select 语句中包含公司 ID。因此,请在您的网址中使用任何标识符来拨打电话,即使它似乎没有意义。

    select * from keywords where companyId = 589 and keywordId = 342;
    

    【讨论】:

      猜你喜欢
      • 2017-12-13
      • 2020-06-10
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2018-04-12
      • 1970-01-01
      • 2015-05-24
      • 1970-01-01
      相关资源
      最近更新 更多