replicate/fastapi
forked from chbndrhnns/fastapi
Captured source
source ↗replicate/fastapi
Description: FastAPI framework, high performance, easy to learn, fast to code, ready for production
Language: Python
License: MIT
Stars: 4
Forks: 0
Open issues: 0
Created: 2024-04-19T12:37:29Z
Pushed: 2024-04-19T13:26:52Z
Default branch: master
Fork: yes
Parent repository: chbndrhnns/fastapi
Archived: yes
README:
FastAPI framework, high performance, easy to learn, fast to code, ready for production
---
Documentation: https://fastapi.tiangolo.com
Source Code: https://github.com/tiangolo/fastapi
---
FastAPI is a modern, fast (high-performance), web framework for building APIs with Python 3.8+ based on standard Python type hints.
The key features are:
- Fast: Very high performance, on par with NodeJS and Go (thanks to Starlette and Pydantic). [One of the fastest Python frameworks available](#performance).
- 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.
- estimation based on tests on an internal development team, building production applications.
Sponsors
Other sponsors
Opinions
"_[...] I'm using FastAPI a ton these days. [...] I'm actually planning to use it for all of my team's ML services at Microsoft. Some of them are getting integrated into the core Windows product and some Office products._"
Kabir Khan - Microsoft (ref)
---
"_We adopted the FastAPI library to spawn a REST server that can be queried to obtain predictions. [for Ludwig]_"
Piero Molino, Yaroslav Dudin, and Sai Sumanth Miryala - Uber (ref)
---
"_Netflix is pleased to announce the open-source release of our crisis management orchestration framework: Dispatch! [built with FastAPI]_"
Kevin Glisson, Marc Vilanova, Forest Monsen - Netflix (ref)
---
"_I’m over the moon excited about FastAPI. It’s so fun!_"
Brian Okken - Python Bytes podcast host (ref)
---
"_Honestly, what you've built looks super solid and polished. In many ways, it's what I wanted Hug to be - it's really inspiring to see someone build that._"
Timothy Crosley - Hug creator (ref)
---
"_If you're looking to learn one modern framework for building REST APIs, check out FastAPI [...] It's fast, easy to use and easy to learn [...]_"
"_We've switched over to FastAPI for our APIs [...] I think you'll like it [...]_"
Ines Montani - Matthew Honnibal - Explosion AI founders - spaCy creators (ref) - (ref)
---
"_If anyone is looking to build a production Python API, I would highly recommend FastAPI. It is beautifully designed, simple to use and highly scalable, it has become a key component in our API first development strategy and is driving many automations and services such as our Virtual TAC Engineer._"
Deon Pillsbury - Cisco (ref)
---
Typer, the FastAPI of CLIs
If you are building a CLI app to be used in the terminal instead of a web API, check out Typer.
Typer is FastAPI's little sibling. And it's intended to be the FastAPI of CLIs. ⌨️ 🚀
Requirements
Python 3.8+
FastAPI stands on the shoulders of giants:
- Starlette for the web parts.
- Pydantic for the data parts.
Installation
$ pip install fastapi ---> 100%
You will also need an ASGI server, for production such as Uvicorn or Hypercorn.
$ pip install "uvicorn[standard]" ---> 100%
Example
Create it
- Create a file
main.pywith:
from typing import Union
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: Union[str, None] = None):
return {"item_id": item_id, "q": q}Or use async def...
If your code uses async / await, use async def:
from typing import Union
from fastapi import FastAPI
app = FastAPI()
@app.get("/")
async def read_root():
return {"Hello": "World"}
@app.get("/items/{item_id}")
async def read_item(item_id: int, q: Union[str, None] = None):
return {"item_id": item_id, "q": q}Note:
If you don't know, check the _"In a hurry?"_ section about async and await in the docs.
Run it
Run the server with:
$ uvicorn main:app --reload INFO: Uvicorn running on http://127.0.0.1:8000 (Press CTRL+C to quit) INFO: Started reloader process [28720] INFO: Started server process [28722] INFO: Waiting for application startup. INFO: Application startup complete.
About the command uvicorn main:app --reload...
The command uvicorn main:app refers to:
main: the filemain.py(the Python "module").app: the object created inside ofmain.pywith the lineapp = FastAPI().--reload: make the server restart after code changes. Only do this for development.
Check it
Open your browser at http://127.0.0.1:8000/items/5?q=somequery.
You will see the JSON response as:
{"item_id": 5, "q": "somequery"}You already created an API that:
- Receives HTTP requests in the _paths_
/and/items/{item_id}. - Both _paths_ take
GEToperations (also known as HTTP _methods_). - The _path_
/items/{item_id}has a _path parameter_item_idthat should be anint. - The _path_
/items/{item_id}has an optionalstr_query parameter_q.
Interactive API docs
Now go to http://127.0.0.1:8000/docs.
You will see the automatic interactive API documentation (provided by Swagger UI):
Alternative API docs
And now, go to http://127.0.0.1:8000/redoc.
You will see the alternative automatic documentation (provided by ReDoc):
Example upgrade
Now modify the file main.py to receive a body from a PUT request.
Declare the body using standard Python types, thanks to…
Excerpt shown — open the source for the full document.