> For the complete documentation index, see [llms.txt](https://mominur.gitbook.io/mominur-notes/llms.txt). Markdown versions of documentation pages are available by appending `.md` to page URLs; this page is available as [Markdown](https://mominur.gitbook.io/mominur-notes/system-design/api/soap.md).

# SOAP

ধরো তুমি একটি ব্যাংকের সফটওয়্যার বানাচ্ছো যেটা হাজারো ট্রানজ্যাকশন হ্যান্ডেল করবে প্রতিদিন। তুমি কি এমন API চাও যা নির্ভুল, নিরাপদ এবং নির্দিষ্ট নিয়মে চলে? যদি হ্যাঁ, তাহলে তুমি যে প্রযুক্তির খোঁজ করছো সেটা হলো **SOAP (Simple Object Access Protocol)**।

আজ REST API অনেক জনপ্রিয় হলেও, SOAP এখনো বহুল ব্যবহৃত, বিশেষ করে ব্যাংক, সরকারি সংস্থা, এবং বড় এন্টারপ্রাইজ সফটওয়্যারে। কারণ? এর Strong Structure, Security, এবং Reliability।

***

### SOAP কী?

**SOAP** হচ্ছে একধরনের **protocol** যা সফটওয়্যারের মধ্যে **message exchange** করতে XML ব্যবহার করে। এটি client-server model এ কাজ করে, যেখানে এক অ্যাপ্লিকেশন অন্যটিকে নির্দিষ্ট format-এ request পাঠায় এবং response পায়।

SOAP:

* Platform-independent
* Language-independent
* Secure & Standardized
* XML-based
* HTTP, SMTP, TCP/IP এর উপর কাজ করতে পারে

***

### SOAP Message Structure

একটি SOAP মেসেজ সাধারণত এই অংশগুলো দিয়ে গঠিত:

```xml
<soap:Envelope xmlns:soap="http://schemas.xmlsoap.org/soap/envelope/">
  <soap:Header>...</soap:Header>
  <soap:Body>...</soap:Body>
</soap:Envelope>
```

#### Envelope

সব SOAP মেসেজ এই envelope দিয়ে শুরু ও শেষ হয়। এটি header ও body কে ঘিরে রাখে।

#### Header (ঐচ্ছিক)

এখানে authentication, authorization, session info বা transaction ID এর মত মেটাডেটা থাকে।

#### Body

মূল API ডেটা এই অংশে থাকে — যেমনঃ ইউজারের রিকোয়েস্ট বা সার্ভারের Response।

#### Fault

যদি কোনো error হয়, সেটা এখানেই উল্লেখ করা হয়।

```xml
<soap:Fault>
  <faultcode>soap:Client</faultcode>
  <faultstring>Invalid account number</faultstring>
</soap:Fault>
```

***

### WSDL: SOAP এর রোডম্যাপ

**WSDL (Web Services Description Language)** হলো এক ধরনের XML ডকুমেন্ট যা SOAP API এর সব কিছু ডিফাইন করে:

* কী কী operations আছে
* কী input/output structure
* কী endpoint URL
* কী ডেটা টাইপ

SOAP ক্লায়েন্ট সাধারণত WSDL থেকে **auto-generate** হয়।

***

### বাস্তব উদাহরণ: ব্যাংকের ব্যালেন্স চেক

**Request:**

```xml
<soap:Envelope xmlns:soap="http://schemas.xmlsoap.org/soap/envelope/">
  <soap:Body>
    <CheckBalance>
      <AccountNumber>987654321</AccountNumber>
    </CheckBalance>
  </soap:Body>
</soap:Envelope>
```

**Response:**

```xml
<soap:Envelope xmlns:soap="http://schemas.xmlsoap.org/soap/envelope/">
  <soap:Body>
    <CheckBalanceResponse>
      <Balance>3400.75</Balance>
    </CheckBalanceResponse>
  </soap:Body>
</soap:Envelope>
```

***

### SOAP Security: WS-Security

SOAP API-তে থাকে **WS-Security**, যা নিচের ফিচারগুলো সাপোর্ট করে:

* XML Encryption
* XML Signature
* UsernameToken Authentication
* Timestamp validation

এই security ফিচারগুলো REST API এর থেকেও শক্তিশালী, যদিও REST এ HTTPS, JWT, OAuth দিয়ে নিরাপত্তা নিশ্চিত করা হয়।

***

### SOAP Toolkits

SOAP ব্যবহারে সহায়ক কিছু জনপ্রিয় টুল এবং লাইব্রেরি:

| Language | Toolkit            | ব্যবহার                       |
| -------- | ------------------ | ----------------------------- |
| Java     | Apache CXF, JAX-WS | SOAP API generate ও consume   |
| .NET     | WCF, ASMX          | Native SOAP support           |
| Python   | Zeep               | Simple & powerful SOAP client |
| PHP      | SoapClient         | Built-in PHP SOAP library     |

***

### SOAP vs REST

| বৈশিষ্ট্য          | SOAP                         | REST                        |
| ------------------ | ---------------------------- | --------------------------- |
| ডেটা ফরম্যাট       | XML only                     | JSON, XML, Text সবই সাপোর্ট |
| Security           | Built-in WS-Security         | HTTPS, OAuth, JWT           |
| Performance        | কম                           | বেশি                        |
| Flexibility        | কম                           | অনেক বেশি                   |
| Auto-documentation | WSDL                         | নেই (Swagger দিয়ে করতে হয়)  |
| Use case           | Banking, Payment, Enterprise | Mobile, Web, Microservices  |

***

### কখন SOAP ব্যবহার করবেন?

SOAP বেছে নেওয়া উচিত যখন:

* API এর জন্য security ও reliability অপরিহার্য
* ডেটা strict format-এ থাকতে হবে
* Integration long-term ও formal
* Legal contracts ও data validation দরকার
* REST এর ফ্লেক্সিবিলিটি আপনার রিস্ক বাড়িয়ে দেবে

***

SOAP হয়তো trendy নয়, কিন্তু Trustworthy , secure, আর strongly typed — ঠিক যেনো একজন অভিজ্ঞ ইঞ্জিনিয়ার, যিনি কোনো shortcuts নেন না। REST এর পাশে SOAP এখনও সেইসব mission-critical অ্যাপ্লিকেশনে অপরিহার্য যেখানে Data integrity, authentication, validation ও formal API contract দরকার।

> SOAP isn’t outdated. It’s just formal, like a tuxedo at a secure party!

***
