Lewati ke isi

Langkah Pertama

File FastAPI yang paling sederhana bisa seperti berikut:

from fastapi import FastAPI

app = FastAPI()


@app.get("/")
async def root():
    return {"message": "Hello World"}

Salin file tersebut ke main.py.

Jalankan di server:

$ <font color="#4E9A06">fastapi</font> dev <u style="text-decoration-style:single">main.py</u>
<font color="#3465A4">INFO    </font> Using path <font color="#3465A4">main.py</font>
<font color="#3465A4">INFO    </font> Resolved absolute path <font color="#75507B">/home/user/code/awesomeapp/</font><font color="#AD7FA8">main.py</font>
<font color="#3465A4">INFO    </font> Searching for package file structure from directories with <font color="#3465A4">__init__.py</font> files
<font color="#3465A4">INFO    </font> Importing from <font color="#75507B">/home/user/code/</font><font color="#AD7FA8">awesomeapp</font>

 ╭─ <font color="#8AE234"><b>Python module file</b></font> ─╮
 │                      │
 │  🐍 main.py          │
 │                      │
 ╰──────────────────────╯

<font color="#3465A4">INFO    </font> Importing module <font color="#4E9A06">main</font>
<font color="#3465A4">INFO    </font> Found importable FastAPI app

 ╭─ <font color="#8AE234"><b>Importable FastAPI app</b></font> ─╮
 │                          │
 │  <span style="background-color:#272822"><font color="#FF4689">from</font></span><span style="background-color:#272822"><font color="#F8F8F2"> main </font></span><span style="background-color:#272822"><font color="#FF4689">import</font></span><span style="background-color:#272822"><font color="#F8F8F2"> app</font></span><span style="background-color:#272822">  </span>  │
 │                          │
 ╰──────────────────────────╯

<font color="#3465A4">INFO    </font> Using import string <font color="#8AE234"><b>main:app</b></font>

 <span style="background-color:#C4A000"><font color="#2E3436">╭────────── FastAPI CLI - Development mode ───────────╮</font></span>
 <span style="background-color:#C4A000"><font color="#2E3436">│                                                     │</font></span>
 <span style="background-color:#C4A000"><font color="#2E3436">│  Serving at: http://127.0.0.1:8000                  │</font></span>
 <span style="background-color:#C4A000"><font color="#2E3436">│                                                     │</font></span>
 <span style="background-color:#C4A000"><font color="#2E3436">│  API docs: http://127.0.0.1:8000/docs               │</font></span>
 <span style="background-color:#C4A000"><font color="#2E3436">│                                                     │</font></span>
 <span style="background-color:#C4A000"><font color="#2E3436">│  Running in development mode, for production use:   │</font></span>
 <span style="background-color:#C4A000"><font color="#2E3436">│                                                     │</font></span>
 <span style="background-color:#C4A000"><font color="#2E3436">│  </font></span><span style="background-color:#C4A000"><font color="#555753"><b>fastapi run</b></font></span><span style="background-color:#C4A000"><font color="#2E3436">                                        │</font></span>
 <span style="background-color:#C4A000"><font color="#2E3436">│                                                     │</font></span>
 <span style="background-color:#C4A000"><font color="#2E3436">╰─────────────────────────────────────────────────────╯</font></span>

<font color="#4E9A06">INFO</font>:     Will watch for changes in these directories: [&apos;/home/user/code/awesomeapp&apos;]
<font color="#4E9A06">INFO</font>:     Uvicorn running on <b>http://127.0.0.1:8000</b> (Press CTRL+C to quit)
<font color="#4E9A06">INFO</font>:     Started reloader process [<font color="#34E2E2"><b>2265862</b></font>] using <font color="#34E2E2"><b>WatchFiles</b></font>
<font color="#4E9A06">INFO</font>:     Started server process [<font color="#06989A">2265873</font>]
<font color="#4E9A06">INFO</font>:     Waiting for application startup.
<font color="#4E9A06">INFO</font>:     Application startup complete.

Di output, terdapat sebaris pesan:

INFO:     Uvicorn running on http://127.0.0.1:8000 (Press CTRL+C to quit)

Baris tersebut menunjukan URL dimana app aktif di komputer anda.

Mencoba aplikasi

Buka browser di http://127.0.0.1:8000.

Anda akan melihat response JSON sebagai berikut:

{"message": "Hello World"}

Dokumen API interaktif

Sekarang kunjungi http://127.0.0.1:8000/docs.

Anda akan melihat dokumentasi API interaktif otomatis (dibuat oleh Swagger UI):

Swagger UI

Dokumen API alternatif

Dan sekarang, kunjungi http://127.0.0.1:8000/redoc.

Anda akan melihat dokumentasi alternatif otomatis (dibuat oleh ReDoc):

ReDoc

OpenAPI

FastAPI membuat sebuah "schema" dimana semua API anda menggunakan standar OpenAPI untuk mendefinisikan API.

"Schema"

"schema" adalah suatu definisi atau deskripsi dari sesuatu. Bukan kode yang mengimplementasi definisi tersebut. Ini hanyalah sebuah deskripsi abstrak.

"schema" API

Dalam hal ini, OpenAPI adalah spesifikasi yang menunjukan bagaimana untuk mendefinisikan sebuah skema di API anda.

Definisi skema ini termasuk jalur API anda, parameter yang bisa diterima, dll.

"schema" Data

Istilah "schema" bisa juga merujuk ke struktur data, seperti konten JSON.

Dalam kondisi ini, ini berarti attribut JSON dan tipe data yang dimiliki, dll.

Schema OpenAPI and JSON

"schema" OpenAPI mendefinisikan skema API dari API yang anda buat. Skema tersebut termasuk definisi (atau "schema") dari data yang dikirim atau diterima oleh API dari JSON Schema, skema data standar JSON.

Lihat openapi.json

Jika anda penasaran bagaimana skema OpenAPI polos seperti apa, FastAPI secara otomatis membuat JSON (schema) dengan deksripsi API anda.

anda bisa melihatnya di: http://127.0.0.1:8000/openapi.json.

Anda akan melihat JSON yang dimulai seperti:

{
    "openapi": "3.1.0",
    "info": {
        "title": "FastAPI",
        "version": "0.1.0"
    },
    "paths": {
        "/items/": {
            "get": {
                "responses": {
                    "200": {
                        "description": "Successful Response",
                        "content": {
                            "application/json": {



...

Kegunaan OpenAPI

Skema OpenAPI adalah tulang punggung dua sistem dokumentasi API interaktif yang ada di FastAPI.

Ada banyak alternatif sistem dokumentasi lainnya yang semuanya berdasarkan OpenAPI. Anda bisa menambahkannya ke aplikasi FastAPI anda.

Anda juga bisa menggunakan OpenAPI untuk membuat kode secara otomatis, untuk klien yang menggunakan API anda. Sebagai contoh, frontend, aplikasi mobile atau IoT.

Ringkasan, secara bertahap

Langkah 1: impor FastAPI

from fastapi import FastAPI

app = FastAPI()


@app.get("/")
async def root():
    return {"message": "Hello World"}

FastAPI adalah class Python yang menyediakan semua fungsionalitas API anda.

Detail Teknis

FastAPI adalah class turunan langsung dari Starlette.

Anda bisa menggunakan semua fungsionalitas Starlette dengan FastAPI juga.

Langkah 2: buat "instance" dari FastAPI

from fastapi import FastAPI

app = FastAPI()


@app.get("/")
async def root():
    return {"message": "Hello World"}

Di sini variabel app akan menjadi sebuah "instance" dari class FastAPI.

Ini akan menjadi gerbang utama untuk membuat semua API anda.

Langkah 3: Buat operasi path

Path

"Path" atau jalur di sini merujuk ke bagian URL terakhir dimulai dari / pertama.

Sehingga, URL seperti:

https://example.com/items/foo

...path-nya adalah:

/items/foo

Info

"path" juga biasa disebut "endpoint" atau "route".

ketika membuat API, "path" adalah jalan utama untuk memisahkan "concern" dan "resources".

Operasi

"Operasi" di sini merujuk ke salah satu dari metode HTTP berikut.

Salah satu dari:

  • POST
  • GET
  • PUT
  • DELETE

...dan operasi lainnya yang unik:

  • OPTIONS
  • HEAD
  • PATCH
  • TRACE

Dalam protokol HTTP, anda bisa berkomunikasi ke setiap path menggunakan satu (atau lebih) metode di atas.


Ketika membuat API, anda umumnya menggunakan metode HTTP tertentu untuk proses tertentu.

Umumnya menggunakan:

  • POST: untuk membuat data.
  • GET: untuk membaca data.
  • PUT: untuk memperbarui data.
  • DELETE: untuk menghapus data.

Sehingga, di OpanAPI, setiap metode HTTP ini disebut sebuah "operasi".

Kita akan menyebut mereka juga "operasi".

Mendefinisikan dekorator operasi path

from fastapi import FastAPI

app = FastAPI()


@app.get("/")
async def root():
    return {"message": "Hello World"}

@app.get("/") memberitahu FastAPI bahwa fungsi di bawahnya mengurusi request yang menuju ke:

  • path /
  • menggunakan operasi get

@decorator Info

Sintaksis @sesuatu di Python disebut "dekorator".

Dekorator ditempatkan di atas fungsi. Seperti sebuah topi cantik (Saya pikir istilah ini berasal dari situ).

"dekorator" memanggil dan bekerja dengan fungsi yang ada di bawahnya

Pada kondisi ini, dekorator ini memberi tahu FastAPI bahwa fungsi di bawah nya berhubungan dengan path / dengan operasi get.

Sehingga disebut dekorator operasi path.

Operasi lainnya yang bisa digunakan:

  • @app.post()
  • @app.put()
  • @app.delete()

Dan operasi unik lainnya:

  • @app.options()
  • @app.head()
  • @app.patch()
  • @app.trace()

Tips

Jika anda bisa menggunakan operasi apa saja (metode HTTP).

FastAPI tidak mengharuskan anda menggunakan operasi tertentu.

Informasi di sini hanyalah sebagai panduan, bukan keharusan.

Sebagai contoh, ketika menggunakan GraphQL, semua operasi umumnya hanya menggunakan POST.

Langkah 4: mendefinisikan fungsi operasi path

Ini "fungsi operasi path" kita:

  • path: adalah /.
  • operasi: adalah get.
  • fungsi: adalah fungsi yang ada di bawah dekorator (di bawah @app.get("/")).
from fastapi import FastAPI

app = FastAPI()


@app.get("/")
async def root():
    return {"message": "Hello World"}

Ini adalah fungsi Python.

Fungsi ini dipanggil FastAPI setiap kali menerima request ke URL "/" dengan operasi GET.

Di kondisi ini, ini adalah sebuah fungsi async.


Anda bisa mendefinisikan fungsi ini sebagai fungsi normal daripada async def:

from fastapi import FastAPI

app = FastAPI()


@app.get("/")
def root():
    return {"message": "Hello World"}

Catatan

Jika anda tidak tahu perbedaannya, kunjungi Async: "Panduan cepat".

Langkah 5: hasilkan konten

from fastapi import FastAPI

app = FastAPI()


@app.get("/")
async def root():
    return {"message": "Hello World"}

Anda bisa menghasilkan dict, list, nilai singular seperti str, int, dll.

Anda juga bisa menghasilkan model Pydantic (anda akan belajar mengenai ini nanti).

Ada banyak objek dan model yang secara otomatis dikonversi ke JSON (termasuk ORM, dll). Anda bisa menggunakan yang anda suka, kemungkinan sudah didukung.

Ringkasan

  • Impor FastAPI.
  • Buat sebuah instance app.
  • Tulis dekorator operasi path menggunakan dekorator seperti @app.get("/").
  • Definisikan fungsi operasi path; sebagai contoh, def root(): ....
  • Jalankan server development dengan perintah fastapi dev.