API

2 minute read

FastAPI Tutorial

  • Using the FastAPI web framework for building APIs with Python

FastAPI Tutorial

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"}

"insert Notes" "insert Notes" "insert Notes" "insert Notes" "insert Notes" "insert Notes" "insert Notes" "insert Notes" "insert Notes" "insert Notes" "insert Notes"