As many as HTTP frameworks support using the custom method and custom HTTP status code to be used inside the codes, I wonder that is it possible to do the same thing with Falcon?
I tried:
class MyResource:
def on_obtain(self, req, resp):
# do some thing
and I also add it to the API
routes, but when I call this API I get HTTP/1.1 400 Bad Request
with this body:
{"title":"Bad request","description":"Invalid HTTP method"}
my question is that is it possible to define obtain
on this resource?
I think you need to use Custom Routers. Just an example:
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)
Let's check:
curl -X EXAMPLE http://127.0.0.1:8000/test
EXAMPLE⏎
curl http://127.0.0.1:8000/test
GET⏎
So, all what you need is just create Router
and implement add_route()
/ find()
methods. Hope you understand what I mean.