API
FastAPI Tutorial
- Using the FastAPI web framework for building APIs with Python
Example: NBA.com/create-user
REST API Concepts:
GET - Get an Information
POST - Create Something New
PUT - UPDATE
DELETE- Delete Something
How to Run
- Go to the FastAPI Python file/script in your terminal
- Have *uvicorn installed
Type uvicorn then the name of the file without the py extension so api in this case, then “:” with the name of API in the file (api). Then type –reload to start the web server.
- The following command will run the Python App below
uvicorn api:api --reload
from fastapi import FastAPI, Path
from typing import Optional
from pydantic import BaseModel
app = FastAPI()
# NBA.com/create-user
class Player(BaseModel):
name: str
age: int
team: str
number: int
class UpdatePlayer(BaseModel):
name: Optional[str] = None
age: Optional[int] = None
team: Optional[str] = None
number: Optional[int] = None
players = {
1: {
"name": "Lebron James",
"age": 37,
"team": "Los Angeles Lakers",
"number": 6
},
2: {
"name": "Steph Curry",
"age": 33,
"team": "Golden State Warriors",
"number": 30
},
3: {
"name": "Draymond Green",
"age": 32,
"team": "Golden State Warriors",
"number": 23
},
4: {
"name": "Chris Paul",
"age": 36,
"team": "Phoenix Suns",
"number": 3
}
}
@app.get("/") # homepage
def index():
return {"name": "First Data"}
@app.get("/get-nba/{player_id}")
def get_player(player_id: int = Path(None, description = "The ID of the NBA Player that you want to view")):
return players[player_id]
@app.get("/get-nba-by-name/")
def get_player(name: str):
for player_id in players:
if players[player_id]["name"] == name:
return players[player_id]
return {"Data": "Not Found"}
# Using Optional O
@app.get("/get-nba-by-name/")
def get_player(*, name: Optional[str] = None, test : int):
for player_id in players:
if players[player_id]["name"] == name:
return players[player_id]
return {"Data": "Not Found"}
# Combing Path and Query together
# GEt two different values from user
@app.get("/get-nba-by-name/{player_id}")
def get_player(*, player_id: int, name: Optional[str] = None):
for player_id in players:
if players[player_id]["name"] == name:
return players[player_id]
return {"Data": "Not Found"}
# NBA.com/get-player/1
# POST - Create a new Object
@app.post("/create-player/{player_id}")
def create_player(player_id : int, player : Player):
if player_id in players:
return {"Error": "Player Exists"}
players[player_id] = player
return players[player_id]
# PUT -update something that already exists
@app.put("/update-player/{player_id}")
def update_player(player_id: int, player: UpdatePlayer):
if player_id not in players:
return {"Error": "Player does not exist"}
if player.name != None:
players[player_id].name = player.name
if player.age != None:
players[player_id].age = player.age
if player.team != None:
players[player_id].team = player.team
if player.number != None:
players[player_id].number = player.number
return players[player_id]
# Delete
@app.delete("/delete-player/{player_id}")
def delete_player(player_id: int):
if player_id not in players:
return {"Error!": "Player does not exist"}
del players[player_id]
return {"Message": "Player Deleted Successfully"}