次の機能を持つようにアプリを構成しますか?
app.add_route('/v1/tablets', TabletsCollection())
として定義されたapiエンドポイントを持っている
そして、このようなQueryParamsを引き続き使用できますhttps://example.com/api/v1/tablets?limit=12&offset=50&q=tablet name
コレクションには2つのメソッドがありますon_get
リスト全体を取得し、フィルターを使用してon_post
単一のレコードを作成するため。
私はしばらくの間ネットを検索してきましたが、query_stringと適切に解析されたパラメータをどのように取得しますか?
クエリ文字列と解析されたクエリ文字列(dictとして)の両方が、falconがAPIエンドポイントに渡すRequestオブジェクトで使用できます。
ハンドラーは次のようなことを行うことができます。
class TabletsCollection():
def on_post(self, req, resp):
print req.query_string
for key, value in req.params.items():
print key, value
http://falcon.readthedocs.io/en/stable/api/request_and_response.html#Request.query_string および http://falcon.readthedocs.io/en/stable/ api/request_and_response.html#Request.params 。
falcon.uriモジュールを使用してクエリ文字列を解析できます。
qs = falcon.uri.parse_query_string(req.query_string)
if "myq" in qs:
searchedQ = qs["myq"]
しばらくして私はそれを理解しましたが、最初に思っていたように、問題はファルコンにありませんでした。問題は、リクエストをgunincornにプロキシしているNginx構成にありました。
ここで完全な答えを見つけることができます nginxを使用して、クエリパラメータを転送する方法は? またはここで短い答え:
Nginx設定ファイルの一部
location ~ ^/api/(.*)$ {
# ... your code
# need to pass all the args to proxy
proxy_pass http://gunicorn/$1$is_args$args;
}