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: ['/home/user/code/awesomeapp']
<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):
Dokumen API alternatif¶
Dan sekarang, kunjungi http://127.0.0.1:8000/redoc.
Anda akan melihat dokumentasi alternatif otomatis (dibuat oleh 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
.