REST风格的URL的首选方法?

时间:2011-09-16 16:16:12

标签: java json rest spring-mvc

我正在创建一个包含REST风格服务的Web应用程序,我想要了解一下我的Java服务器端应该如何接受POST请求的首选(标准)方法:

方法1: http://localhost:8080/services/processser/uid/ {uidvalue} / EID / {eidvalue}

方法2: http://localhost:8080/services/processuser {uid:“”,eid:“”} - 这将在帖子正文中以JSON格式发送

两种方法都会使用“application / json”内容类型,但每种方法都有优点和缺点。方法2的一个缺点,我可以立即想到的是,JSON数据需要映射到Java Object,从而在任何用户访问“processuser”servlet api时创建Java对象。非常感谢您的意见。

在此特定实例中,数据将用于查询数据库,以将json响应返回给客户端。

2 个答案:

答案 0 :(得分:6)

我认为我们需要从你的问题中稍微回顾一下。您的路径段以:

开头
/services/processuser

这是一个错误。 URI应标识资源,而不是操作。这可能并不总是可行,但这是你应该努力的目标。

在这种情况下,您似乎使用uideid(无论是那些人)识别您的用户。您可以构建路径,例如/user/<uid>/<eid>/user/<uid>-<eid>引用的用户(如果您必须/user/uid/<uid>/eid/<eid>);如果eid是专业化,而不是与uid平等,那么/user/<uid>;eid=<eid>会更合适。

如果您事先知道标识符,则使用/user/上的DELETE并更改状态/user/<uid>/<eid>或/user/<uid>/<eid>来创建新用户>在/user/<uid>/<eid>上使用PUT。

因此,要回答您的问题,如果“processuser”旨在使用您提供的数据更改用户的状态,则应在/user/<uid>/<eid>上使用PUT。否则,到REST模型的映射不是那么干净,可能最好的选择是定义资源/user/process/<uid>/<eid>并在那里用所有数据POST,但是对/user/process的POST包含所有数据或多或少相同,因为我们已经处于类似RPC的阵营。

答案 1 :(得分:0)

对于POST请求,方法2通常是首选,但通常资源名称将是多元化的,因此您实际发布到:

http://localhost:8080/services/processusers

然而,这是用于创建新记录。

看起来你真的在使用大多数RESTful服务会使用GET请求(检索记录),在这种情况下,首选方法1。

编辑: 我意识到我没有找到答案,所以请考虑Rails设定的标准。您可能会也可能不会同意它是有效的标准。