【问题标题】:HTTP POST with URL parameters - what should the server reply with?带有 URL 参数的 HTTP POST - 服务器应该回复什么?
【发布时间】:2011-08-26 03:42:33
【问题描述】:

我正在设计一个为各种域对象提供 CRUD 操作的 RESTFul 服务。 Person 就是一个这样的对象。

我们有以下服务:

GET /person/list?type=Infant

回应所有婴儿类型的人。

POST /person/list

接受负载中的人员列表并创建这些记录。

问题: 是否有意义

POST /person/list?type=Infant

在这种情况下,我们将创建在有效负载中传递的人员,然后以婴儿类型的所有人员的列表进行响应?

最佳做法是什么?

【问题讨论】:

    标签: http rest jersey restful-url


    【解决方案1】:

    我不喜欢这样的说法:“创建在有效负载中传递的人员,然后以婴儿类型的所有人员的列表进行响应”。这两个操作应该分开执行。

    【讨论】:

    • 谢谢,要详细说明吗?我正在尝试阅读 HTTP 规范以及 Atom Pub。我找不到任何明确禁止这样做的地方。如果我采用这种方法,我可能会遇到什么问题?
    • 您可能不会遇到任何问题,但通常客户端会发起请求,服务器会处理并返回适当的响应。对于POST /persons,应创建一个新条目(人)。在这种情况下,客户端的请求中没有指定资源名称,新的对象 URL 路径将返回给您。新条目的 ID 由服务器创建,通常作为对此 POST 操作的响应返回。 POST 创建一个子资源,因此对 /persons 的 POST 创建一个位于 /persons 资源下的资源,例如 /persons/sam
    【解决方案2】:

    我认为 /person/list 作为添加人员的 api 没有多大意义。如果有的话,它应该是/person/add。 REST 没有什么特别的东西可以阻止你试图变得聪明,但我期望在 /person/add 上的响应将是 add 的结果。尝试移植一些额外的功能只会让您的客户(即将使用您的 API 的人)变得更加复杂。

    【讨论】:

    • POST 到 /person/list 以添加新人没有任何问题。这是很常见的约定。
    • 我没有说它有什么问题。但是,我认为这种方法没有任何价值,而且 REST 肯定没有指定使用该约定。例如,已经存在很长时间的 Flickr 使用它来上传照片:api.flickr.com/services/upload。仅仅因为你可以做某事并不意味着你应该做。
    • 使用包含动词的 URI 的问题在于,请求的语义并不总是很明显。例如,GET /person/add 是做什么的?
    • 我同意达雷尔的观点。 HTTP 规范已经提供了动词。 URI 应该包含名词。
    • @Sam:List 被用作动词。
    猜你喜欢
    • 2012-07-04
    • 1970-01-01
    • 2011-02-24
    • 1970-01-01
    • 2011-01-20
    • 2019-08-22
    • 1970-01-01
    • 2015-07-17
    相关资源
    最近更新 更多