RESTful - 我啥时候应该使用 POST 和 GET?

Posted

技术标签:

【中文标题】RESTful - 我啥时候应该使用 POST 和 GET?【英文标题】:RESTful - when should I use POST and GET?RESTful - 我什么时候应该使用 POST 和 GET? 【发布时间】:2014-01-19 19:03:11 【问题描述】:

这是我的 WCF 服务,用户可以在其中找到他的消息。 简单:

    [OperationContract]
    [WebGet(UriTemplate = "/GetMessages/UserGLKNumber/UserPassword/SessionToken")]
    Messages GetMessages(string SessionToken, string UserPassword, string UserGLKNumber);

我对那条线有顾虑:UserGLKNumber/UserPassword/SessionToken

我必须先验证用户身份,然后才能收到该消息。但是使用GET 方法,我无法发送对象,例如POST

是否与 REST 模式一致?

请解开我的疑惑。

【问题讨论】:

在 URL 中传递用户密码既奇怪又不安全。我不会推荐这个。如果您有会话令牌,则应在此调用之前完成身份验证。还应考虑 HTTP 身份验证。 REST 没有也不应该使用会话.. 【参考方案1】:

已经有帖子和问题了,我总结一下

    POST 动词用于创建新资源(在您的情况下为文件)并且重复操作会在服务器上创建多个资源。如果多次上传同名文件会在服务器上创建多个文件,则此谓词会有意义。

    PUT 动词用于更新现有资源或创建具有预定义 ID 的新资源。多个操作将重新创建或更新服务器上的相同资源。如果第二次、第三次上传同名文件会覆盖之前上传的文件,这个动词就有意义了。

    POST 每次您修改服务器上的某些状态(如数据库更新、删除)时。 GET 用于只读获取,例如数据库选择。

    GET:获取条目集合(作为提要文档)或单个条目(作为条目文档)。

    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-Guide

http://msdn.microsoft.com/en-us/magazine/dd315413.aspx

http://social.msdn.microsoft.com/Forums/vstudio/en-US/643e0d8b-80bb-45eb-8a84-318ac8de4497/difference-between-the-rest-verbs-put-and-post?forum=wcf

【讨论】:

【参考方案2】:

就 Restful 服务而言...

发布: 1. 在应用程序中使用而不是在获取中使用它是安全的。 2. 没有配置代理服务器。 3. 受Web服务器限制的大数据长度。 4. 浏览器没有缓存。 5. 输入为xml

获取: 1. 在应用程序中使用而不是在获取中使用它是不安全的。 2. 配置代理服务器。 3. 使用url编码技术。 4. 缓存在浏览器中。 5. 如果您不声明任何人,则它是默认值。 6 它将输入作为字符串并返回格式化的输出。

【讨论】:

以上是关于RESTful - 我啥时候应该使用 POST 和 GET?的主要内容,如果未能解决你的问题,请参考以下文章

我啥时候应该使用导航控制器?

我啥时候应该特别使用 .jsx 和 .js?

我啥时候应该在 Twitter Bootstrap 中使用容器和行?

我啥时候应该生成混合伞和凤凰伞?

我啥时候应该使用 Vuex?

我啥时候应该使用 PHP 会话、浏览器本地存储和 JavaScript 对象参数?