多应用+插件架构,代码干净,二开方便,首家独创一键云编译技术,文档视频完善,免费商用码云13.8K 广告
### 1.4 如何使用 POST 方法创建资源 POST 方法的应用场合之一是创建新资源,该协议类似于使用“工厂方法模式”创建新对象。 #### 问题描述 您想知道如何创建新资源,请求中需要包含什么内容,以及响应中应该包括什么内容。 #### 解决方案 将一个已存在的资源标识为创建新资源的工厂。虽然您可以把任意资源用做工厂,但常见的做法是使用一个集合资源(详见 2.3 节)。 让客户端向工厂资源提交附有需要创建资源的表述的 `POST` 请求。通过可选支持的 `Slug` 头, 客户端可以向服务器建议一个名字,作为被创建资源的URI 的一部分。 资源创建之后,返回响应码 `201(Created)`,并在 `Location` 头中包含新创建资源的URI。 如果响应正文包含了新创建资源的完整表述,那么在 `Content-Location` 头中包含新创建资源的URI。 #### 问题讨论 考虑一个为用户创建“地址”资源的例子,您可以把“用户”资源作为一个创建新“地址” 的工厂: ~~~ # 请 求 POST /user/smith HTTP/1.1 ❶ Host: www.example.org Content-Type: application/xml;charset=UTF-8 Slug: Home Address ❷ <address> <street>1, Main Street</street> <city>Some City</city> </address> # 响 应 HTTP/1.1 201 Created Location: http://www.example.org/user/smith/address/home_address ❸ Content-Location: http://www.example.org/user/smith/address/home_address ❹ Content-Type: application/xml;charset=UTF-8 <address> <id>urn:example:user:smith:address:1</id> <atom:link rel="self" href="http://www.example.org/user/smith/address/home_ address"/> <street>1, Main Street</stret> <city>Some City</city> </address> ~~~ ❶ 使用“用户”资源作为创建“家庭地址”资源的工厂 ❷ 对新资源URI 命名的建议 ❸ 新创建资源的URI ❹ 响应中表述的URI 在这个例子里,请求包含了需要创建的新资源中的数据,并在 Slug 头中包含了新资源 URI 的建议名称。请注意,Slug 头是由AtomPub(RFC5023)规定的,它只是来自客户端的建议, 服务器端并不一定要遵循它。可以阅读第 6 章详细了解AtomPub。 响应中的状态码 201 表明服务器已创建了一个新资源,并在 Location 响应头中为其指定了URI 中为`http://www.example.org/user/smith/address/home_address`。 Content- Location 头告诉客户端表述内容也可以通过这一URL 获取。 > 虽然使用了 Content-Location 头信息,您也可以包含新创建资源的Last-Modified 和 ETag 头信息。