API Design is one of the most crucial steps in software development and a key topic of discussion in system design interviews.
A well-designed API allows developers to easily integrate with a system while ensuring scalability and security.
Over the years, various API architectural styles have emerged, including REST, GraphQL, gRPC, Webhooks and SOAP, each designed to address different needs.
However, RESTful APIs continue to dominate web development due to their simplicity, scalability, flexibility, widespread adoption and alignment with HTTP standards.
In this chapter, we will dive into REST API design covering:
REST (Representational State Transfer) is an architectural style for designing web services that enable communication between clients (e.g., web browsers, mobile apps) and servers over the HTTP protocol.
REST uses HTTP methods (GET, POST, PUT, DELETE, etc.) to retrieve, create, update, and delete resources.
To build a well-designed REST API, you must first understand the fundamentals of the HTTP protocol.
HTTP provides a set of methods (verbs) that define the type of operation to be performed on a resource.
In RESTful architectures, these methods typically map to CRUD operations:
It’s essential to use the correct HTTP method to make your API clear and intuitive. For example, GET signals a read-only request to developers and should never modify server data, while POST indicates data creation or an action that results in a change.
In RESTful API design, data is represented as resources, and each resource is identified by a Uniform Resource Identifier (URI).
/books/ → A collection (or list) of books/books/123 → A specific book with ID 123An endpoint is a combination of:
/books/, /users/123)Each endpoint represents a specific operation on a resource.
Example:
/books/ → Fetch all books/books/ → Create a new book/books/123 → Delete the book with ID 123Using clear and consistent endpoints helps developers quickly understand how to interact with your API.
Each API response includes an HTTP status code, which indicates the result of the request.
Using meaningful status codes is important for helping consumers of your API understand why a request might have failed and how they can fix or retry it.
Common status codes include:
The request was successfully received and processed.
Further action is needed to complete the request (e.g., a different endpoint or resource location).
There was an error in the request sent by the client.
The server encountered an error while processing the request.