Model view controller 在spring mvc之上用于动态showform的RESTful api

Model view controller 在spring mvc之上用于动态showform的RESTful api,model-view-controller,rest,Model View Controller,Rest,我想为简单项目的CRUD构建一个典型的mvc应用程序,api应该是RESTful的。这里的问题是,我有一大堆需要初始化的项目。在服务器端,这些项被定义为javabean,并根据从bean中获取的字段信息(数据类型、验证约束等)动态创建相应的项创建表单。 我不熟悉REST,只是读了一些关于URL应该如何定义HTTP谓词指定的资源和操作的知识。从这个角度来看,如何对类似 ../client/showForm?type=xyz从非RESTful方式到RESTful方式??我在这里的意图是告诉服务器动态

我想为简单项目的CRUD构建一个典型的mvc应用程序,api应该是RESTful的。这里的问题是,我有一大堆需要初始化的项目。在服务器端,这些项被定义为javabean,并根据从bean中获取的字段信息(数据类型、验证约束等)动态创建相应的项创建表单。 我不熟悉REST,只是读了一些关于URL应该如何定义HTTP谓词指定的资源和操作的知识。从这个角度来看,如何对类似
../client/showForm?type=xyz
从非RESTful方式到RESTful方式??我在这里的意图是告诉服务器动态构造并发回xyz类型的客户机的创建表单。我上面提到的url的一个明显问题是,它在url中指定了操作,从我所读到的内容来看,这使它成为非RESTful的。

当我想到REST时,我想到了资源。我想到数据。换句话说,我不认为REST是我通常用来检索表单的东西,表单是一个用户界面组件

REST是一种体系结构样式,用于使用统一资源标识符或URI标识服务器上的资源。此外,对URI标识的资源执行的操作是根据请求中使用的特定HTTP方法确定的:GET、POST、PUT、DELETE等

因此,假设您有一个客户机对象。该客户端对象可能具有以下属性:

  • 名字
  • 位置
  • 帐号
如果要检索单个客户端的数据,可以使用以下URI:

GET /client/xyz/   # xyx is the accountnumber used to identify the client.
我将使用GET方法,因为REST将GET描述为从服务器检索数据时要使用的方法

# 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"}
理论上,数据可以用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扩展到其他开发人员希望使用它的地方,他们可以这样做,而不管他们使用的是什么特定平台或编程语言。换句话说,API可以用于我的PHP、Java、C#、Python、Ruby或Perl开发人员

换句话说,任何可以发出HTTP请求并可以发送GET、POST、PUT、DELETE请求的语言或平台都可以用于扩展或构建API。这是休息的真正好处

有关将控制器设置为使用REST with Spring MVC的更多信息,请参阅。此外,请查看以了解更多信息


另外,如果您还没有签出,我强烈建议您签出。最后,关于REST的另一个好的经典读物是。享受。

您好,感谢您的回答,当我们使用REST api创建资源时,我们的理解是用户知道有关资源的详细信息,即应该为其发送数据的字段。但是,如果用户在创建资源之前必须发现该信息,该怎么办呢。您会将ResourceRepository建模为一个单独的REST资源查询,用户可以从中发现他想要创建的资源吗?在探索您关于
GET/client/abc/htmlform/
的想法并听了这些之后,我在想我想要的东西是否适合这个HATEOAS东西,我的意思是,我不想要html表单本身,而是字段信息,成功创建“abc”(来自上面的示例)需要为其提供数据,但令人毛骨悚然的是整个相互依赖的字段和内容。从我对HATEOAS的一点了解来看,这件事看起来像是一个人应该能做这样的事情,但我不知道how@redzedi-我不熟悉HATEOAS,但我明天会查看你的链接。