Bạn có thể nói, SOAP
và REST
về cơ bản là apples
và oranges
.
Về cơ bản, bạn cần một thứ gì đó, nơi bạn có thể sử dụng API REST.
Như tôi thấy, bạn có một số lựa chọn:
- Sử dụng dịch vụ SOAP riêng chạy trên một cổng (endpoint). Cho rằng tôi sẽ nói, sử dụng khuôn khổ của như Spyne kiểm tra ra mẫu hello world
- Sử dụng các khách hàng ưa thích bằng cách nào, hoặc SOAP qua WSGI hay SOAP qua HttpRPC
- Gọi các điểm cuối REST API cùng mà bạn đã tạo thông qua các phương pháp trong SOAP. Chúng tôi đã sử dụng một wrapper api nội bộ trong một trong những ứng dụng, đó là như sau:
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)
Làm thế nào bạn có thể sử dụng điều này?
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())
Hiện nay có một số ví dụ mà bạn có thể nhìn vào, là cấu hình Django để làm cho nó available
Và? Câu hỏi của bạn là gì? –
Tôi muốn biết cách viết về một trình bao bọc trong python để tôi có thể trưng ra một số API REST của tôi như các dịch vụ web SOAP. HOẶC tôi có nên tạo các dịch vụ web SOAP một cách riêng biệt và sử dụng lại mã không? –
Bạn đã thử những gì? –