Ank*_*rma 14 django rest soap python-3.x django-rest-framework
我有现有的REST API,使用Django Rest Framework编写,现在由于一些客户端需求,我必须将其中一些暴露为SOAP Web服务.
我想知道如何在python中编写包装器,以便我可以将一些REST API作为SOAP Web服务公开.或者我应该单独制作SOAP Web服务并重用代码?
我知道这是一个奇怪的情况,但任何帮助将不胜感激.
你可以说,SOAP和REST基本上是apples和oranges.
你基本上需要一些东西,你可以使用REST 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)Run Code Online (Sandbox Code Playgroud)
你怎么用这个?
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())
Run Code Online (Sandbox Code Playgroud)
现在有一些例子可供您查看,作为Django配置使其可用
| 归档时间: |
|
| 查看次数: |
1467 次 |
| 最近记录: |