Какую простую библиотеку jsonrpc, совместимую с WSGI на основе Python, использовать на стороне сервера для «пижамы»?

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

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

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


person Titon    schedule 20.06.2011    source источник


Ответы (2)


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

Я использую 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)
person Shekhar    schedule 12.09.2011
comment
На самом деле я переключился на какой-то другой проект. В любом случае, приятно знать, как ты это делаешь. Еще раз спасибо. - person Titon; 14.09.2011
comment
Конечно. Я как бы этого и ожидал. Этот ответ больше подходит разработчикам, которые при поиске приводят их на эту страницу :-). - person Shekhar; 14.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]
person freestyler    schedule 09.12.2011