Loading…
Loading…
Technical overview of the SOAP-to-REST conversion platform, covering its architecture, components, configuration, and operational behavior on Google Cloud
The SOAP-to-REST Conversion Platform provides a central, no-code solution for exposing internal SOAP-based backend services as modern RESTful APIs. It is designed to run in a private, internal-only network environment on Google Cloud Run.
The platform solves the problem of integrating legacy SOAP services with modern REST-based API consumers without requiring code changes to the backend services. API publishers can import a WSDL file, configure the backend service URL, and the platform automatically generates the REST-to-SOAP mappings and a corresponding OpenAPI v3 specification.
Key capabilities include:
The typical data flow involves an API gateway (such as Apigee) routing requests to an internal load balancer, which directs traffic to the platform's runtime service. The runtime service then communicates with the internal SOAP backends over a private network.
The platform operates with two distinct planes: a Control Plane for administration and a Data Plane for processing live API traffic.
API publishers interact with the Control Plane via a web interface (s2r-admin-ui) to manage the API lifecycle. The administrative flow is as follows:
The Admin UI communicates with a dedicated Admin API (s2r-admin-api), which handles all configuration, policy updates, versioning, and role management. System parameters and role mappings are managed via Parameter Manager.
The Data Plane, or runtime, processes incoming requests from API consumers.
s2r-runtime service based on the URL path.SoapMessageMapper that uses standard javax.xml.transform DOM manipulation.The following diagram illustrates the request flow for both the data plane and control plane.
flowchart TD
subgraph "API Consumer"
direction LR
A[Client Application]
end
subgraph "API Publisher"
direction LR
B[Administrator via Browser]
end
subgraph "API Platform"
direction TB
C[API Gateway / Apigee] --> ILB{Internal HTTP<br>Load Balancer}
subgraph "Control Plane (Cloud Run)"
AdminUI[s2r-admin-ui] <--> AdminAPI[s2r-admin-api]
AdminAPI <--> DB[(Cloud SQL<br>PostgreSQL)]
AdminAPI <--> Worker[s2r-worker]
end
subgraph "Data Plane (Cloud Run)"
Runtime[s2r-runtime]
end
ILB -- / --> AdminUI
ILB -- /admin/* --> AdminAPI
ILB -- /worker/* --> Worker
ILB -- /{dev,test,prod}/* --> Runtime
end
subgraph "Backend Services"
direction LR
D[Internal SOAP<br>Backend]
end
A --> C
B --> AdminUI
Runtime --> DIMPORTANT
The platform is designed for internal-only traffic. The Cloud Run services are not exposed to the public internet and must be accessed via an internal load balancer.
The platform is composed of four primary services deployed on Google Cloud Run, a Cloud SQL database for persistence, and other supporting Google Cloud services.
s2r-admin-ui: The frontend web application that provides the administrative interface for managing APIs, settings, and roles.s2r-admin-api: The backend API for the control plane. It supports CRUD operations for settings, role-bindings, operational policies, and version management, as well as providing observability endpoints.s2r-runtime: The data plane service that handles the real-time conversion of REST requests to SOAP and back. It is designed for high-throughput, low-latency processing.s2r-worker: A service for handling asynchronous background jobs, triggered via Pub/Sub or Cloud Tasks.internal-and-cloud-load-balancing ingress, accessible only from the project's VPC network and the internal load balancer.NOTE
The deployment of the generated OpenAPI specification to an API Gateway like Apigee is a manual process. The platform does not provide automation for Apigee proxy deployment.
Access to the platform's services is routed through a regional internal HTTP load balancer. The routing is path-based:
| Path Prefix | Target Service | Description |
|---|---|---|
/ | s2r-admin-ui | The administrative web interface. |
/admin/* | s2r-admin-api | The backend API for the control plane. |
/worker/* | s2r-worker | Entry point for asynchronous job processing. |
/dev/*, /test/*, /prod/* | s2r-runtime | The runtime data plane for processing API traffic. |
The runtime service has several default policies that are configurable. The source does not specify the method for changing these configurations.
| Parameter | Default Value | Description |
|---|---|---|
| Backend Timeout | 100ms | The default timeout for requests made to the backend SOAP service. |
| Retries | 2 | The default number of retries for failed requests to the backend SOAP service. |
| Retention | 60 days | The default retention period for logs and metrics. The source does not specify which data this applies to. |
| Sync Payload Ceiling | 30MB | The maximum allowed size for synchronous request payloads. Requests exceeding this limit are rejected. |
The platform's control plane uses a role-based access control (RBAC) model with three predefined roles. These roles are mapped to Cloud Identity groups, which are configured after the initial deployment via the Admin UI or by directly modifying the s2r_role_binding database table.
The roles are:
SOAP-To-REST_Admin@<tenant-domain>): Full administrative privileges over the platform.SOAP-To-REST_Oper@<tenant-domain>): Permissions to operate and manage API services, but not system-level settings.SOAP-To-REST_Reader@<tenant-domain>): Read-only access to view configurations and dashboards.The platform integrates with the Specaria licensing system. This has operational implications for network egress and license validation.
s2r-runtime service fetches a JSON Web Key Set (JWKS) from api.specaria.io to validate a license JWT. Network egress must be configured to allow this communication.WARNING
The platform will not function correctly without network access to api.specaria.io for license validation. Ensure your VPC egress allow-lists permit this traffic.
The runtime service enforces a hard limit on the size of synchronous request payloads.
30MB limit.s2r-runtime service will immediately reject the request with an HTTP 413 Payload Too Large status code.result_code=rejected and a specific error code S2R-RUN-0413. This can be used for monitoring and alerting on payload size issues.For more detailed information, API publishers and operators can refer to the following design documents by their subject: