Flask:使用数组参数实现HTTP GET

Flask:使用数组参数实现HTTP GET,http,rest,flask,payload,rfc2616,Http,Rest,Flask,Payload,Rfc2616,我正在实现一个HTTP REST API,它包含一个/feed请求。该请求返回用户的新闻提要 该请求附带了几个参数,包括userId、追随者列表、startTime和maxItems 在服务器端(Python和Flask)实现它的最简单方法是添加JSON负载,我可以从中读取参数 唉,向GET请求添加有效负载,许多客户端库都不支持 我的选择: 发出/feedaPOST请求。这很难看,因为不应该使用POST从服务器请求信息 拆分/feed调用/updateFollowers(POST)和/feed

我正在实现一个HTTP REST API,它包含一个
/feed
请求。该请求返回用户的新闻提要

该请求附带了几个参数,包括
userId
、追随者列表、
startTime
maxItems

在服务器端(Python和Flask)实现它的最简单方法是添加JSON负载,我可以从中读取参数

唉,向
GET
请求添加有效负载,许多客户端库都不支持

我的选择:

  • 发出
    /feed
    a
    POST
    请求。这很难看,因为不应该使用
    POST
    从服务器请求信息
  • 拆分
    /feed
    调用
    /updateFollowers
    POST
    )和
    /feed
    GET
    )。这将浪费时间,因为
    GET
    调用只能在
    POST
    调用之后进行
两种选择似乎都错了。有没有标准的方法可以用一堆复杂的参数进行类似于GET的调用

拆分对/updateFollowers(POST)和/feed(GET)的/feed调用。 这将浪费时间,因为GET呼叫只能在 电话留言


正如您可能知道的,REST并没有真正的规则,但我想与您分享我的观点:像这样在资源中放置“请求类型动词”是非常难看的,所以我不会这样做

提出/提供POST请求。这很难看,因为帖子不应该被删除 用于从服务器请求信息

我理解你为什么认为这很难看。但是,使用POST请求获取数据听起来是错误的,如中所述:

<> P>实现REST搜索的最佳方法是考虑搜索 它本身就是一种资源。然后你可以用POST动词,因为你 正在创建搜索。你不必真的去创造一些东西 在数据库中使用POST


因为这和你正在做的事情相似,所以使用POST可能不是一个坏主意。我看不到更好的替代方案,所以您可能希望这样实现它。

REST并没有您可能知道的规则,但我想与您分享我的观点:像这样在资源中放置“请求类型”也是非常难看的
/getFeed
,我只会坚持
/feed
。除此之外,与其将用户作为参数传递给
/feed
,不如像
/users//feed
那样构造url,但这取决于其他url的实现service@TimCastelijns
getFeed
是一个错误-它实际上是
/feed
。除此之外,
userId
对于URL参数是可以的,但是如何在URL中传递数组呢?在这种情况下,使用POST可能不是一个坏主意。看@TimCastelijns似乎是对的。你想把它作为一个完整的答案发布,这样我就可以投票/接受它了吗?因为你必须使用一堆复杂的参数,所以发布请求是有意义的。我不认为有任何规则规定POST绝对不能用于读取操作。但是,我想问您是否有一种方法可以最小化示例中的参数。如果您只是在GET请求中发送“userid”并让服务器确定其追随者等,会怎么样?对于max条目,您可以使用类似/feed//的东西将其添加到GET请求中,其中startTime和maxItems可以是可选的,flask view将默认它们为
POST
-搜索对我来说没有多大意义,但它可能是(相当多)弊病中较小的一个。@AdamMatan它可能是其中较小的一个(相当多)邪恶,我想是的,是的。你可以让它变得更有意义,因为这样认为搜索本身就是一种资源。