在猎鹰中添加自定义HTTP方法?



尽管HTTP框架支持使用自定义方法和自定义HTTP状态代码在代码中使用,但我想知道是否可以对Falcon做同样的事情?

我试过了:

class MyResource:
def on_obtain(self, req, resp):
# do some thing

并且我还将其添加到API路由中,但是当我调用此 API 时,我使用此正文HTTP/1.1 400 Bad Request

{"title":"Bad request","description":"Invalid HTTP method"}

我的问题是是否可以在此资源上定义obtain

我认为您需要使用自定义路由器。举个例子:

class Resource:
def on_get(self, req, resp):
resp.body = req.method
resp.status = falcon.HTTP_200
def on_example(self, req, resp):
resp.body = req.method
resp.status = falcon.HTTP_200
class MyRouter(routing.DefaultRouter):
# this is just demonstration that my solution works
# I added request method into method_map
def add_route(self, uri_template, method_map, resource):
super().add_route(uri_template, method_map, resource)
method_map['EXAMPLE'] = resource.on_example
def find(self, uri, req=None):
return super().find(uri, req)
api = falcon.API(router=MyRouter())  # just set your router
test = Resource()
api.add_route('/test', test)

让我们检查一下:

curl -X EXAMPLE http://127.0.0.1:8000/test
EXAMPLE⏎
curl http://127.0.0.1:8000/test
GET⏎

因此,您所需要的只是创建Router并实现add_route()/find()方法。希望你明白我的意思。

Falcon 3内置了对自定义HTTP方法的支持。

你可以

  • 使用环境变量FALCON_CUSTOM_HTTP_METHODS,它是以逗号分隔的自定义方法列表:

    export FALCON_CUSTOM_HTTP_METHODS=EXAMPLE,PURGE
    
  • 或者以编程方式将其添加到COMBINED_METHODS常量中:

    import falcon.constants
    falcon.constants.COMBINED_METHODS += ['EXAMPLE', 'PURGE']
    

相关内容

  • 没有找到相关文章

最新更新