[英]Write a wrapper to expose existing REST APIs as SOAP web services?
我有现有的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)
你怎么用这个?
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配置使其可用
让我们讨论这些方法及其优缺点
单独的SOAP服务
使用Python的Soap Wrapper (我最喜欢和建议的方式去)
如果是,则回答上述所有问题。
您的来电 ,
评论和批评是最受欢迎的
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.