Какую простую основанную на Python WSGI-совместимую библиотеку jsonrpc использовать на стороне сервера для «пижам»? - PullRequest
5 голосов
/ 20 июня 2011

Недавно я наткнулся на пижаму рамки. Он поощряет радикально иной подход к разработке веб-приложений, разделяя весь компонент view из MVC в html + javascript (сгенерированный с помощью скомпилированного python) вместо использования традиционных шаблонов. Предполагается, что это «представление» на стороне клиента связывается с сервером через асинхронные HTTP-запросы, и платформа рекомендует использовать «jsonrpc» в качестве протокола связи.

В своей документации они использовали компонент jsonrpc на основе django. Но я в основном привык к простым и глупым решениям, таким как bottle framework . Насколько я понимаю, мне даже не нужны все компоненты таких микрофреймов. Сервер, совместимый с WSGI, некоторое промежуточное ПО для маршрутизации + сеанса и обработчик запросов, понимающий с точки зрения jsonrpc, вполне подойдет. Я ищу простое в использовании облегченное решение для последней части - легкодоступный обработчик запросов с поддержкой jsonrpc, который прекрасно подключается в среде WSGI. Их есть?

Прошу прощения и исправьте мое неправильное использование / неправильное понимание терминов, если таковые имеются.

Ответы [ 2 ]

1 голос
/ 09 декабря 2011

https://github.com/dengzhp/simple-jsonrpc

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 голос
/ 12 сентября 2011

Возможно, вы уже выбрали какую-то библиотеку. Но в любом случае.

Я использую колбу и и 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)
...