Spyne¶
Как обычно, пишутся веб-сервисы на spyne?
Мы создаем сервис, наследуясь от класса ServiceBase, и реализуем в нём методы нашего api.
Потом нужные нам методы заворачиваем в декораторы rpc
или srpc
:
class Service(ServiceBase):
@srpc(_returns=Datetime):
def GetNow():
return datetime.datetime.now()
@srpc(Unicode, _returns=Unicode)
def Echo(string):
return string
Потом созданный сервис связывается с протоколами через Application
, который
далее передается в wsgi-приложение:
app = Application(
[Service], "tns", "name",
in_protocol=HttpRpc(),
out_protocol=JsonDocument())
wsgi_app = DjangoApplication(app)
Разберем, что тут означает каждая переменную:
class Service
- spyne-сервис, набор api-методов. Для удобства далее будем называть их просто сервисами или “услуга”def GetNow
- метод сервиса, или api-методapp
- spyne-приложение, это некий клей, который связывает между собой, сервисы и протоколыwsgi_app
- wsgi-приложение, непосредственно обработчик запросов
Связку wsgi-приложения и spyne-приложения, для простоты, будет называть - “веб-сервис”.
Используя wsfactory, вам необходимо только описать каждый api-метод отдельно
главное, чтобы их можно было импортировать через importlib.import_module
.:
# где-то в проекте, например в project/api.py
@srpc(_returns=Datetime):
def GetNow():
return datetime.datetime.now()
@srpc(Unicode, _returns=Unicode)
def Echo(string):
return string
Далее нужно перечислить их в файле конфигурации. Протоколы, услуги и веб-сервисы декларируются в файле конфигурации.