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.
| Kalkulator | Negara | |
|---|---|---|
| Endpoint | POST /api/soap/calculatormasuk untuk melihat | POST /api/soap/countriesmasuk untuk melihat |
| WSDL | GET /api/soap/calculator?wsdlmasuk untuk melihat | Tidak ada. GET ke endpoint untuk JSON petunjuk dan contoh envelope |
| Namespace | http://tempuri.org/ | http://example.com/countries |
| Operasi | Add, Subtract, Multiply, Divide (bilangan bulat) | GetCountryInfo(countryCode), ListCountries() |
| Versi | SOAP 1.1 dan 1.2 | SOAP 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.
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>'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:
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>'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:
| Kasus | SOAP 1.1 | SOAP 1.2 |
|---|---|---|
| Input salah (kode negara tidak dikenal) | 500, faultcode soap:Client | 400, Code soap:Sender |
| Error di sisi server (pembagian dengan nol) | 500, faultcode soap:Server | 500, Code soap:Receiver |
| SOAPAction menyebut operasi lain | Fault 500 | Tidak berlaku |
| Content-Type salah (misalnya JSON) | 415 dengan error JSON | 415 dengan error JSON |
Memakainya dari klien SOAP
SoapUI
- Pilih File, lalu New SOAP Project.
- 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. - Buka sebuah request, isi
intAdanintB, lalu jalankan.
Python dengan zeep
zeep membaca WSDL dan membangun klien bertipe darinya, dan SOAP fault menjadi exception 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)8
42
Fault Attempted to divide by zero.JavaScript dengan fetch
Tanpa library SOAP, request berupa string XML dan hasilnya diambil dari teks response:
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 42Layanan 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:
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>'<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:
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).