我想为简单项目的 CRUD 构建一个典型的 mvc 应用程序,api 应该是 RESTful 的。这里的问题是,我有一大堆需要初始化的物品。在服务器端,这些项目被定义为 java bean,并且项目的相应创建表单是根据从 bean 获取的字段信息(数据类型、验证约束等)动态创建的。我是 REST 新手,刚刚阅读了有关 url 应该如何定义 HTTP 动词指定的资源和操作的名词。从这个角度来看,如何建模类似
.../client/showForm?type=xyz
从非 RESTful 方式到 RESTful 方式??我的目的是告诉服务器为 xyz 类型的客户端动态构造并发送回 CREATE 表单。我上面提到的 url 的一个明显问题是它在 url 中指定了操作,从我读过的内容来看,它使其非 RESTful。
1 回答
当我想到 REST 时,我想到了资源。我想到了数据。换句话说,我不认为 REST 是我通常用来检索表单的东西,它是一个用户界面组件。
REST 是一种架构风格,用于使用统一资源标识符或 URI 来标识服务器上的资源。此外,对由 URI 标识的资源执行的操作是根据请求中使用的特定 HTTP 方法确定的:GET、POST、PUT、DELETE 等。
因此,假设您有一个 Client 对象。该客户端对象可能具有以下属性:
- 姓名
- 地点
- 帐号
如果我想检索单个客户端的数据,我可能会使用以下 URI:
GET /client/xyz/ # xyx is the accountnumber used to identify the client.
我会使用 GET 方法,因为 REST 将 GET 描述为从服务器检索数据时使用的方法。
理论上,数据可以以 HTML 格式返回,因为 REST 不是标准,而更像是一系列灵活的指南;然而,为了真正将我的数据与我的用户界面分离,我会选择使用与平台无关的东西,如 JSON 或 XML 来表示数据。
接下来,当将客户端添加到服务器上的集合时,我将使用 /client/ URI 模式,但我将使用 HTTP 方法 POST,该方法用于将资源添加到服务器上的集合中。
# Pass the data as JSON to the server and tell the server to add the client to the
# collection
POST /client/ {"accountnumber":"abc" , "Name" : "Jones" , "Location" : "Florida"}
如果我要修改或替换服务器上的现有记录,我很可能会使用 HTTP 方法 PUT,因为 REST 指南说,如果重复重复相同的操作不会改变服务器的状态,则应该使用 PUT。
# Replace the client abc with a new resource
PUT /client/abc/ {"accountnumber":"abc" , "Name" : "Bob Jones" , "Location" : "Florida"}
REST 背后的一般思想是,它用于识别资源,然后根据使用的 HTTP 方法对该资源采取行动。
如果您坚持将您的数据与您的视图耦合,一种方法可以完成此操作并使用客户端数据检索实际表单,可能是将表单表示为资源本身:
GET /client/abc/htmlform/
此 URL 当然会返回客户端 abc 的客户端数据,但会以浏览器呈现的 HTML 形式返回。
虽然我的编码风格利用 JSON 或 XML 等数据传输来从我的视图中抽象和分离我的数据,但您可以很好地将这些数据传输为 HTML。但是,使用 JSON 或 XML 的优势在于您的 RESTful API 变得独立于平台。如果您曾经将您的 API 扩展到其他开发人员希望使用它的地方,他们可以这样做,无论他们使用什么特定平台或编程语言。换句话说,我的 PHP、Java、C#、Python、Ruby 或 Perl 开发人员可以使用该 API。
换句话说,任何可以发出 HTTP 请求并可以发送 GET、POST、PUT、DELETE 请求的语言或平台都可以用于扩展或构建您的 API。这是 REST 的真正优势。
有关设置控制器以将 REST 与 Spring MVC 一起使用的更多信息,请参阅此问题。此外,请查看Spring MVC 文档以获取更多信息。
此外,如果您还没有查看REST 上的 Wikipedia 文章,我强烈建议您这样做。最后,关于 REST 的另一本经典读物是《我如何向妻子解释 REST》。享受。