Subjects

All subjects Django Java Python React Spring Boot JavaScript PHP
Sign Up Free
Interview question

How do you build RESTful APIs with Python frameworks? Python frameworks से RESTful APIs कैसे बनाते हैं?

Answer
# Flask-RESTful
from flask import Flask
from flask_restful import Api, Resource, reqparse

app = Flask(__name__)
api = Api(app)

class TodoItem(Resource):
    def get(self, id):
        return {'id': id, 'task': 'Sample task'}
    
    def post(self, id):
        parser = reqparse.RequestParser()
        parser.add_argument('task', type=str, required=True)
        args = parser.parse_args()
        return {'id': id, 'task': args['task']}, 201
    
    def put(self, id):
        parser = reqparse.RequestParser()
        parser.add_argument('task', type=str)
        args = parser.parse_args()
        return {'id': id, 'task': args['task']}, 200
    
    def delete(self, id):
        return {'status': 'deleted', 'id': id}, 204

api.add_resource(TodoItem, '/todos/<int:id>')

# Django REST Framework
from rest_framework import viewsets
from rest_framework.decorators import action
from rest_framework.response import Response
from .models import Todo
from .serializers import TodoSerializer

class TodoViewSet(viewsets.ModelViewSet):
    queryset = Todo.objects.all()
    serializer_class = TodoSerializer
    
    @action(detail=False, methods=['get'])
    def recent(self, request):
        recent = Todo.objects.order_by('-created_at')[:5]
        serializer = self.get_serializer(recent, many=True)
        return Response(serializer.data)

# FastAPI with Pydantic
from fastapi import FastAPI
from pydantic import BaseModel

app = FastAPI()

class TodoCreate(BaseModel):
    title: str
    description: str = None

class Todo(TodoCreate):
    id: int

todos_db = []

@app.get('/todos')
async def get_todos():
    return todos_db

@app.get('/todos/{todo_id}')
async def get_todo(todo_id: int):
    return next((t for t in todos_db if t['id'] == todo_id), None)

@app.post('/todos', response_model=Todo)
async def create_todo(todo: TodoCreate):
    new_todo = {'id': len(todos_db) + 1, **todo.dict()}
    todos_db.append(new_todo)
    return new_todo

@app.put('/todos/{todo_id}')
async def update_todo(todo_id: int, todo: TodoCreate):
    for t in todos_db:
        if t['id'] == todo_id:
            t.update(todo.dict())
            return t

@app.delete('/todos/{todo_id}')
async def delete_todo(todo_id: int):
    global todos_db
    todos_db = [t for t in todos_db if t['id'] != todo_id]
    return {'status': 'deleted'}
Flask-RESTful:
class Resource
api.add_resource()
reqparse.RequestParser()

Django REST Framework:
ViewSets
Serializers
@action decorators

FastAPI:
Pydantic models
@app.get/post/put/delete
Automatic validation

Was this answer clear?