适合在“pyjamas”服务器端使用的简单Python WSGI兼容jsonrpc库有哪些?

5 投票
2 回答
2781 浏览
提问于 2025-04-16 19:56

最近,我发现了一个叫做 pyjamas 的框架。这个框架提倡一种完全不同的网页应用开发方式,它把'MVC'中的'视图'部分分开,使用一些HTML和JavaScript(这些JavaScript是用编译过的Python生成的),而不是传统的模板。这种客户端的'视图'应该通过异步HTTP请求与服务器进行沟通,框架推荐使用'jsonrpc'作为通信协议。

在他们的文档中,使用了一个基于Django的jsonrpc组件。但我更习惯于简单直接的解决方案,比如 bottle框架。根据我的理解,我甚至不需要这些微框架的所有组件。只需要一个兼容WSGI的服务器,加上一些路由和会话中间件,以及一个能理解jsonrpc的请求处理器就可以了。我在寻找一个易于使用的轻量级解决方案,特别是一个可以很好地融入WSGI环境的jsonrpc请求处理器。有没有这样的东西呢?

如果我对术语的使用有误,请原谅并纠正我。

2 个回答

1

这是一个链接,指向一个名为“simple-jsonrpc”的项目,存放在GitHub上。这个项目可能是关于简单的JSON-RPC(远程过程调用)实现的。你可以通过这个链接查看项目的详细信息和代码。

import jsonrpc

def add(a, b):
    return a + b

def default(*arg, **kwargs):
    return "hello jsonrpc"

class MyJsonrpcHandler(jsonrpc.JsonrpcHandler):
    """define your own dispatcher here"""
    def dispatch(self, method_name):
        if method_name == "add":
            return add
        else:
            return default


def application(environ, start_response):
    # assert environ["REQUEST_METHOD"] = "POST"
    content_length = int(environ["CONTENT_LENGTH"])

    # create a handler
    h = MyJsonrpcHandler()

    # fetch the request body
    request = environ["wsgi.input"].read(content_length)

    # pass the request body to handle() method
    result = h.handle(request)

    #log
    environ["wsgi.errors"].write("request: '%s' | response: '%s'\n" % (request, result))

    start_response("200 OK", [])
    return [result]
1

你可能现在已经选择了一些库了。不过无所谓。

我使用的是flask和jsonrpc2。下面是一些伪代码。我的代码和这个很相似。

import jsonrpc2

mapper = jsonrpc2.JsonRpc()
mapper['echo'] = str

@app.route('/rpc', methods=['GET', 'POST'])
def rpc():
    #req {"jsonrpc": "2.0", "method": methodname, "params": params, "id": 1}
    data = mapper(request.json)
    return jsonify(data)

撰写回答