PIP-Talk - Week 42
PIP-Talk - Week 42!
The topic for this week is the web framework: FastAPI
Need to implement as simple, robust and fast API ?
Then you should have a closer look on the new FastAPI rather than Flask.
Did you know ?
FastAPI was the third most loved web framework in Stack Overflow 2021 Developer Survey and itś used by large companies like Uber and Netflix to develop some of their applications.
Why FastAPI?
FastAPI was launched in 2019, later than popular frameworks such as Django (2006) and Flask (2011), and gained popularity as it is fast and high-performant. Compared to the Flask framework, FastAPI has the following benefits,
- Asyncio for concurrency: Called with async and await keywords
- Pydantic for data validation: Enforces schema and detects data type at runtime
- Swagger UI for automated documentation generation: Enable testing of API endpoints with extension /docs.
- Security and authentication features
License
MIT license
Features
- Fast: Very high performance, on par with NodeJS and Go (thanks to Starlette and Pydantic). One of the fastest Python frameworks available.
- Fast to code: Increase the speed to develop features by about 200% to 300%. *
- Fewer bugs: Reduce about 40% of human (developer) induced errors. *
- Intuitive: Great editor support. Completion everywhere. Less time debugging.
- Easy: Designed to be easy to use and learn. Less time reading docs.
- Short: Minimize code duplication. Multiple features from each parameter declaration. Fewer bugs.
- Robust: Get production-ready code. With automatic interactive documentation.
- Standards-based: Based on (and fully compatible with) the open standards for APIs: OpenAPI (previously known as Swagger) and JSON Schema.
Get started
install FastAPI
$ pip install fastapi
$ pip install uvicorn[standard]
Writing API with FastAPI
Implementing APIs follow the same overall structure,
- Define an API object, such as app = FastAPI()
- Define data type, using Pydantic
- Map HTTP method and path to the relevant Python function.
- Start the API application, run:
bash uvicorn main:app --reload
Note: main refers to the Python filename and app refers to the API object.
Examples
Here is a couple of simple examples to write a API with FastAPI.
Writing a API with 5 lines of code
Is this is possible ? Sure, FastAPI have a very short and simple syntax.
from fastapi import FastAPI
app = FastAPI()
@app.get("/")
def read_root():
return {"Hello World!"}
Simple example with pydantic validation
from fastapi import FastAPI
from pydantic import BaseModel
# 1. Define an API object
app = FastAPI()
# 2. Define data type
class Msg(BaseModel):
msg: str
# 3. Map HTTP method and path to python function
@app.get("/")
async def root():
return {"message": "Hello World. Welcome to the API home page!"}
@app.get("/path")
async def function_demo_get():
return {"message": "This is /path endpoint, use post request to transform text to uppercase"}
@app.post("/path")
async def function_demo_post(inp: Msg):
return {"message": inp.msg.upper()}
@app.get("/path/{path_id}")
async def function_demo_get_path_id(path_id: int):
return {"message": f"This is /path/{path_id} endpoint, use post request to retrieve result"}
# 4. Start the API application (on command line)
# !uvicorn main:app --reload
Links and resources
- Homepage: https://fastapi.tiangolo.com/
- Documentation: https://fastapi.tiangolo.com
- Source Code: https://github.com/tiangolo/fastapi
- PyPI: https://pypi.org/project/fastapi