2

spyne hello worldの例を試してみましたが、コードは基本的に次のとおりです。

class HelloWorldService(ServiceBase):
    @srpc(Unicode, Integer, _returns=Array(Unicode))
    def say_hello(name, times):
        for i in range(times):
            yield 'Hello, %s' % name

application = Application([HelloWorldService],
              tns='spyne.examples.hello',
              in_protocol=JsonDocument(validator='soft'),
              out_protocol=JsonDocument()
          )

if __name__ == '__main__':
    from wsgiref.simple_server import make_server
    wsgi_app = WsgiApplication(application)
    server = make_server('0.0.0.0', 7789, wsgi_app)
    print "rpc server start"
    server.serve_forever()

そして、私は次のようなリクエストでそれに接続しようとしています:

url = "http://127.0.0.1:7789/sayhello"
data = { "name": "World", "times": 4 }
headers = { 'content-type': 'application/json' }
r = requests.post(url, data=json.dumps(data), headers=headers)

404で戻ります。

しかし、HttpRpcプロトコルを使用している場合は、リクエストの方法は問題ありません。

では、JsonDocumentプロトコルを使用するようにクライアントを実装するにはどうすればよいですか。libを使用することをお勧めしrequestsます。

4

2 に答える 2

1

JsonDocumentプロトコルの例を介してリクエストをhttp://spyne.ioに追加しました。

チェックしてください:http ://spyne.io/#inprot=JsonDocument&outprot=JsonDocument&s=rpc&tpt=WsgiApplication&validator=true

参考のために; あなたは両方を行うことができます:

curl http://localhost:7789 -d '{ "say_hello" : { "name": "World", "times": 4 } }' 

また

curl http://localhost:7789 -d '{ "say_hello" : ["World", 4]}' 

引数の順序は、Python側の引数の順序と同じです。

于 2013-02-01T13:35:40.297 に答える
1

JsonDocument を in_protocol として使用する場合は、送信データにこの表記法を使用する必要があります...

data = { "say_hello" : { "name": "World", "times": 4 } }

これは、関数名を json のメイン キーとして渡す必要があり、その内容は関数の引数を含む json にする必要があることを意味します。

URLは同じである必要がありますが、関数名はありません。

url = "http://127.0.0.1:7789/"

もっとチェックしたい場合は、 http: //spyne.io/blog/ の spyne ブログを読んでください。

于 2013-01-29T21:15:49.880 に答える