ForkReplicateReplicatepublished Apr 19, 2024seen 5d

replicate/fastapi

forked from chbndrhnns/fastapi

Open original ↗

Captured source

source ↗
published Apr 19, 2024seen 5dcaptured 18hhttp 200method plain

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.py with:
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 file main.py (the Python "module").
  • app: the object created inside of main.py with the line app = 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 GET operations (also known as HTTP _methods_).
  • The _path_ /items/{item_id} has a _path parameter_ item_id that should be an int.
  • The _path_ /items/{item_id} has an optional str _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):

!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):

!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.