Overview

Definition

REST API: Representational State Transfer Application Programming Interface. Architectural style: client-server communication. Uses HTTP protocol. Enables CRUD operations on resources. Stateless interactions. Standardized interface.

History

Introduced by Roy Fielding, 2000 dissertation. Response to complexity in SOAP and RPC. Designed for scalability, simplicity, modularity. Widely adopted in web services, microservices, mobile apps.

Purpose

Provide uniform interface for loosely coupled systems. Enable interoperability across heterogeneous platforms. Simplify client-server communication. Support caching, layered systems, code on demand.

"REST is an architectural style for distributed hypermedia systems." -- Roy T. Fielding

REST Principles

Uniform Interface

Standardized methods: resource identification via URIs, manipulation through representations, self-descriptive messages, hypermedia as engine of application state (HATEOAS).

Statelessness

Each request: complete, independent. Server stores no client context. Simplifies scalability and failure recovery.

Cacheability

Responses marked cacheable or non-cacheable. Reduces client-server interactions. Improves performance and scalability.

Layered System

Architecture composed of hierarchical layers. Client unaware of intermediary layers. Enables load balancing, shared caches, security enforcement.

Code on Demand (Optional)

Servers can extend client functionality by transferring executable code (e.g., JavaScript). Enhances flexibility, reduces client complexity.

HTTP Methods in REST

GET

Retrieve resource representation. Safe and idempotent. No side effects on server state.

POST

Create subordinate resources or trigger processing. Not idempotent. May change server state.

PUT

Update or create resource at URI. Idempotent. Replaces entire resource representation.

PATCH

Partial update of resource. Not necessarily idempotent. More efficient than PUT for small changes.

DELETE

Remove resource identified by URI. Idempotent. Server state changes by resource deletion.

HTTP MethodFunctionIdempotentSafe
GETRetrieve resourceYesYes
POSTCreate/process resourceNoNo
PUTUpdate/create resourceYesNo
PATCHPartial updateDependsNo
DELETERemove resourceYesNo

Resource Representation

Concept

Resources: conceptual entities identified by URIs. Representation: state of resource delivered to client. Formats: JSON, XML, HTML, plain text.

Content Negotiation

Client specifies preferred formats via Accept headers. Server responds with best match. Enables flexible data exchange.

Serialization

Conversion of resource state into transferable format. Must preserve data integrity and semantics.

Hypermedia Controls

Links and actions embedded in representation. Guide client application state transitions (HATEOAS).

URI Design

Resource Identification

Use nouns representing entities. Avoid verbs. Example: /users, /orders/123.

Hierarchy and Structure

Reflect resource relationships via path segments. Example: /users/123/orders.

Query Parameters

Used for filtering, sorting, pagination. Example: /products?category=books&page=2.

Best Practices

Consistency, readability, simplicity. Avoid file extensions. Use lowercase letters and hyphens.

Good URIBad URI
/customers/456/orders/getCustomerOrders?id=456
/products?category=electronics/listElectronicsProducts

Statelessness

Definition

Server does not store client session state. Each request contains all necessary information.

Advantages

Improved scalability: server can handle requests independently. Simplifies failure recovery and load balancing.

Implementation

Use tokens (e.g., JWT) for authentication. Client sends all context data in headers or request body.

Trade-offs

Increased request size. More client responsibility. Complex transactions require compensating mechanisms.

API Versioning

Need for Versioning

Maintain backward compatibility. Enable iterative improvements without breaking clients.

Versioning Strategies

URI versioning: /v1/resource. Header versioning: custom headers. Query parameter versioning.

Best Practices

Use semantic versioning. Prefer URI or header versioning. Document changes clearly.

Example

GET /api/v2/users HTTP/1.1Host: example.comAccept: application/jsonX-API-Version: 2

Security Considerations

Authentication

Verify client identity. Common methods: API keys, OAuth 2.0, JWT tokens, Basic Auth over HTTPS.

Authorization

Control access to resources. Role-based access control (RBAC), attribute-based access control (ABAC).

Data Integrity and Confidentiality

Use HTTPS/TLS for transport security. Validate inputs to prevent injection attacks.

Common Threats

Replay attacks, CSRF, XSS, brute force, man-in-the-middle. Mitigate via tokens, rate limiting, validation.

Scalability and Performance

Caching

Leverage HTTP cache headers: ETag, Cache-Control, Last-Modified. Reduces latency and server load.

Load Balancing

Distribute requests across servers. Use DNS round-robin, reverse proxies, or dedicated load balancers.

Rate Limiting

Prevent abuse by limiting client request rates. Use headers to communicate limits.

Compression

Use gzip or Brotli for response compression. Decrease bandwidth usage and improve transmission speed.

Idempotency in REST

Concept

Operation can be performed multiple times with same effect as once. Important for network reliability.

HTTP Methods and Idempotency

GET, PUT, DELETE: idempotent. POST, PATCH: not guaranteed idempotent.

Design Implications

Use idempotent methods for safe retries. Avoid side effects in GET. Implement idempotency keys for POST.

Example Idempotency Key Usage

POST /payments HTTP/1.1Idempotency-Key: 123e4567-e89b-12d3-a456-426614174000Content-Type: application/json{ "amount": 100, "currency": "USD"}

Common Tools and Frameworks

API Design

Swagger/OpenAPI: specification and documentation. RAML, API Blueprint.

Server Frameworks

Express.js (Node.js), Spring Boot (Java), Django REST Framework (Python), ASP.NET Core.

Testing

Postman, Insomnia, SoapUI. Automated testing with JMeter, REST Assured.

Security

OAuth libraries, JWT libraries, API gateways (Kong, Apigee).

References

  • Fielding, R. T., "Architectural Styles and the Design of Network-based Software Architectures," PhD Thesis, University of California, Irvine, 2000, pp. 1-176.
  • Richardson, L., Ruby, S., "RESTful Web Services," O'Reilly Media, 2007, pp. 45-102.
  • Newman, S., "Building Microservices: Designing Fine-Grained Systems," O'Reilly Media, 2015, pp. 75-110.
  • Fielding, R., "REST APIs must be hypertext-driven," Communications of the ACM, vol. 56, no. 3, 2013, pp. 27-29.
  • Massé, M., "REST API Design Rulebook," O'Reilly Media, 2011, pp. 33-65.