Ответ 1
Можно сказать, SOAP
и REST
в основном apples
и oranges
.
В основном вам нужно что-то, где вы можете использовать API REST.
Как я вижу, у вас есть несколько вариантов:
- Используйте службу SOAP отдельно, работая на другом порту (конечная точка). Для этого я бы сказал, используйте фреймворк, например Spyne проверить образец hello мир
- Используйте предпочтительный путь клиентов, либо SOAP через WSGI, либо SOAP через HttpRPC
- Вызывать те же конечные точки API REST, которые вы создали с помощью методов в SOAP. Мы использовали внутреннюю оболочку api в одном из приложений:
def wrap_internal_api_call(requests_api_method, uri,
data, cookies=None, headers=None):
return requests_api_method(uri, data=data, files=files,
cookies=cookies, headers=headers)
Как вы можете это использовать?
import requests
from django.core.urlresolvers import reverse
from django.conf import settings
from spyne.service import Service
from spyne.decorator import srpc
from spyne.model import ByteArray, DateTime, Uuid, String, Integer, Integer8, \
ComplexModel, Array
# This method will hit the internal API which is written in DJANGO REST FRAMEWORK
def build_internal_uri(uri):
return 'http://localhost:{0}{1}'.format(settings.INTERNAL_API_PORT, uri)
class RequestHeader(ComplexModel):
some_field = String
class SomeService(Service):
# Headers related doc
# https://github.com/arskom/spyne/blob/68b9d5feb71b169f07180aaecfbe843d8ba500bf/doc/source/manual/06_metadata.rst#protocol-headers
__in_header__ = RequestHeader
@srpc(String, _returns=String)
def echo_string(s):
headers = ctx.in_header.some_field
# Reverse url from the urls.py file
local_order_fetch_url = build_internal_uri(reverse('website:order_details')) + '?order_id=' + order_id
response = wrap_internal_api_call(requests.get, local_order_fetch_url,
{ 'data': 'sample_data' }, None, headers)
return response['data'] # Some string data
app = Application([SomeService], 'tns', in_protocol=HttpRpc(parse_cookie=True),
out_protocol=HttpRpc())
Теперь есть примеры, которые вы можете изучить, будучи конфигурацией Django для ее доступно