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
、关注者列表、startTime
和maxItems
。
在服务器端(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/将 /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的主要内容,如果未能解决你的问题,请参考以下文章