2011-09-16 80 views
4

我创建包含REST式服务的Web应用程序,我想一些澄清的是如何在POST请求应该由我的Java服务器端接受首选(标准)方法:REST风格的URL的优先方法?

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

方法2: http://localhost:8080/services/processuser {UID: “”,EID: “”} - 这将在后体作为发送JSON

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

在这个特定的实例中,数据将被用来查询数据库,以将json响应返回给客户端。

+1

你应该清楚的第一件事是“processuser”是什么。也就是说,发布数据是否会改变资源的状态? – Artefacto

+0

什么是Artefacto说的,再加上:除非你已经证明它是一个瓶颈,否则不要担心创建一个对象来解析你的JSON。 –

回答

6

我认为我们需要从您的问题中回过头来。您的路径段开头为:

这是一个错误。 URI应该标识资源,而不是操作。这可能不总是可能的,但这是你应该争取的。

在这种情况下,您似乎用uideid(无论这些是什么)来标识您的用户。你可以建立路径,如用户被称为/user/<uid>/<eid>,/user/<uid>-<eid>(如果你必须/user/uid/<uid>/eid/<eid>);如果eid是专业化的,而不是与uid平等,那么/user/<uid>;eid=<eid>会更合适。

你会被张贴到/user//user/<uid>/<eid>如果你知道标识符提前,通过使用通过使用/user/<uid>/<eid>穿上/user/<uid>/<eid>改变状态 DELETE删除用户创建新的用户。

所以要回答你的问题,你应该在/user/<uid>/<eid>上使用PUT,如果“processuser”的目标是用你提供的数据改变用户的状态。否则,映射到REST模型并不那么干净,可能最好的选择是定义资源/user/process/<uid>/<eid>并在那里使用所有数据,但POST到/user/process所有数据都会差不多相同,因为我们已经进入RPC阵营了。

+0

我认为processuser是某种对象,很好的调用RPC点。 –

0

POST请求,方法2通常是首选,虽然经常资源名称将使用复数,因此,你实际上张贴到:

http://localhost:8080/services/processusers 

这是创建新的记录,但是。

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

编辑: 我意识到我没有收到我的答案,所以请考虑由Rails设置的标准。您可能会也可能不会同意这是一个有效的标准。