API SOAP gratis untuk pengujian, dengan WSDL

Layanan kalkulator dengan WSDL dan layanan negara, keduanya menjawab dalam SOAP 1.1 dan 1.2.

Contoh terakhir dijalankan terhadap API pada

Untuk API SOAP publik yang bisa dipakai menguji klien, gunakan https://api.testingapis.com/api/soap/calculatormasuk untuk melihat. WSDL-nya ada di https://api.testingapis.com/api/soap/calculator?wsdlmasuk untuk melihat, dan SoapUI, Postman, WCF, serta zeep untuk Python bisa mengimpornya. Ada empat operasi: Add, Subtract, Multiply, dan Divide. Layanan ini menerima SOAP 1.1 dan SOAP 1.2 serta mengembalikan SOAP fault yang benar, jadi Anda bisa menguji error selain hasil. Layanan kedua, /api/soap/countriesmasuk untuk melihat, mengembalikan data negara yang terstruktur. Keduanya gratis, tanpa pendaftaran dan tanpa API key.

KalkulatorNegara
EndpointPOST /api/soap/calculatormasuk untuk melihatPOST /api/soap/countriesmasuk untuk melihat
WSDLGET /api/soap/calculator?wsdlmasuk untuk melihatTidak ada. GET ke endpoint untuk JSON petunjuk dan contoh envelope
Namespacehttp://tempuri.org/http://example.com/countries
OperasiAdd, Subtract, Multiply, Divide (bilangan bulat)GetCountryInfo(countryCode), ListCountries()
VersiSOAP 1.1 dan 1.2SOAP 1.1 dan 1.2

Memanggilnya dengan curl (SOAP 1.1)

SOAP 1.1 memakai Content-Type: text/xml dan header SOAPAction yang menyebut operasinya. Di sini header itu opsional, tetapi jika dikirim, ia harus cocok dengan operasi di body.

Terminal
curl -X POST https://api.testingapis.com/api/soap/calculator \
  -H 'Content-Type: text/xml; charset=utf-8' \
  -H 'SOAPAction: "http://tempuri.org/Add"' \
  -d '<soap:Envelope xmlns:soap="http://schemas.xmlsoap.org/soap/envelope/">
        <soap:Body>
          <Add xmlns="http://tempuri.org/"><intA>5</intA><intB>3</intB></Add>
        </soap:Body>
      </soap:Envelope>'
Contoh ini memakai endpoint untuk anggota yang sudah masuk.MasukBuat akun gratis
Response
HTTP/1.1 200 OK
content-type: text/xml; charset=utf-8

<?xml version="1.0" encoding="utf-8"?>
<soap:Envelope xmlns:soap="http://schemas.xmlsoap.org/soap/envelope/">
  <soap:Body>
    <AddResponse xmlns="http://tempuri.org/">
      <AddResult>8</AddResult>
    </AddResponse>
  </soap:Body>
</soap:Envelope>

SOAP 1.2 dan fault

SOAP 1.2 memakai Content-Type: application/soap+xml, namespace envelope yang berbeda, dan tanpa header SOAPAction. Response kembali dalam versi yang sama dengan request. Pembagian dengan nol mengembalikan fault Receiver:

Terminal
curl -X POST https://api.testingapis.com/api/soap/calculator \
  -H 'Content-Type: application/soap+xml; charset=utf-8' \
  -d '<soap:Envelope xmlns:soap="http://www.w3.org/2003/05/soap-envelope">
        <soap:Body>
          <Divide xmlns="http://tempuri.org/"><intA>10</intA><intB>0</intB></Divide>
        </soap:Body>
      </soap:Envelope>'
Contoh ini memakai endpoint untuk anggota yang sudah masuk.MasukBuat akun gratis
Response
HTTP/1.1 500 Internal Server Error
content-type: application/soap+xml; charset=utf-8

<?xml version="1.0" encoding="utf-8"?>
<soap:Envelope xmlns:soap="http://www.w3.org/2003/05/soap-envelope">
  <soap:Body>
    <soap:Fault>
      <soap:Code>
        <soap:Value>soap:Receiver</soap:Value>
      </soap:Code>
      <soap:Reason>
        <soap:Text xml:lang="en">Attempted to divide by zero.</soap:Text>
      </soap:Reason>
    </soap:Fault>
  </soap:Body>
</soap:Envelope>

Aturan fault-nya mengikuti spesifikasi, dan memang itulah yang perlu dijadikan acuan saat menguji klien:

KasusSOAP 1.1SOAP 1.2
Input salah (kode negara tidak dikenal)500, faultcode soap:Client400, Code soap:Sender
Error di sisi server (pembagian dengan nol)500, faultcode soap:Server500, Code soap:Receiver
SOAPAction menyebut operasi lainFault 500Tidak berlaku
Content-Type salah (misalnya JSON)415 dengan error JSON415 dengan error JSON

Memakainya dari klien SOAP

SoapUI

  1. Pilih File, lalu New SOAP Project.
  2. Tempel https://api.testingapis.com/api/soap/calculator?wsdlmasuk untuk melihat sebagai Initial WSDL lalu selesaikan. SoapUI membuat request untuk setiap operasi di kedua binding.
  3. Buka sebuah request, isi intA dan intB, lalu jalankan.

Python dengan zeep

zeep membaca WSDL dan membangun klien bertipe darinya, dan SOAP fault menjadi exception Python:

Python
# pip install zeep
from zeep import Client

client = Client("https://api.testingapis.com/api/soap/calculator?wsdl")
print(client.service.Add(intA=5, intB=3))
print(client.service.Multiply(intA=6, intB=7))

try:
    client.service.Divide(intA=10, intB=0)
except Exception as err:
    print(type(err).__name__, err)
Contoh ini memakai endpoint untuk anggota yang sudah masuk.MasukBuat akun gratis
Output
8
42
Fault Attempted to divide by zero.

JavaScript dengan fetch

Tanpa library SOAP, request berupa string XML dan hasilnya diambil dari teks response:

JavaScript
const envelope = `<?xml version="1.0" encoding="utf-8"?>
<soap:Envelope xmlns:soap="http://schemas.xmlsoap.org/soap/envelope/">
  <soap:Body>
    <Multiply xmlns="http://tempuri.org/">
      <intA>6</intA>
      <intB>7</intB>
    </Multiply>
  </soap:Body>
</soap:Envelope>`;

const res = await fetch("https://api.testingapis.com/api/soap/calculator", {
  method: "POST",
  headers: {
    "Content-Type": "text/xml; charset=utf-8",
    SOAPAction: '"http://tempuri.org/Multiply"',
  },
  body: envelope,
});
const xml = await res.text();
console.log(res.status, xml.match(/<MultiplyResult>(.*?)<\/MultiplyResult>/)[1]);
// 200 42
Contoh ini memakai endpoint untuk anggota yang sudah masuk.MasukBuat akun gratis

Layanan negara

Kalkulator hanya mengembalikan angka. Untuk menguji parsing data bersarang, pakai layanan negara. Ada 10 negara (US, GB, IN, DE, FR, JP, BR, CA, AU, dan ZA). ListCountries mengembalikan kode dan nama, dan GetCountryInfo mengembalikan satu data lengkap:

Terminal
curl -X POST https://api.testingapis.com/api/soap/countries \
  -H 'Content-Type: text/xml' \
  -d '<soap:Envelope xmlns:soap="http://schemas.xmlsoap.org/soap/envelope/">
        <soap:Body>
          <GetCountryInfo xmlns="http://example.com/countries">
            <countryCode>IN</countryCode>
          </GetCountryInfo>
        </soap:Body>
      </soap:Envelope>'
Contoh ini memakai endpoint untuk anggota yang sudah masuk.MasukBuat akun gratis
Body response (di dalam soap:Body)
<GetCountryInfoResponse xmlns="http://example.com/countries">
  <Country>
    <Code>IN</Code>
    <Name>India</Name>
    <Capital>New Delhi</Capital>
    <Currency>INR</Currency>
    <PhoneCode>+91</PhoneCode>
    <Continent>Asia</Continent>
    <Population>1428627663</Population>
  </Country>
</GetCountryInfoResponse>

Kode yang tidak dikenal mengembalikan fault klien:

Response untuk countryCode ZZ
HTTP/1.1 500 Internal Server Error

<soap:Fault>
  <faultcode>soap:Client</faultcode>
  <faultstring>Country code 'ZZ' not found.</faultstring>
</soap:Fault>

API terkait

Referensi API SOAP mendaftar setiap operasi dengan envelope yang siap dikirim. Untuk menguji klien yang memakai XML lewat REST biasa, coba API pengguna XML. Konverter JSON ke XML membantu membandingkan payload SOAP dengan padanan JSON-nya. Untuk belajar SOAP dari awal, termasuk WSDL, fault, XPath, dan suite tes Java, ikuti tutorial SOAP dan XML (dalam bahasa Inggris).