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

Posted

技术标签:

【中文标题】Flask:使用数组参数实现 HTTP GET【英文标题】:Flask: Implementing a HTTP GET with an array parameter 【发布时间】:2014-05-14 11:51:39 【问题描述】:

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

请求带有一些参数,包括userId、关注者列表、startTimemaxItems

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

唉,向GET 请求is not a good idea 添加有效负载,许多客户端库不支持它。

我的选择:

发出/feed POST 请求。这很难看,因为 POST 不应该用于从服务器请求信息。 将/feed 调用拆分为/updateFollowers (POST) 和/feed (GET)。这会浪费时间,因为只有在POST 调用之后才能进行GET 调用。

这两个选项似乎都错了。是否有任何标准方法可以使用一堆复杂的参数进行类似GET 的调用?

【问题讨论】:

REST 并没有您可能知道的真正规则,但我想与您分享我的观点:像 /getFeed 这样将“请求类型”放入资源中也很丑陋,我会坚持使用/feed。除此之外,与其将用户作为参数传递给/feed,不如构造像/users/<userId>/feed 这样的url,但这取决于其余服务的实现 @TimCastelijns getFeed 是个错误 - 真的是 /feed。除此之外,userId 可以作为 URL 参数 - 但如何在 URL 中传递数组? 在这种情况下使用 POST 可能不是一个坏主意。见***.com/questions/5020704/… @TimCastelijns 似乎是对的。您想将其作为完整答案发布,以便我投票/接受吗? 因为你必须使用一堆复杂的参数,一个 POST 请求是有意义的。我不认为有任何规则说 POST 绝不能用于读取操作。但是,我会问你是否有一种方法可以最小化示例中的参数。如果您只是在 GET 请求中发送“用户 ID”并让服务器确定他们的关注者等怎么办?对于最大条目,您可以使用 /feed// 之类的内容将其添加到 GET 请求中,其中 startTime 和 maxItems 可以是可选的,并且烧瓶视图会将它们默认为某些内容 【参考方案1】:

将 /feed 调用拆分为 /updateFollowers (POST) 和 /feed (GET)。 这会浪费时间,因为 GET 调用只能在 POST 调用。

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

制作 /feed 一个 POST 请求。这很丑陋,因为 POST 不应该是 用于向服务器请求信息。

我明白你为什么认为这很丑陋。但是,使用 POST 请求获取数据听起来是错误的,如 this question's top answer 所述:

实现 RESTful 搜索的最佳方式是考虑搜索 本身就是一种资源。然后你可以使用 POST 动词,因为你 正在创建搜索。你不必从字面上创造一些东西 在数据库中以便使用 POST。

由于这与您正在执行的操作类似,因此使用 POST 可能不是一个坏主意。我没有看到更好的替代方案,因此您可能希望像这样实现它。

【讨论】:

POST-ing 搜索对我来说没有多大意义,但它可能是(相当多的)邪恶中较小的一个。 @AdamMatan 这可能是(相当多的)邪恶中较小的一个我想是的,是的。您可以通过这样的思考使其更有意义将搜索本身视为一种资源虽然

以上是关于Flask:使用数组参数实现 HTTP GET的主要内容,如果未能解决你的问题,请参考以下文章

get请求如何传递数组参数

在GET请求中传数组

get请求如何在url中加入数组参数

使用flask传递http请求

将多值/数组 GET 参数传递给 Azure Function 并在 CosmosDB 中使用

URL 通过Get方式传递数组参数