4 min read
Learn the four main API types every developer should know: Public, Private, Partner, and Composite APIs. This guide covers when to use each type with real JavaScript examples, practical decision-making criteria, and architecture best practices for intermediate developers.
You've likely worked with different APIs, but understanding when to choose each type can make or break your architecture decisions. Let's explore the four main API categories and when to use them in real-world scenarios.
Public APIs are open to any developer after basic registration. They're designed for widespread adoption and external integration.
Real-world scenario: Stripe's payment API handles complex PCI compliance while you focus on your product logic. After registering, you get sandbox access, clear documentation, and production endpoints. Instead of building payment infrastructure from scratch, you can process transactions with a few API calls.
// Stripe payment processing
const stripe = require('stripe')('sk_test_...');
const paymentIntent = await stripe.paymentIntents.create({
amount: 2000,
currency: 'usd',
payment_method: 'pm_card_visa',
confirm: true,
});
When to choose public APIs:
You need specialized functionality that's expensive to build internally
Time-to-market is critical
You want to focus on core business logic rather than infrastructure
Private APIs connect internal systems and services within your organization's firewall.
Real-world scenario: A hospital's electronic health records (EHR) system uses private APIs to communicate with appointment scheduling software. When a doctor orders lab tests, the API automatically reserves equipment and notifies lab personnel, all while keeping patient data secure behind the firewall.
// Internal API call within hospital system
async function scheduleLabTest(patientId, testType) {
const payload = {
patient_id: patientId,
test_type: testType,
priority: 'normal'
};
const response = await fetch('http://internal-scheduler.hospital.local/api/labs', {
method: 'POST',
headers: {
'Content-Type': 'application/json',
'Authorization': Bearer ${internalToken}
},
body: JSON.stringify(payload)
});
return response.json();
}
When to choose private APIs:
Building a microservices architecture
Connecting different teams' services
Preparing for potential public release later
Need strict security and access control
Partner APIs sit between public and private, requiring formal agreements and specific business relationships.
Real-world scenario: PlayStation provides partner APIs to select game studios: these APIs access player profiles, achievements, and purchase systems. Sony carefully vets partners through contracts and technical compliance checks before granting access.
// Partner API with specific access controls
async function getPlayerData(playerId) {
const headers = {
'Authorization': Bearer ${partnerToken},
'X-Partner-ID': partnerId,
'Content-Type': 'application/json'
};
const response = await fetch(
https://api.playstation.com/partner/v1/player/${playerId},
{ headers }
);
return response.json();
}
When to choose partner APIs:
Building platform ecosystems with controlled access
Managing supply chain integrations
Creating reseller or distributor relationships
Need quality control over who uses your API
Composite APIs combine multiple operations into a single request, reducing complexity for API consumers.
Real-world scenario: A concert ticketing platform's composite API handles venue seating, availability checks, pricing, and payment processing in one call. Instead of making separate requests for each operation, developers send customer preferences and receive a complete booking response.
// Single composite API call handling multiple operations
const bookingResponse = await fetch('/api/composite/book-ticket', {
method: 'POST',
headers: {
'Content-Type': 'application/json',
'Authorization': Bearer ${userToken}
},
body: JSON.stringify({
event_id: 'concert-2024-01',
seat_preference: 'orchestra',
quantity: 2,
payment_method: 'card_1234'
})
});
// Response includes seat assignment, pricing, and payment confirmation
const result = await bookingResponse.json();
Behind the scenes, this composite API might execute:
Check seat availability
Calculate pricing with fees
Reserve seats temporarily
Process payment
Confirm booking
When to choose composite APIs:
Simplifying complex workflows for external developers
Reducing network requests and latency
Building developer-friendly platforms
Consolidating multiple internal services
When to use: Build composite APIs to streamline complex processes or provide simplified access to functionality that would otherwise require multiple separate API calls. They're particularly valuable when building developer-friendly platforms.
Consider these factors when selecting an API type:
Access Requirements:
Team-only access → Private API
Specific partners → Partner API
Public developers → Public API
Security Needs: Private and partner APIs give you more control over access and data exposure. Public APIs require robust authentication, rate limiting, and input validation.
Stability Requirements: Public APIs need careful versioning and backward compatibility. Breaking changes can damage developer relationships and adoption.
Business Model:
Public APIs might generate direct revenue or support product growth
Partner APIs facilitate business relationships and ecosystem expansion
Private APIs improve internal efficiency and integration