我正在创建一个包含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响应返回给客户端。
答案 0 :(得分:6)
我认为我们需要从你的问题中稍微回顾一下。您的路径段以:
开头/services/processuser
这是一个错误。 URI应标识资源,而不是操作。这可能并不总是可行,但这是你应该努力的目标。
在这种情况下,您似乎使用uid
和eid
(无论是那些人)识别您的用户。您可以构建路径,例如/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设定的标准。您可能会也可能不会同意它是有效的标准。