DEV Community

Cover image for A Developer's Guide to API Types: Architectures, Use Cases, and Code Examples
Amrishkhan Sheik Abdullah
Amrishkhan Sheik Abdullah

Posted on

A Developer's Guide to API Types: Architectures, Use Cases, and Code Examples

Selecting the right API architectural style is a fundamental decision that determines a project's performance, scalability, and complexity. This guide provides a detailed breakdown of the major API styles, their ideal use cases, and practical code examples.


1. REST (Representational State Transfer)

REST is the most popular architectural style for web services, utilizing standard HTTP methods to perform CRUD (Create, Read, Update, Delete) operations on resources.

Aspect Detail
Protocol HTTP/HTTPS
Data Format JSON (most common), XML
Philosophy Stateless, resource-oriented (everything is an entity, e.g., a "user" or "order").
Best For Public-facing APIs, simple mobile/web apps, and basic CRUD operations.

๐Ÿ” Example: Fetching a User Profile

Scenario: A client wants to retrieve information for User ID 101.

Action Request Response (JSON)
Read GET /api/v1/users/101


json\n{\n "id": 101,\n "name": "Alice Developer",\n "email": "alice@example.com",\n "status": "Active"\n}\n

|
| Create | POST /api/v1/users (with JSON body) | Status: 201 Created |
| Update | PUT /api/v1/users/101 (with new data) | Status: 200 OK |
| Delete | DELETE /api/v1/users/101 | Status: 204 No Content |


2. GraphQL (Graph Query Language)

GraphQL is a data query and manipulation language for APIs that allows clients to specify exactly the data they need. This prevents the problem of over-fetching (receiving unwanted data) common in REST.

Aspect Detail
Protocol HTTP (usually via a single endpoint)
Data Format JSON
Philosophy Client-driven data fetching; single endpoint, flexible queries based on a strong type schema.
Best For Mobile apps, complex dashboard UIs, and projects where data consumption needs to be highly optimized.

๐Ÿ” Example: Optimized Data Fetching

Scenario: A client needs a user's name, email, and only the title of their last two blog posts.

Action Request (Query) Response (JSON)
Query


graphql\nquery UserProfile {\n user(id: "101") {\n name\n email\n posts(limit: 2) {\n title\n }\n }\n}\n

|

json\n{\n "data": {\n "user": {\n "name": "Alice Developer",\n "email": "alice@example.com",\n "posts": [\n { "title": "Intro to GraphQL" },\n { "title": "Why I chose gRPC" }\n ]\n }\n }\n}\n

|
| Mutation | mutation UpdateUser(...) | Similar to a POST or PUT in REST, used for data modification. |


3. gRPC (Google Remote Procedure Call)

gRPC is a high-performance framework based on the Remote Procedure Call (RPC) model. It uses Protocol Buffers (Protobuf) for data serialization and HTTP/2 for transport, making it exceptionally fast for machine-to-machine communication.

Aspect Detail
Protocol HTTP/2
Data Format Protocol Buffers (a binary format)
Philosophy Contract-first (defined by Protobuf schema); focused on calling a function/method on a remote server.
Best For Microservices, inter-service communication, real-time data ingestion, and any performance-critical system.

๐Ÿ” Example: Inter-Service Communication

Scenario: An Order Processing service calls a remote Inventory service to check stock.

Protobuf Contract (Service Definition) Client Call (Code Representation) Server Response (Code Representation)


protobuf\nservice InventoryService {\n rpc CheckStock (StockRequest) returns (StockResponse);\n}\nmessage StockRequest {\n string product_id = 1;\n}\nmessage StockResponse {\n int32 quantity = 1;\n bool in_stock = 2;\n}\n

| inventoryClient.CheckStock({product_id: "P456"}) | StockResponse { quantity: 50, in_stock: true } |

Note: The actual data transfer is a compacted binary message, not readable JSON, which is key to its speed.


4. SOAP (Simple Object Access Protocol)

SOAP is a formal, standardized protocol that relies on XML for structured messaging. It is contract-first, meaning the available operations are rigidly defined in a WSDL (Web Services Description Language) file.

Aspect Detail
Protocol HTTP, SMTP, or others
Data Format XML (enveloped messaging)
Philosophy Strict contracts, high security, and built-in error handling via SOAP faults.
Best For Legacy systems, highly regulated industries (banking, healthcare), and environments requiring formal contracts and enterprise-grade security.

๐Ÿ” Example: Financial Transaction

Scenario: Submitting a secure payment for Order ID ORD789.

Action Request (XML) Response (XML)
Invoke


xml\n<soap:Envelope>\n <soap:Body>\n <SubmitPayment>\n <OrderId>ORD789</OrderId>\n <Amount>99.99</Amount>\n </SubmitPayment>\n </soap:Body>\n</soap:Envelope>\n

|

xml\n<soap:Envelope>\n <soap:Body>\n <SubmitPaymentResponse>\n <Status>Success</Status>\n <TransactionId>TXN12345</TransactionId>\n </SubmitPaymentResponse>\n </soap:Body>\n</soap:Envelope>\n

|


5. WebSocket

WebSocket is a communication protocol that provides a persistent, two-way (full-duplex) channel over a single TCP connection. It is not request/response-based like the others; it's stream-based.

Aspect Detail
Protocol WebSocket (starts as HTTP upgrade)
Data Format Any (usually JSON or Protobuf)
Philosophy Real-time, event-driven, low-latency, and continuous data push.
Best For Live chat, multiplayer games, real-time dashboards, and instant notifications.

๐Ÿ” Example: Live Stock Ticker

Scenario: A user opens a stock trading app and subscribes to real-time updates for a stock symbol.

Action Client $\leftrightarrow$ Server Purpose
Initial Handshake HTTP Upgrade Request $\rightarrow$ HTTP Switch Protocol Response Establishes the persistent WebSocket connection.
Client Action send('{"action": "subscribe", "symbol": "GOOG"}') The client tells the server what data it wants.
Server Response (Real-Time Push) push('{"symbol": "GOOG", "price": 175.40, "time": 1678886400}') (Pushed by server) The server instantly sends data frames to the client whenever the price changes.

Top comments (0)