Bird
Raised Fist0
FastAPIframework~10 mins

Bulk operations in FastAPI - Interactive Code Practice

Choose your learning style10 modes available
Practice - 5 Tasks
Answer the questions below
1fill in blank
easy

Complete the code to define a FastAPI POST endpoint for bulk creating items.

FastAPI
from fastapi import FastAPI
from pydantic import BaseModel

app = FastAPI()

class Item(BaseModel):
    name: str
    price: float

@app.post("/items/bulk")
async def create_items(items: [1]):
    return {"created": len(items)}
Drag options to blanks, or click blank then click option'
Adict
BItem
Clist[Item]
Dstr
Attempts:
3 left
💡 Hint
Common Mistakes
Using a single Item instead of a list for bulk operations.
Using dict or str which won't validate the input properly.
2fill in blank
medium

Complete the code to process each item in the bulk request asynchronously.

FastAPI
from fastapi import FastAPI
from pydantic import BaseModel
import asyncio

app = FastAPI()

class Item(BaseModel):
    name: str
    price: float

async def save_item(item: Item):
    await asyncio.sleep(0.1)  # simulate saving

@app.post("/items/bulk")
async def create_items(items: list[Item]):
    await asyncio.gather(*[[1] for item in items])
    return {"created": len(items)}
Drag options to blanks, or click blank then click option'
Asave_item(item)
Bitem.save()
Csave_item()
Ditem()
Attempts:
3 left
💡 Hint
Common Mistakes
Calling save_item without arguments.
Trying to call a method on item that doesn't exist.
3fill in blank
hard

Fix the error in the bulk update endpoint to accept a list of items.

FastAPI
from fastapi import FastAPI
from pydantic import BaseModel

app = FastAPI()

class ItemUpdate(BaseModel):
    id: int
    price: float

@app.put("/items/bulk")
async def update_items(items: [1]):
    updated = len(items)
    return {"updated": updated}
Drag options to blanks, or click blank then click option'
Adict[int, float]
Btuple[ItemUpdate]
CItemUpdate
Dlist[ItemUpdate]
Attempts:
3 left
💡 Hint
Common Mistakes
Using a single ItemUpdate instead of a list.
Using dict or tuple which won't validate the input properly.
4fill in blank
hard

Fill both blanks to create a bulk delete endpoint accepting a list of IDs.

FastAPI
from fastapi import FastAPI
from typing import [1]

app = FastAPI()

@app.delete("/items/bulk")
async def delete_items(ids: [2]):
    deleted_count = len(ids)
    return {"deleted": deleted_count}
Drag options to blanks, or click blank then click option'
AList
Blist[int]
CSet
Dtuple[int]
Attempts:
3 left
💡 Hint
Common Mistakes
Not importing List from typing.
Using Set or tuple instead of list for the parameter.
5fill in blank
hard

Fill all three blanks to create a bulk response with item names and their updated prices.

FastAPI
from fastapi import FastAPI
from pydantic import BaseModel

app = FastAPI()

class ItemUpdate(BaseModel):
    name: str
    price: float

@app.put("/items/bulk")
async def update_items(items: list[ItemUpdate]):
    result = [1]([2]: [3] for item in items)
    return {"updated_items": result}
Drag options to blanks, or click blank then click option'
Adict
Bitem.name
Citem.price
Dlist
Attempts:
3 left
💡 Hint
Common Mistakes
Using list instead of dict for the comprehension.
Swapping key and value in the comprehension.

Practice

(1/5)
1. What is the main benefit of using bulk operations in FastAPI?
easy
A. They limit the number of items processed to one per request.
B. They automatically generate HTML forms for data input.
C. They encrypt data before sending it to the client.
D. They allow handling many items in a single request, reducing server calls.

Solution

  1. Step 1: Understand bulk operations purpose

    Bulk operations let you send many items at once instead of one by one.
  2. Step 2: Identify the main benefit

    This reduces the number of server calls and speeds up processing.
  3. Final Answer:

    They allow handling many items in a single request, reducing server calls. -> Option D
  4. Quick Check:

    Bulk operations = fewer server calls [OK]
Hint: Bulk means many items at once, not one by one [OK]
Common Mistakes:
  • Thinking bulk operations encrypt data
  • Confusing bulk with form generation
  • Assuming bulk limits to one item
2. Which of the following is the correct way to accept multiple items in a FastAPI endpoint using Pydantic models?
easy
A. def create_items(items: ItemModel[]):
B. def create_items(item: ItemModel):
C. def create_items(items: List[ItemModel]):
D. def create_items(items: Dict[ItemModel]):

Solution

  1. Step 1: Recall FastAPI typing for multiple items

    FastAPI uses Python typing List[Model] to accept multiple objects.
  2. Step 2: Check each option's syntax

    def create_items(items: List[ItemModel]): uses List[ItemModel], which is correct. def create_items(item: ItemModel): accepts one item only. def create_items(items: ItemModel[]): uses invalid syntax. def create_items(items: Dict[ItemModel]): uses Dict which is not for lists.
  3. Final Answer:

    def create_items(items: List[ItemModel]): -> Option C
  4. Quick Check:

    Multiple items = List[Model] [OK]
Hint: Use List[Model] to accept many items in FastAPI [OK]
Common Mistakes:
  • Using ItemModel[] which is invalid syntax
  • Using Dict instead of List for multiple items
  • Forgetting to import List from typing
3. Given this FastAPI endpoint:
from fastapi import FastAPI
from pydantic import BaseModel
from typing import List

app = FastAPI()

class Item(BaseModel):
    name: str
    price: float

@app.post('/items/')
async def create_items(items: List[Item]):
    return {'count': len(items), 'names': [item.name for item in items]}
What will be the response if the client sends this JSON body?
[{"name": "apple", "price": 1.2}, {"name": "banana", "price": 0.5}]
medium
A. Validation error due to missing fields
B. {"count": 2, "names": ["apple", "banana"]}
C. {"count": 1, "names": ["apple"]}
D. {"count": 0, "names": []}

Solution

  1. Step 1: Understand input and endpoint behavior

    The endpoint accepts a list of Item objects and returns count and names list.
  2. Step 2: Analyze input JSON

    The input has two items with names 'apple' and 'banana'.
  3. Step 3: Predict output

    Count is 2, names list contains both names.
  4. Final Answer:

    {"count": 2, "names": ["apple", "banana"]} -> Option B
  5. Quick Check:

    List length = 2, names extracted correctly [OK]
Hint: Count list length and extract names from each item [OK]
Common Mistakes:
  • Assuming only one item processed
  • Expecting validation error without reason
  • Returning empty list mistakenly
4. Identify the error in this FastAPI bulk operation endpoint:
from fastapi import FastAPI
from pydantic import BaseModel

app = FastAPI()

class User(BaseModel):
    username: str
    age: int

@app.post('/users/')
async def create_users(users: User):
    return {'usernames': [user.username for user in users]}
medium
A. The parameter 'users' should be a list type like List[User].
B. The return statement should not use list comprehension.
C. The User model is missing required fields.
D. The endpoint path should be '/user/' not '/users/'.

Solution

  1. Step 1: Check parameter type for bulk input

    The parameter 'users' is typed as User, which accepts one object, not multiple.
  2. Step 2: Identify correct typing for multiple users

    To accept many users, it should be List[User] from typing module.
  3. Final Answer:

    The parameter 'users' should be a list type like List[User]. -> Option A
  4. Quick Check:

    Bulk input needs List[Model] type [OK]
Hint: Bulk input must be List[Model], not single Model [OK]
Common Mistakes:
  • Using single model instead of list for bulk
  • Thinking list comprehension causes error
  • Confusing endpoint path naming
5. You want to create a FastAPI endpoint that accepts a bulk list of products but only saves those with price greater than 10. Which code snippet correctly implements this filtering inside the endpoint?
hard
A. async def create_products(products: List[Product]): filtered = [p for p in products if p.price > 10] return {'saved': len(filtered)}
B. async def create_products(products: List[Product]): filtered = [p for p in products if p.price < 10] return {'saved': len(filtered)}
C. async def create_products(products: Product): filtered = [p for p in products if p.price > 10] return {'saved': len(filtered)}
D. async def create_products(products: List[Product]): filtered = filter(lambda p: p.price < 10, products) return {'saved': len(filtered)}

Solution

  1. Step 1: Confirm parameter type for bulk products

    Parameter must be List[Product] to accept multiple products.
  2. Step 2: Check filtering condition

    We want products with price greater than 10, so filter with p.price > 10.
  3. Step 3: Validate return value

    Return count of filtered list using len(filtered).
  4. Final Answer:

    async def create_products(products: List[Product]): filtered = [p for p in products if p.price > 10] return {'saved': len(filtered)} -> Option A
  5. Quick Check:

    Filter price > 10 and count saved [OK]
Hint: Filter with list comprehension and correct condition [OK]
Common Mistakes:
  • Filtering with wrong condition (price < 10)
  • Using single Product instead of List[Product]
  • Using filter but forgetting to convert to list before len()
Recommended

Ready to prove it?

Pass the test and this pattern moves unknown strong while earning +1 Grip toward your certificate.

10 questions~5 mineasy hard