5

最近、パジャマフレームワークに出会いました。従来のテンプレートを使用する代わりに、「MVC」の「ビュー」コンポーネント全体をいくつかの html + javascript (コンパイルされた python で生成) に分離することにより、根本的に異なる Web アプリケーション開発アプローチを促進します。このクライアント側の「ビュー」は、非同期 HTTP リクエストを介してサーバーと通信することになっており、フレームワークは通信プロトコルとして「jsonrpc」を使用することを推奨しています。

ドキュメントでは、django ベースの jsonrpc コンポーネントを使用していました。しかし、私はほとんどの場合、ボトル フレームワークのような単純でばかげたソリューションに慣れています。私の知る限り、そのようなマイクロフレームワークのすべてのコンポーネントは必要ありません。WSGI 互換サーバー、いくつかのルーティング + セッション ミドルウェア、および jsonrpc を理解するリクエスト ハンドラーがあれば、問題なく動作します。私は、最後の部分で使いやすい軽量ソリューションを探しています。これは、WSGI 環境にうまくプラグインできる、すぐに利用できる jsonrpc 対応のリクエスト ハンドラーです。彼らはいますか?

用語の誤用/誤解がある場合は、ご容赦ください。

4

2 に答える 2

1

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]
于 2011-12-09T08:19:55.413 に答える
1

今までにいくつかのライブラリを選択したかもしれません。しかしとにかく。

私はフラスコと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)
于 2011-09-12T12:04:45.623 に答える