Пример JSON RPC

Для иллюстрации основ использования механизма RPC рассмотрим пример, в котором для обработки списка чисел используется класс JsonService; в примере вычисляется сумма чисел или сумма квадратов чисел. Клиент определяет SMD, в котором описываются два метода,
sum и sumOfSquares, каждый из которых принимает список чисел:


Fun with JSON RPC!



(body)
(/body)


Надеюсь, вы поняли, что при большом количестве методов, взаимодействующих с сервером стандартным способом, общая простота вызовов RPC на стороне клиента после их настройки значительно облегчает структуру приложения.


Элегантность использования функции dojo.rpc.JsonService в значительной степени обусловлена тем, что она возвращает объект Deferred, благодаря чему имеется возможность добавлять функции обратного вызова и функции обработки ошибок.

На тот случай, если вы пожелаете опробовать этот пример в действии, ниже приводится сценарий службы. Для простоты примера этот сценарий не использует библиотеку работы с форматом JSON, но на практике вы наверняка пожелаете реализовать нечто более сложное, чем этот сценарий:
import cherrypy
import os
# программный код, выполняющий запросы XHR, будет находиться в файле foo.html,
# и это видно в следующей директиве config
current_dir = os.getcwd()
config = {'/foo.html' :
{
'tools.staticfile.on' : True,
'tools.staticfile.filename' : os.path.join(current_dir, 'foo.html')
}
}
class Content:
@cherrypy.expose
def index(self):
#############################################################
# для большей простоты этот пример не использует библиотеку json.
# для реализации более сложных сценариев, чем этот, вы можете
# получить замечательную библиотеку по адресу http://json.org
############################################################
# прочитать необработанные данные, переданные методом POST
rawPost = cherrypy.request.body.read()
# преобразовать в объект
obj = eval(rawPost) #ВНИМАНИЕ! Это дыра в системе безопасности!
#вы предупреждены...
# обработать данные
if obj["method"] == "sum":
result = sum(obj["params"][0])
if obj["method"] == "sumOfSquares":
result = sum([i*i for i in obj["params"][0]])
# вернуть ответ в формате json
return str({"result" : result})
# запустить веб-сервер, который будет прослушивать порт 8080
cherrypy.quickstart(Content(), '/', config=config)

Функция JsonpService используется практически так же, как и Json-Service.


В дистрибутиве Dojo имеется пример файла SMD (dojox/rpc/yahoo.smd) для доступа к службе Yahoo!, который при желании можно опробовать.

Оцените статью: (0 голосов)
0 5 0

Статьи из раздела Dojo на эту тему:
DeferredList
JSON
OpenAjax Hub
Внедрение объектов Deferred в функции XHR
Вызов удаленных процедур