【问题标题】:What is the best solution to pass two different parameters to a REST API?将两个不同的参数传递给 REST API 的最佳解决方案是什么?
【发布时间】:2017-10-09 08:57:11
【问题描述】:

我怀疑为 API 定义 REST URI 的最佳方式是什么。

我有一个提供商品详细信息的 API。

所以我知道我可以像这样发出 GET 请求:

http://XXX.YYY.ZZZ.TTT:8280/commodity_details/1 

其中 commodity_details 是我想要获取的(商品详情),1 是特定商品的 ID。这应该是正确的 REST URI。

好的,我知道我也可以将 ID 参数传递到 JSON 文档中,像这样的 POST 请求:

http://XXX.YYY.ZZZ.TTT:8280/commodity_details/

并将这样的 JSON 有效负载附加到我的 POST 请求中:

{
"commodity_id": 1
}

我认为如果我有单个 commodity_id 参数,第一个版本可能会更好(将所需的 ID 放入 URI),是吗?

但是如果我需要第二个 language_id 参数会怎样? (我的 API 也应该接收这个 language_id 参数,以便它可以提供适当语言的国际化输出。

所以在这种情况下,我需要传递 2 个参数(commodity_idlanguage_id)。

在这种情况下,最好使用带有两个参数的 JSON 有效负载的 POST 请求?像这样的:

{
"commodity_id": 1,
"language_id": 2
}

或者对于这种情况,什么是好的 URI 模板?

【问题讨论】:

  • 不要自己动手 - Accept-Language。通常,对于您仍然希望在 URL 中使用的横切关注点,您可以使用 the query string - /commodity_details/1?language=2
  • 带有é的参数是不是很难实现RESTful API?那么接受语言呢?是不是可以设置为选择想要的语言的header?
  • 1. ...什么? 2. 我提供了 MDN 的链接,你看了吗?

标签: rest api web-services restful-url


【解决方案1】:

对于仅传递 2 个参数,您可以使用更简单的第一种方法(查询字符串参数)

[HttpGet("{commodity_id}/{language_id}")]

public string GetCommodityDetails(string commodity_id, string language_id)  
{  
string commodityDetails=string.empty;

//your implementation

 return commodityDetails;  
}

【讨论】:

    猜你喜欢
    • 2011-02-08
    • 1970-01-01
    • 2013-02-08
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2016-08-07
    • 1970-01-01
    相关资源
    最近更新 更多