Skip to content

Instantly share code, notes, and snippets.

@rajkundalia
Created June 24, 2025 17:34
Show Gist options
  • Select an option

  • Save rajkundalia/e509bf48ba6131f5e20be63748a9a883 to your computer and use it in GitHub Desktop.

Select an option

Save rajkundalia/e509bf48ba6131f5e20be63748a9a883 to your computer and use it in GitHub Desktop.
+------------+-----------------------+--------------------+---------------------------+----------------------------------+
| Protocol | Model | Transport | Architecture | Key Innovations |
+------------+-----------------------+--------------------+---------------------------+----------------------------------+
| REST | Request-Response | HTTP/1.1 or HTTP/2 | Stateless, resource-based | Standard HTTP verbs |
| gRPC | Unary + Streaming | HTTP/2 | RPC, contract-first | Multiplexing, header compression |
| GraphQL | Flexible Queries | HTTP/1.1 (usually) | Schema-first | Client-driven queries |
| WebSockets | Full-Duplex Streaming | TCP (upgraded) | Connection-oriented | Persistent, bidirectional |
| SOAP | Request-Response | HTTP/1.1, SMTP | Strict XML contract | WS-* standards, WSDL |
+------------+-----------------------+--------------------+---------------------------+----------------------------------+
*Model for gRPC: Unary, Server Streaming, Client Streaming, Bidirectional Streaming
*Transport for WebSockets: The connection begins as a standard HTTP request over TCP, with the client asking to upgrade to WebSocket protocol using special HTTP headers - hence TCP (upgraded)
===============================================================================================================================
+------------+-------------------------+-------------------------------+-------------------+
| Protocol | Setup Effort | Schema Management | Learning Curve |
+------------+-------------------------+-------------------------------+-------------------+
| REST | Low | Optional (API docs) | Easy |
| gRPC | Medium (Protobuf setup) | Strict, versioned | Moderate to Steep |
| GraphQL | Medium | Strong, flexible (SDL) | Moderate |
| WebSockets | Medium | Custom (message contracts) | Moderate |
| SOAP | High | Strict, versioned (WSDL, XSD) | Steep |
+------------+-------------------------+-------------------------------+-------------------+
===============================================================================================================================
+------------+-------------------------------+------------------------------------------------------------------------------------------------------------------------------+
| Protocol | State Handling | Impact |
+------------+-------------------------------+------------------------------------------------------------------------------------------------------------------------------+
| REST | Stateless | Favors horizontal scalability |
| gRPC | Hybrid (streams are stateful) | Complex error handling, but efficient for continuous data |
| GraphQL | Stateless | Easy horizontal scaling |
| WebSockets | Stateful connections | Can lead to higher server resource consumption; scaling requires careful planning (e.g., sticky sessions, distributed state) |
| SOAP | Stateless/Stateful | Depends on implementation (WS-Addressing, WS-ReliableMessaging can add state) |
+------------+-------------------------------+------------------------------------------------------------------------------------------------------------------------------+
===============================================================================================================================
+-------------------------------------+-------------+
| Use Case | Best Option |
+-------------------------------------+-------------+
| CRUD APIs, Public APIs | REST |
| Microservice-to-microservice | gRPC |
| Real-time chat/notifications | WebSockets |
| Data aggregation (multiple sources) | GraphQL |
| Legacy enterprise integrations | SOAP |
+-------------------------------------+-------------+
===============================================================================================================================
+------------+-----------------------------------------------------------------------------------+
| Protocol | Versioning Approach |
+------------+-----------------------------------------------------------------------------------+
| REST | URI (/v1/users), header-based, content negotiation |
| gRPC | Protobuf supports backward/forward compatibility via field additions/deprecations |
| GraphQL | Deprecate fields, additive changes (avoid breaking changes) |
| WebSockets | Versioning at protocol/message contract level (application-specific) |
| SOAP | Versioning typically managed in WSDL (new WSDLs, namespaces) |
+------------+-----------------------------------------------------------------------------------+
===============================================================================================================================
+------------+---------------------------------------------------------------------------------------------+
| Protocol | Common Pitfalls |
+------------+---------------------------------------------------------------------------------------------+
| REST | Over/under-fetching, chatty APIs, not inherently real-time |
| gRPC | Lack of native browser support (needs gRPC-Web proxy) |
| GraphQL | N+1 query problem, caching complexity, potential for DoS via complex queries |
| WebSockets | Stateful connection scaling challenges, managing reconnections, server resource consumption |
| SOAP | Bloated XML payloads, high complexity, perceived as outdated for modern APIs |
+------------+---------------------------------------------------------------------------------------------+
===============================================================================================================================
+----------------+--------+-------------+----------+---------------------------------------------+----------------------------------+
| Factor | REST | gRPC | GraphQL | WebSockets | SOAP |
+----------------+--------+-------------+----------+---------------------------------------------+----------------------------------+
| Dev Training | Low | High | Medium | Medium | High |
| Debugging | Easy | Specialized | Moderate | Harder | Complex |
| Infrastructure | Medium | Low CPU | High CPU | Persistent connections (resource-intensive) | High (XML parsing, legacy stack) |
| Maintenance | Low | Medium | High | Medium-High | High |
+----------------+--------+-------------+----------+---------------------------------------------+----------------------------------+
===============================================================================================================================
+-----------------+--------+------------------+---------------------+------------+-------------------+
| Criteria | REST | gRPC | GraphQL | WebSockets | SOAP |
+-----------------+--------+------------------+---------------------+------------+-------------------+
| Format | JSON | Protobuf | JSON | Custom | XML |
| Performance | Medium | High | Medium | High | Low |
| Real-time | No | Yes (streaming) | Yes (subscriptions) | Yes | No |
| Browser Support | Yes | No (needs proxy) | Yes | Yes | Yes |
| Ideal For | CRUD | Microservices | Data fetching | Real-time | Enterprise legacy |
+-----------------+--------+------------------+---------------------+------------+-------------------+
===============================================================================================================================
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment