【发布时间】:2014-05-14 11:51:39
【问题描述】:
我正在实现一个 HTTP REST API,其中包含一个 /feed 请求。该请求返回用户的新闻提要。
请求带有一些参数,包括userId、关注者列表、startTime 和maxItems。
在服务器端(Python 和 Flask)实现它的最简单方法是添加 JSON 有效负载,我可以从中读取参数。
唉,向GET 请求is not a good idea 添加有效负载,许多客户端库不支持它。
我的选择:
- 发出
/feedPOST请求。这很难看,因为POST不应该用于从服务器请求信息。 - 将
/feed调用拆分为/updateFollowers(POST) 和/feed(GET)。这会浪费时间,因为只有在POST调用之后才能进行GET调用。
这两个选项似乎都错了。是否有任何标准方法可以使用一堆复杂的参数进行类似GET 的调用?
【问题讨论】:
-
REST 并没有您可能知道的真正规则,但我想与您分享我的观点:像
/getFeed这样将“请求类型”放入资源中也很丑陋,我会坚持使用/feed。除此之外,与其将用户作为参数传递给/feed,不如构造像/users/<userId>/feed这样的url,但这取决于其余服务的实现 -
@TimCastelijns
getFeed是个错误 - 真的是/feed。除此之外,userId可以作为 URL 参数 - 但如何在 URL 中传递数组? -
在这种情况下使用 POST 可能不是一个坏主意。见stackoverflow.com/questions/5020704/…
-
@TimCastelijns 似乎是对的。您想将其作为完整答案发布,以便我投票/接受吗?
-
因为你必须使用一堆复杂的参数,一个 POST 请求是有意义的。我不认为有任何规则说 POST 绝不能用于读取操作。但是,我会问你是否有一种方法可以最小化示例中的参数。如果您只是在 GET 请求中发送“用户 ID”并让服务器确定他们的关注者等怎么办?对于最大条目,您可以使用 /feed/
/ 之类的内容将其添加到 GET 请求中,其中 startTime 和 maxItems 可以是可选的,并且烧瓶视图会将它们默认为某些内容
标签: http rest flask payload rfc2616