Web服务调用中提供的参数是否应包含在响应中

时间:2011-07-07 14:14:49

标签: web-services http

我没有太多创建Web服务的经验,但是,我花了很多时间与它们进行交流。

我想知道是否有一个最佳做法,说明请求中提供的天气或非参数应该包含在响应中。

E.g。

请求:

a.com/getStuff?key=123

(JSON)回复:

{"key":"123",
 "value":"abc"}

或..

(JSON)回复:

 {"value":"abc"}

我更喜欢更详细的第一个选项,因为它不强制请求和响应之间的耦合。即响应并不关心请求是什么,所以你不需要传递状态。

有最好的做法吗?

2 个答案:

答案 0 :(得分:1)

如果要引用数据库中的记录,或者由整数,GUID或特定格式的字符串值唯一标识的某个其他实体,则始终将返回该唯一ID。响应,特别是如果您计划允许用户更新该实体或在后续操作中引用它以创建相关数据或搜索相关数据。

如果要返回的派生值可能是许多记录值或环境特定数据的组合(例如“我的服务器上有多少可用磁盘空间?”),那么提供的参数不会表示响应中的任何内容,因此不应返回。

关于耦合请求 - 响应的观点是正确的。如果您正在进行多个同步异步调用,那么在处理响应时,键值非常有用。

答案 1 :(得分:1)

参考你的例子:我认为id应该始终是你的JSON案例中资源表示的一部分。该表示应尽可能自我解释和自我引用。在id-attribute / field之上,我也喜欢使用链接字段:

{
    "id":123,
    "link":{
        "href":"http://api.com/item/123",
        "rel":"self"
    },
    otherData...
}

如果您的示例GET /getStuff?key=123更像是一个搜索(参数看起来有点像那样),那么向用户展示您的搜索“摘要”是很好的:

{
    "items":[{
            item1...
        },
        {
            item2...
        }
    ],
    "submitted-params":{
        "key":"123",
        "other-param":"paramValue"
    }
}