RESTful - 我什么时候应该使用POST和GET方法?

4
这是我的WCF服务,用户可以在其中找到适合自己的消息。 简单来说:
    [OperationContract]
    [WebGet(UriTemplate = "/GetMessages/{UserGLKNumber}/{UserPassword}/{SessionToken}")]
    Messages GetMessages(string SessionToken, string UserPassword, string UserGLKNumber);

我对这条线路有所担忧: {UserGLKNumber}/{UserPassword}/{SessionToken}

在用户获取这些消息之前,我必须对用户进行身份验证。但是,使用GET方法,我无法像POST中那样发送对象。

这是否符合REST模式呢?

请澄清我的疑虑。


在URL中传递用户密码是奇怪且不安全的。我不建议这样做。如果您有一个会话令牌,那么身份验证应该在此调用之前完成。还应考虑HTTP身份验证。 - Stephane Lallemagne
REST 不应该使用会话(sessions)。 - Damien Overeem
2个回答

4
已经有关于此的帖子和问题,我正在总结它们:
1. 使用POST动词创建新资源(在您的情况下是文件),重复操作会在服务器上创建多个资源。如果上传具有相同名称的文件多次会在服务器上创建多个文件,则这种动词是有意义的。 PUT动词用于更新现有资源或使用预定义ID创建新资源。多个操作将重新创建或更新服务器上的同一资源。如果第二、第三次...上传具有相同名称的文件将覆盖先前上传的文件,则这种动词是有意义的。
2. 每次修改服务器上的某些状态,如数据库更新、删除,都要使用POST。对于只读获取,例如数据库选择,请使用GET。
3. GET:获取条目集合(作为Feed文档)或单个条目(作为条目文档)。 POST:从条目文档创建新条目。 PUT:使用条目文档更新现有条目。 DELETE:删除一个条目。
来源:Difference between PUT and POST using WCF REST
另一个有用的阅读材料包括:What's the difference between a POST and a PUT HTTP REQUEST?http://www.codeproject.com/Articles/105273/Create-RESTful-WCF-Service-API-Step-By-Step-Guidehttp://msdn.microsoft.com/en-us/magazine/dd315413.aspxhttp://social.msdn.microsoft.com/Forums/vstudio/en-US/643e0d8b-80bb-45eb-8a84-318ac8de4497/difference-between-the-rest-verbs-put-and-post?forum=wcf

4

在Restful服务方面...

Post
1.相较于Get,在应用中使用更加安全。
2.无需配置代理服务器。
3.数据长度受到Web服务器的限制。
4.不会被浏览器缓存。
5.输入格式为xml。

Get
1.相较于Post,在应用中使用不够安全。
2.需要配置代理服务器。
3.使用URL编码技术。
4.会被浏览器缓存。
5.如果您没有声明任何输入,它是默认的。
6.输入格式为字符串,并返回格式化的输出。


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接