The “GraphQL vs REST” debate has been going strong for years, but here’s what I’ve learned as a CTO: the question itself was wrong. The real question isn’t which one to use - it’s where to use each one.
At my company, we spent 18 months evolving our API strategy, and we landed on what I’m calling the “hybrid pattern” - and we’re not alone. According to recent industry data, 55% of teams using a mixed approach report faster time-to-value, and 62% report easier long-term maintenance than single-paradigm shops.
Our Architecture Today
External APIs (REST):
- Partner integrations
- Third-party developer platform
- B2B data feeds
- Webhook endpoints
Internal APIs (GraphQL):
- Mobile app BFF (Backend-for-Frontend) layer
- Internal dashboard
- Cross-team data aggregation
- Complex UI data requirements
Why REST for External?
When we opened our API to partners, we had a choice. GraphQL offers flexibility, but REST offered something more valuable for external consumers: familiarity and simplicity.
Our partners are banks, insurance companies, and enterprise software vendors. Their integration teams know REST. They have existing tooling for REST. Asking them to learn GraphQL would add friction to every partnership negotiation.
Plus, REST’s constraints work in our favor externally:
- Clear versioning: /v1/, /v2/ paths make deprecation explicit
- HTTP caching: CDNs and proxies just work
- Documentation: OpenAPI/Swagger is the industry standard
- Security: Well-understood authentication patterns
Why GraphQL for Internal?
Internally, it’s a different story. Our mobile team was making 5-6 REST calls per screen load. Our web dashboard was over-fetching data everywhere. Our internal tools team was constantly asking backend teams for new endpoints.
GraphQL solved all of this:
- Mobile gets exactly the data needed in one request
- Frontend teams iterate without waiting for backend changes
- The BFF pattern gives each client type its own tailored interface
- Schema serves as living documentation
Companies like Netflix, Expedia, and Volvo have adopted similar patterns - using GraphQL Federation to create a unified query layer over their REST microservices. This gives internal teams the flexibility they need while maintaining the stability of their underlying services.
The API Gateway: The Glue
The key to making this work is a well-designed API gateway. Ours:
- Routes external traffic to REST services
- Handles authentication and rate limiting uniformly
- Exposes GraphQL to internal clients
- Provides a single point for observability
- Manages the translation when GraphQL needs REST backend data
This isn’t just “use both” - it’s intentional architectural separation based on consumer needs.
Results After 18 Months
- 28-40% faster UI feature delivery (our mobile team’s estimate)
- Partner integration time cut by 30% (familiar REST patterns)
- Internal developer satisfaction scores up significantly
- Reduced coordination overhead between frontend and backend teams
The Trade-offs
Nothing is free. Our hybrid approach means:
- Two sets of API documentation to maintain
- Training needed for both paradigms
- More complex testing infrastructure
- The gateway becomes a critical dependency
But for a company at our scale (50 to 120 engineers), the benefits have outweighed the costs decisively.
I’m curious how others are thinking about this:
- Do you run hybrid, or have you standardized on one approach?
- If hybrid, where do you draw the line between REST and GraphQL?
- How do you handle the governance and documentation overhead?
The “one API to rule them all” mentality served us poorly. The right tool for the right job has served us well.