Flask class based API and jsonrpc
我在Django中开发了rest API之后才开始使用Flask。 我想开始使用Flask并构建一个JSONRPC API。 我正在使用python 3.4,想知道如何(以及是否)可以使用类来实现API,而不是到目前为止所见的教程中所描述的方式。
例如:
1 2 3 | @jsonrpc.method('app.index') def index(a): return 'hello {a}'.format(a=a) |
我可以做点什么:
1 2 3 | class Index() def mymethod(self, a) return 'hello {a}'.format(a=a) |
如果有这样的构想,有人能指出我正确的方向吗?
关键是我想为所有API端点实现身份验证,并且在使用类时,我可以创建身份验证类并使用
1 2 3 | class Index(Auth, SomeOtherBehaviour): def mymethod(self,a) return 'a' |
我是在寻找正确的方法吗(来自Django,这似乎很熟悉),或者在Flask中还有另一种/更好的方法吗?
这取决于API的目的。
如果您试图允许客户:
-获取有关对象的信息
-创建和存储新对象
-更新旧对象
-删除现有对象
然后,您将基于Resources创建一个API(资源=对象实例),并且应该使用RESTful api,例如flask-Restful。如果您创建网站并尝试组织这些资源,将它们存储在数据库中,显示它们,并通过api与它们进行交互,则应该使用Django,因为Django的ORM已经解决了所有这些问题。
如果您试图允许客户:
-根据参数向服务器远程发布命令之类的功能
然后,您将创建RPC API,并应使用flask-jsonrpc之类的东西。
祝您项目顺利。
看看Flask-Restful。它为您提供了基于类的视图,这些视图已与HTTP Verb耦合,并且将减轻路由的麻烦。该框架提供了上述动词路由,输入验证和JSON编组。
1 2 3 4 5 6 7 | class FooResource(Resource): def get(self, name): return 'hello {0}'.format(name) def post(self): # save data or pass data to DjangoAPI return 201 |
编辑:
您可以使用Flask-Restful的基于类的端点,如果对基于类的功能非常感兴趣(我对Django不熟悉),则可以将它们用作RPC端点,您可能还需要查看蓝图。 Flask-Restful只是为您提供了编写RESTful API的方法,但并没有使您满意。
至于身份验证,我们在Flask应用程序中完成的工作是编写一个装饰器,该装饰器检查auth令牌并在请求进入时对其进行验证。
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 | def authenticate(func=None, *, roles=None): if func is None: return partial(authenticate, roles=roles) @wraps(func) def wrapper(*args, **kwargs): try: if authorization_check(): result = func(*args, **kwargs) else: result = flask.abort(401) except ResourceNotFoundException: result = flask.abort(404) return result return wrapper |
然后您的端点只需要一个