Из коробки Spyne, кажется, оборачивает выходное сообщение JSON (P) в массив. С
out_protocol=JsonP('serviceResp', ignore_wrappers=True),
я получаю ~
serviceResp([{ ... }]);
С
out_protocol=JsonP('serviceResp', ignore_wrappers=False),
Он оборачивает его в оболочку Result/Response,
serviceResp({"appResponse": {"appResult": [{ ... }]);
Я попытался установить _body_style='bare', чтобы увидеть, имеет ли это какой-либо эффект, но получаю сообщение об ошибке, касающееся слишком большого количества параметров функции (??).
Exception: body_style='bare' can handle at most one function argument.
Я также безуспешно пытался установить _returns= для различных типов.
EDIT1: вот пример кода, который фактически переносит результат в массив. EDIT2: изменен код ниже, чтобы получить более простое сообщение.
import logging
logging.basicConfig(level=logging.DEBUG)
from spyne.application import Application
from spyne.decorator import srpc
from spyne.service import ServiceBase
from spyne.model.primitive import Integer
from spyne.model.primitive import Unicode
from spyne.model.complex import Iterable
from spyne.protocol.http import HttpRpc
from spyne.protocol.json import JsonDocument
from spyne.server.wsgi import WsgiApplication
class HelloWorldService(ServiceBase):
@srpc(_returns=Unicode)
def say_hello():
yield 'Hello, James'
application = Application([HelloWorldService],
tns='spyne.examples.hello',
in_protocol=HttpRpc(validator='soft'),
out_protocol=JsonDocument()
)
if __name__ == '__main__':
# You can use any Wsgi server. Here, we chose
# Python's built-in wsgi server but you're not
# supposed to use it in production.
from wsgiref.simple_server import make_server
wsgi_app = WsgiApplication(application)
server = make_server('0.0.0.0', 8000, wsgi_app)
server.serve_forever()
["Hello, James"]
Кто-нибудь может объяснить, как удалить оболочку массива из ответа?
-Джеймс