关于json rpc:基于Flask类的API和jsonrpc

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

然后您的端点只需要一个@authenticate装饰器。