### 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 头信息。
- 《Restful Web Service Cookbook》
- 简介
- 推荐序
- 第 1 章 使用统一接口
- 1.1 如何保持交互的可见性
- 1.2 何时使用 GET 方法
- 1.3 何时使用 POST 方法
- 1.4 如何使用 POST 方法创建资源
- 目录
- PHP RESTful
- 理解RESTful架构
- 深入浅出REST
- 表述性状态转移
- 无状态
- 设计指南
- RESTful API 设计指南
- RESTful API 设计最佳实践
- 测试工具
- soapUI
- 实例
- 豆瓣
- 应用
- 接口规范
- 视频
- 《Restful API实战》
- 课程目标
- 第1章 Restful是什么
- 1-1 restful简介及资源介绍
- 第2章 为什么要使用Restful
- 2-1 Restful中HTTP协议介绍
- 2-2 架构区别
- 第3章 如何使用Restful
- 3-1 restful设计要素
- 3-2 DHC Client
- 3-3 本地开发环境搭建
- 3-4 确认设计要素
- 3-5 数据库设计
- 3-6 用户业务逻辑
- 3-7 文章业务逻辑
- 3-8 restfulApi设计要素
- 3-9 初始化运行参数
- 3-10 完善用户API
- 3-11 完善文章API
- 文摘
- RESTful 接口实现简明指南
- RESTful Web 服务教程
- 模型表示(Representations)
- 资源定位
- URI中的查询参数
- 统一接口
- PUT 和 POST 的区别
- 基于 REST 的 Web 服务
- PHP Reatful
- Restful状态响应码
- 《REST API 安全设计指南》