In previous examples, we discussed best practices and naming conventions for building APIs. In this updated guide, our FastAPI code is refactored to align with RESTful principles and industry standards.Documentation Index
Fetch the complete documentation index at: https://notes.kodekloud.com/llms.txt
Use this file to discover all available pages before exploring further.
Initial Implementation
Initially, our application defined GET and POST endpoints as follows:/createposts, which is inconsistent with RESTful naming standards. Our goal is to standardize all endpoints, so we update the POST endpoint to use /posts.
Improved Endpoint Definition
By changing the POST endpoint to/posts, our API maintains a consistent naming scheme. The updated endpoint is shown below:
/posts endpoint. When tested, this endpoint responds as expected.
Keep in mind that this example only prints and returns the submitted post; it does not persist data in a database.
Simulating Data Persistence
Since this simple example does not use a database, we simulate data persistence by storing posts in an in-memory list. In a production setting, these posts would be saved to a database where ID creation is handled automatically. Here, we assign a unique ID to each post using a random integer. Below is the consolidated version of our FastAPI application:Code Breakdown
-
Data Model:
ThePostclass (a Pydantic model) defines the structure and validation rules for incoming post data. -
In-Memory Storage:
Themy_postslist simulates a database and is pre-populated with two sample posts. Note that any data stored here will be lost when the server restarts. -
GET Endpoint:
The/postsGET endpoint returns all stored posts in response to client requests. -
POST Endpoint:
The/postsPOST endpoint validates the input post using thePostmodel, converts it to a dictionary, assigns a unique ID usingrandrange, appends the post to the in-memory list, and returns the new post data.
As you continue to enhance your API, consider incorporating input validation and error handling mechanisms to build a fully functional CRUD-based application.