Meshcaline Proxy’s mission is to enable the transformation from the programmable web to a composable web.
It serves two primary audiences:
Meshcaline Proxy provides the benefits of backend-for-frontend (BFF) services without inheriting their downsides.
For details, see Why Meshcaline Proxy.
Meshcaline Proxy is a generic HTTP proxy that enables a universal BFF implementation as an infrastructure component,
agnostic to the web service APIs it serves.
🔗 Find Meshcaline Proxy on GitHub
Let’s explore a real-world scenario where Meshcaline Proxy provides a powerful alternative to traditional BFFs.
A large corporation has built an app for employees to manage administrative tasks.
The app uses multiple microservices, including:
The bike team wants to display employees’ bike contracts in the app.
However, all requests go through a BFF service, managed by a separate team.
The App team requests the BFF team to create a new endpoint to:
🚨 Problem:
The BFF team is overwhelmed with feature requests, and this one gets backlogged for months.
Bypassing the BFF service would introduce:
With Meshcaline Proxy, the app team can define their data needs dynamically—without waiting on the BFF team.
Assume the following microservice endpoints:
GET https://search.corporate.com/employees?manager=${manager_employee_id}
GET https://employees.corporate.com/${employee_id}
GET https://bike-contracts.corporate.com/${contract_id}
GET https://search.corporate.com/emplyees?manager=${manager_employee_id}
along with an extended graphql query in the HTTP header X-MESHCALINE-QUERY
:
query {
items @GET(fragment:"details", type:"employee", href:"https://employees.corporate.com/${employee_id}") :
{ employee_id }
}
fragment details on employee
@GET(fragment:"contract_details", type:"bike_contract" href:"https://bike-contracts.corporate.com/${bike_contract_nr}")
{ name, first_name }
fragment contract_details on bike_contract
{ contract_number, start_date, end_date, bike_type, monthly_rate }
This query specifies that:
employee_id
.X-MESHCALINE-QUERY
HTTP header.employee_id
.@GET
directive and requests employee details for each employee.name
and first_name
.The response is a structured list of microservice responses, including employee details and contract information.
Each response element contains:
[
{
"url" : "https://search.corporate.com/emplyees?manager=17",
"body" : {
"items": [
{ "employee_id" : 1234, "details" : { "href":"https://employees.corporate.com/1234" } },
{ "employee_id" : 2345, "details" : { "href":"https://employees.corporate.com/2345" } }
]
}
},
{
"url" : "https://employees.corporate.com/1234",
"body" : { "name" : "Frank", "last_name": "Jackson", "contract_details" : { "href":"https://bike-contracts.corporate.com/17" } }
},
{
"url" : "https://employees.corporate.com/2345",
"body" : { "name" : "Peter", "last_name": "Myers", "contract_details" : { "href":"https://bike-contracts.corporate.com/35" } }
},
{
"url" : "https://bike-contracts.corporate.com/35",
"body" : { "contract_number": 35, "start_date": "2024-08-12", "end_date": "2027-08-11", "bike_type": "city" , "monthly_rate": 1800 }
},
{
"url" : "https://bike-contracts.corporate.com/17",
"body" : { "contract_number": 35, "start_date": "2024-05-01", "end_date": "2027-04-30", "bike_type": "tracking" , "monthly_rate": 2100 }
}
]
The list of responses does not have a specific order. It is only guaranteed that responses of subrequests arrive later than the response they originate from.
🚀 Streaming Response
📦 Efficient Composition
🌐 Preserves API Transparency
For more details, see Why Meshcaline Proxy.