Webob金字塔的查询字符串参数在收到时没有顺序。

问题描述 投票:0回答:1

我正在运行Pyramid作为我的API服务器。最近,当我们将查询字符串参数交给RESTful API服务器时,我们开始得到不按顺序的查询参数。例如,一个GET到 /v1/finishedGoodRequests?exact=true&id=39&join=OR&exact=false&name=39时被RESTful api模块记录下来。启动 作为 request.url.sql_string: join=OR&name=39&exact=true&exact=false&id=39。

v1/finishedGoodRequests?join=OR&name=39&exact=true&exact=false&id=39 

with request.query_string: join=OR&name=39&exact=true&exact=false&id=39。

我处理查询参数是为了限定搜索,在这种情况下,id正好是39或39在名称的任何地方。什么样的服务器设置或bug可能已经悄悄地进入服务器代码,导致这样的事情?它仍然是一个MultiDict...。

python api parameters query-string pyramid
1个回答
0
投票

作为一个简单的例子,这对我来说工作得很好,MultiDict一直保存着顺序,因此我怀疑你的堆栈中的某些东西被重写了。

from pyramid.config import Configurator
from pyramid.view import view_config
from waitress import serve

@view_config(renderer='json')
def view(request):
    return list(request.GET.items())

config = Configurator()
config.scan(__name__)
app = config.make_wsgi_app()

serve(app, listen='127.0.0.1:8080')

$ curl http://localhost:8080\?join=OR\&name=39\&exact=true\&exact=false\&id=39
[["join", "OR"], ["name", "39"], ["exact", "true"], ["exact", "false"], ["id", "39"]]

根据你使用的WSGI服务器,通常你可以查看environ vars来查看原始的url,这可能很方便。Waitress没有,所以只需要在管道中放一些可以注销的东西(wsgi中间件)。environ['QUERY_STRING'] 看看它是否与你的堆栈中较低的某个地方不匹配。

© www.soinside.com 2019 - 2024. All rights reserved.