FastAPI is a Python high performance web framework
Uvicorn is a lightning fast ASGI web server
Pre-requisite
Make sure all Python 3
options are installed by the ``Open Source Package Management``` menu option in ACS
Log in to an IBM i SSH terminal session and make sure bash is the current shell
Install fastapi - latest
pip3 install fastapi
Install fastapi for Python 3.9
pip3 install fastapi==0.110.1
Install uvicorn (The lightning fast ASGI server). This will be our web app server component
pip3 install uvicorn
Note: Dont install with the [standard] option. This will possibly cause errors when trying to build some of the wheels.
Create an IFS folder for your project.
cd /
mkdir /pythonfastapi
Create a new main.py file with the following lines:
from typing import Optional
from fastapi import FastAPI
app = FastAPI()
@app.get("/")
def read_root():
return {"Hello": "World"}
@app.get("/items/{item_id}")
def read_item(item_id: int, q: Optional[str] = None):
return {"item_id": item_id, "q": q}
cd /pythonfastapi
uvicorn main:app --reload --port 3434
This will start your app on port 3434. The results should look like the following. And the web app server will restart any time a page change is made.
INFO: Will watch for changes in these directories: ['/home/RICHARD/richard/pythonfastapi']
INFO: Uvicorn running on http://0.0.0.0:3434 (Press CTRL+C to quit)
INFO: Started reloader process [2530954] using watchgod
INFO: Started server process [2530956]
INFO: Waiting for application startup.
INFO: Application startup complete.
If you plan to expose your web app to the Internet, it's probably a good idea to set up an NGINX web server as a web front end that also uses SSL for secure communications. NGINX can proxy/pass all web traffic to youe Uvicorn server.
Note: It's possible Uvicorn can be exposed without using NGINX, but I would recommend exploring this more on the Uvicorn web site and doing appropriate research before you expose your app server to the web. http://www.uvicorn.org/deployment
The following URL will display the Hello World response
http://[hostname]:3434
The following URL will display the /items route response
http://[hostname]:3434/items/1/q=SampleQuery
Displaying Open API/Swagger Documentation and Testing API
http://[hostname]:3434/docs
Displaying ReDoc Documentation and Testing API
http://[hostname]:3434/redoc