diff --git a/src/data/projects/blogging-platform-api.md b/src/data/projects/blogging-platform-api.md new file mode 100644 index 000000000..3b34b71b9 --- /dev/null +++ b/src/data/projects/blogging-platform-api.md @@ -0,0 +1,206 @@ +--- +title: 'Blogging Platform API' +description: 'Build a RESTful API for a personal blogging platform' +isNew: false +sort: 6 +difficulty: 'beginner' +nature: 'API' +skills: + - 'Programming Language' + - 'CRUD' + - 'RESTful API' + - 'Database' +seo: + title: 'Blogging Platform API Project Idea' + description: 'Build a RESTful API for a personal blogging platform. Users can create, read, update, and delete blog posts using the API.' + keywords: + - 'blogging platform api' + - 'backend project idea' +roadmapIds: + - 'backend' +--- + +You are required to create a simple RESTful API with basic CRUD operations for a personal blogging platform. CRUD stands for Create, Read, Update, and Delete. The goals of this project are to help you: + +- Understand what the RESTful APIs are including best practices and conventions +- Learn how to create a RESTful API +- Learn about common HTTP methods like GET, POST, PUT, PATCH, DELETE +- Learn about status codes and error handling in APIs +- Learn how to perform CRUD operations using an API +- Learn how to work with databases + +## Constraints + +- You can use any programming language and framework of your choice +- You can use any database of your choice (SQL or NoSQL) +- You can use any libraries for validation and error handling +- There is no frontend required for this project since you are building an API +- You can use any API testing tool like Postman, Insomnia, or cURL to test your API + +## Requirements + +Each blog post should have the following fields: + +```json +{ + "title": "My First Blog Post", + "content": "This is the content of my first blog post.", + "category": "Technology", + "tags": ["Tech", "Programming"] +} +``` + +The API should have the following endpoints: + +### Create Blog Post + +Create a new blog post using the `POST` method + +```plaintext +POST /posts +{ + "title": "My First Blog Post", + "content": "This is the content of my first blog post.", + "category": "Technology", + "tags": ["Tech", "Programming"] +} +``` + +The endpoint should validate the request body and return a `201 Created` status code with the newly created blog post i.e. + +```json +{ + "id": 1, + "title": "My First Blog Post", + "content": "This is the content of my first blog post.", + "category": "Technology", + "tags": ["Tech", "Programming"], + "createdAt": "2021-09-01T12:00:00Z", + "updatedAt": "2021-09-01T12:00:00Z" +} +``` + +or a `400 Bad Request` status code with error messages in case of validation errors. + +## Update Blog Post + +Update an existing blog post using the `PUT` method + +```plaintext +PUT /posts/1 +{ + "title": "My Updated Blog Post", + "content": "This is the updated content of my first blog post.", + "category": "Technology", + "tags": ["Tech", "Programming"] +} +``` + +The endpoint should validate the request body and return a `200 OK` status code with the updated blog post i.e. + +```json +{ + "id": 1, + "title": "My Updated Blog Post", + "content": "This is the updated content of my first blog post.", + "category": "Technology", + "tags": ["Tech", "Programming"], + "createdAt": "2021-09-01T12:00:00Z", + "updatedAt": "2021-09-01T12:30:00Z" +} +``` + +or a `400 Bad Request` status code with error messages in case of validation errors. It should return a `404 Not Found` status code if the blog post was not found. + +### Delete Blog Post + +Delete an existing blog post using the `DELETE` method + +```plaintext +DELETE /posts/1 +``` + +The endpoint should return a `204 No Content` status code if the blog post was successfully deleted or a `404 Not Found` status code if the blog post was not found. + +### Get Blog Post + +Get a single blog post using the `GET` method + +```plaintext +GET /posts/1 +``` + +The endpoint should return a `200 OK` status code with the blog post i.e. + +```json +{ + "id": 1, + "title": "My First Blog Post", + "content": "This is the content of my first blog post.", + "category": "Technology", + "tags": ["Tech", "Programming"], + "createdAt": "2021-09-01T12:00:00Z", + "updatedAt": "2021-09-01T12:00:00Z" +} +``` + +or a `404 Not Found` status code if the blog post was not found. + +### Get All Blog Posts + +Get all blog posts using the `GET` method + +```plaintext +GET /posts +``` + +The endpoint should return a `200 OK` status code with an array of blog posts i.e. + +```json +[ + { + "id": 1, + "title": "My First Blog Post", + "content": "This is the content of my first blog post.", + "category": "Technology", + "tags": ["Tech", "Programming"], + "createdAt": "2021-09-01T12:00:00Z", + "updatedAt": "2021-09-01T12:00:00Z" + }, + { + "id": 2, + "title": "My Second Blog Post", + "content": "This is the content of my second blog post.", + "category": "Technology", + "tags": ["Tech", "Programming"], + "createdAt": "2021-09-01T12:30:00Z", + "updatedAt": "2021-09-01T12:30:00Z" + } +] +``` + +You don't have to implement pagination, authentication or authorization for this project. You can focus on the core functionality of the API. + +While retrieving posts, user can also filter posts by a search term. You should do a wildcard search on the title, content or category fields of the blog posts. For example: + +```plaintext +GET /posts?term=tech +``` + +This should return all blog posts that have the term "tech" in their title, content or category. You can use a simple SQL query if you are using a SQL database or a similar query for a NoSQL database. + +