0

我正在尝试了解 REST 架构,但我有一个问题。

我不明白@POST 和@GET 之间的所有区别......对我来说,我只是从技术角度看待它们,我的框架(GWT-P)允许我使用各种参数(String,int,但不是对象)与@GET 和各种参数(包括只有一个对象类)与@POST ...

那么,如果我使用 @POST 而不是 @GET ,我会创建什么样的错误(逻辑错误、不良架构等)?因为,例如,如果我想检索数据,使用@GET 似乎是合乎逻辑的,不是吗?但是,如果我想传递很多有用的参数来检索这些数据(例如:日期,地点,用户......),所以从技术上讲,我必须使用@POST......

那么,@GET、@POST 呢?是否有必要尊重所有“检索操作”(我的意思是获取数据操作)应该是 @GET 而不是 @POST 的逻辑?

谢谢你,

4

5 回答 5

2

首先,REST 是一种架构风格,因此它与协议无关。您的问题与 HTTP 的正确使用有关,而不是 REST。

如果您需要在检索时传递参数,您应该在查询字符串中发送它们,而不是在 POST 中。请记住,包括查询字符串在内的整个 URI 是资源的原子标识符。

使用 POST 检索的问题在于,此方法是为非幂等操作保留的,这可能会对服务器端产生一些副作用。例如,一个 POST 永远不会被缓存,如果响应丢失,客户端不能随意重新提交一个 POST,而无需首先检查请求是否真正成功。

于 2013-11-01T13:28:42.300 回答
1

在 REST 逻辑中:

  • GET => 获取资源(带有 id)
  • POST => 创建资源
  • PUT => 更新资源(带有 id)
  • DELETE => 删除资源(带有 id)

很少需要为资源指定许多参数(否则,软件设计中会出现问题)。

通常只有一个标识符作为参数(或标识符和资源类型,诽谤,...,但不超过 HTTP/GET 中参数的限制数量)。

于 2013-11-01T09:51:57.300 回答
1

基本上,这些 HTTP 方法只是语义,它们的预期用途只是一个指导方针。

但是,在服务器端处理这些请求时,请记住,网络爬虫也使用这些方法,因此,例如,让 GET 请求除了显示数据之外做任何其他事情都是不安全的,并且可能会在您的应用程序中产生一些难以跟踪的问题。

更多关于这一点。 http://en.wikipedia.org/wiki/Hypertext_Transfer_Protocol#Safe_methods

于 2013-11-01T09:56:04.920 回答
0

如果您为此发布 API,那么我会使用 @GET 方法,但如果不是这种情况,请务必使用 @POST。

@POST 为您提供了更多选项,并且没有像 @GET 这样的参数查询字符串长度限制,唯一的缺点是 @POST 创建请求的速度慢了几毫秒。

于 2013-11-01T09:54:38.323 回答
0

如果您需要将查询信息传递给 URI 以准确指定您想要的资源,请不要使用 POST。将 GET 与查询字符串一起使用。

例如

http://myapi.com/someresource?day=01012014&place=Dublin&user=JohnDoe

或者如果存在有意义的层次结构,则将其构建到 URI 本身中

http://myapi.com/users/JohnDoe/locations/Dublin/telephones/01231414
于 2013-11-01T11:38:42.013 回答