首页 文章

如何在成功创建资源后告诉REST API接收哪个子资源

提问于
浏览
-1

我有一个带有 purchase 资源的REST API,每次购买都有一个 receipt 子资源,它返回一个包含购买信息的pdf文档 .

要创建购买,客户端会执行以下操作:

POST /purchase

并且客户端将在购买的JSON表示中获得 201 Created HTTP响应 .

然而,大多数客户希望在以下位置收到pdf收据:

GET /purchase/{id}/receipt

客户端可以执行 POST /purchase ,接收新资源的ID并调用 GET /purchase/{id}/receipt 来下载收据,但这意味着要发出2个请求而不是1个 .

是否有一种RESTful方式来指示在成功创建资源后要接收哪个子资源?

1 回答

  • 1

    根据要求,我将我的评论转换为答案:

    REST使用HTTP作为客户端和服务器之间交换的消息的传输层 . 鼓励客户端和服务器遵守HTTP的语义(以及其他一些约束),以保持互操作性并将客户端与服务器API分离 .

    HTTP提供内容类型协商的概念,其中客户端可以向服务器请求某种表示格式以接收响应 . 客户端通过发出请求的Accept header来表达他的意图 . 它还可以向服务器提供客户端支持的表示的列表,包括每个媒体类型的权重参数,其告知服务器每种媒体类型的优先顺序 . 如果客户端同时支持PDF和JSON但更喜欢PDF而不是JSON,它只需发送一个包含类似 Headers 的请求

    Accept: application/pdf;q=0.9,application/json;q=0.1
    

    与请求 .

    如果服务器能够将资源状态转换为这两种表示格式,则鼓励返回PDF表示,因为客户端更喜欢这种格式而不是另一种格式 . 如果服务器没有创建表示,客户端可以理解它必须返回406 Not Acceptable状态代码作为响应 .

相关问题