Abstract

Introducing REST++

This document proposes REST++, an evolution of the Representational State Transfer architectural style, designed to address practical shortcomings observed in large-scale API implementations.

REST++ preserves the general philosophy of resource-oriented communication while relaxing several constraints that have proven difficult to apply consistently in modern distributed high-performing systems.

This document is not intended to replace REST, but to extend it in ways that better reflect real-world usage patterns.


1. Background and Motivation

REST, as described in Fielding’s dissertation, introduced a set of architectural constraints intended to guide the design of scalable, evolvable distributed systems. While these constraints were appropriate for the early web, their strict application has become increasingly misaligned with modern engineering realities.

Empirical observation suggests that most production APIs already violate REST constraints in controlled and well-documented ways. REST++ formalizes these deviations, reducing the cognitive overhead associated with pretending otherwise.


2. Terminology

The key words MUST, SHOULD, MAY, SHOULD PROBABLY, and DEFINITELY NOT in this document are to be interpreted as described in RFC 2119, except where overridden by business requirements.


3. Architectural Overview

3.1 REST++ Interaction Model

Figure 1 illustrates the REST++ interaction model.

Introducing REST++

Unlike REST, REST++ explicitly allows for optional conversational state, provided that the server can “reconstruct intent” when necessary. This is also intended to improve performance as the state is cached and there's no need to retrieve it every time.


4. Core REST++ Extensions

4.1 Optional Statelessness

REST enforces stateless communication. REST++ relaxes this constraint.

Servers MAY retain client context across requests when:

Clients SHOULD NOT rely on this behavior unless they already do.

This reflects the widely adopted pattern of statelessness with exceptions.

Note: Statelessness violations are no longer violations when documented.

4.2 Extended HTTP Verb Set

REST++ introduces additional HTTP methods to better express intent.

VerbSemantics
THINKServer evaluates intent without committing
MAYBEOperation MAY occur depending on server mood
EVENTUALLYAsynchronous execution with no SLA
FIXServer applies heuristics to reach a “better” state
UNDOBest-effort rollback of something that probably cannot be rolled back

These verbs are intentionally non-idempotent unless they accidentally are.

Introducing REST++

4.3 Resource Verb Duality

REST++ removes the strict noun-only restriction on resource naming.

Resources MAY be verbs if:

Examples of valid REST++ resources:

POST /borrowBook
POST /approveUser
POST /syncEverything
POST /doTheThing

This avoids unnecessary reification of abstract concepts such as “borrowings,” which users did not ask for.

Rationale: If it works in controllers, it should work in URLs.

4.4 Implicit Version Negotiation

REST++ eliminates explicit versioning.

Instead:

Version identifiers such as /v1, /v2, or headers like Accept-Version are discouraged, as they encourage long-term thinking.

Implementation Note:
Rollbacks are handled operationally.

4.5 Relaxed Uniform Interface

REST enforces a uniform interface across resources. REST++ allows resource-specific interaction contracts.

Each endpoint may define:

Consistency is encouraged but must not impede velocity.

Introducing REST++

5. Error Handling

REST++ simplifies error handling by reducing semantic obligations.

Recommended approach:

This aligns error semantics with how clients already behave.


6. Security Considerations

REST++ does not mandate a specific authentication or authorization strategy.

Security SHOULD be handled:

Authorization is considered an orthogonal concern and SHOULD NOT influence resource design, endpoint naming, or access control decisions.


7. Migration Strategy

Existing REST APIs may migrate incrementally to REST++.

Suggested steps:

  1. Rename endpoints to better reflect intent
  2. Introduce implicit state where convenient
  3. Remove explicit versions
  4. Add semantic verbs sparingly but confidently

Backward compatibility SHOULD be preserved until it is no longer needed.


8. Discussion

REST++ does not claim to be purer than REST. It claims to be honest.

By acknowledging common deviations and standardizing them, REST++ reduces architectural guilt and increases delivery confidence while increasing the delivery speed.


9. Known Limitations


9. Conclusion

REST++ represents a pragmatic evolution of REST, informed by years of production experience and organizational realities.

While it diverges from original REST constraints, it reflects how APIs are actually designed, deployed, and maintained today.

Modern Software Engineering practices dictate that everything can be handed over to a Large Language Model (LLM) to re-generate the API design when it stops serving its purpose and we encourage the API users to do the same with their API clients.

Everything written in this document is not to be taken seriously as it is 1st of April and the world goes crazy in this date.