Service-Oriented Architecture (SOA) is a software design style where services are provided to the other components by application components, through a communication protocol over a network. Its basic principles are independent of vendors, products, and technologies.
In SOA, an application is no longer a massive, tightly woven monolith. Instead, business logic is broken down into distinct, reusable "Services". For example, instead of having a billing module locked inside an ERP, you expose a ProcessPayment service that the ERP, the web portal, and the mobile app can all share and reuse.
To qualify as a true SOA environment, the architecture must adhere to several guiding principles:
ProcessPayment service changes, the systems consuming it should not break.The fundamental operational model of SOA involves three primary actors: the Service Provider, the Service Consumer, and the Service Registry.
Figure 1: The SOA Operational Model (Find, Bind, Execute)
While SOA is an abstract architecture, its most famous technical implementation in the 2000s and early 2010s was Web Services. These traditional web services relied on three core W3C standards:
Envelope, a Header, and a Body.Imagine Udayana University exposing a service so the Library System can verify a student's enrollment status. The Library System (Consumer) sends a SOAP Request to the Academic System (Provider).
Notice the heavy XML formatting, including the standard SOAP Envelope and Body tags.
<?xml version="1.0" encoding="UTF-8"?>
<soapenv:Envelope
xmlns:soapenv="http://schemas.xmlsoap.org/soap/envelope/"
xmlns:aca="http://api.unud.ac.id/academic">
<soapenv:Header/>
<soapenv:Body>
<aca:GetStudentStatusRequest>
<aca:StudentId>1905551042</aca:StudentId>
</aca:GetStudentStatusRequest>
</soapenv:Body>
</soapenv:Envelope>
The Service Provider processes the logic and returns a tightly structured XML response.
<?xml version="1.0" encoding="UTF-8"?>
<soapenv:Envelope
xmlns:soapenv="http://schemas.xmlsoap.org/soap/envelope/"
xmlns:aca="http://api.unud.ac.id/academic">
<soapenv:Header/>
<soapenv:Body>
<aca:GetStudentStatusResponse>
<aca:StudentId>1905551042</aca:StudentId>
<aca:Name>I Wayan Sudarma</aca:Name>
<aca:Status>ACTIVE</aca:Status>
<aca:Faculty>Engineering</aca:Faculty>
</aca:GetStudentStatusResponse>
</soapenv:Body>
</soapenv:Envelope>