我一直在设计一个API,该API可让客户创建产品(将产品视为网站域之类的东西,当客户向其订购服务时便应运而生)。与每次购买相应地导致创建订单对象。这意味着通过一个POST请求创建两个资源。
因此afaik,RFC标准建议在创建资源时使用201
头中的资源用URI发送Location
。但是在上述情况下,我们正在创建两个资源,域和订单,我希望响应包含与这两个资源相关的信息。
响应看起来与此类似
POST /domains/
Request
body: {"domain_name": "awesome.com"},
Response
Body: {"order_id": "1234"}
Headers:
Location: http://example.com/awesome.com
但是看起来并不十分RESTful。我想知道是否有一种RESTful的方式来做到这一点?
答案 0 :(得分:2)
RFC 7231,section 6.3.2
201(已创建)状态码表示请求已完成,并且已创建一个或多个新资源。由请求创建的主要资源由响应中的Location头字段标识,或者,如果未接收到Location字段,则由有效请求URI标识。
201响应有效负载通常描述并链接到所创建的资源。
换句话说,在网络上,我们将通过返回一个HTML文档(包含指向所有已创建资源的超链接)以及描述每个资源的文本的HTML文档来解决您的难题,以便客户端知道哪些新标识符可用。 / p>
要使这样的响应机可读,我们将记录消息的架构,以便专门的客户知道如何识别所提供的每个链接的语义。
如果将HTML替换为其他媒体类型(例如application / json),则相同的想法有效。您定义架构,然后专用客户端可以解析响应以找到他们所需的标识符。
当然,REST主要是将事物标准化,以便我们可以使用通用组件。 application/json
在这里有些不足,因为它不包含URI类型(只是字符串,太笼统了)。为了更“ RESTful”,您可以选择一种特殊的JSON类型,该类型具有链接的通用表示。
Sookocheff的文章On Choosing a Hypermedia Type....是您要考虑的各种问题的一个不错的起点。