committed by
GitHub
1 changed files with 208 additions and 0 deletions
@ -0,0 +1,208 @@ |
|||
# Fitur |
|||
|
|||
## Fitur FastAPI |
|||
|
|||
**FastAPI** memberi Anda hal-hal berikut: |
|||
|
|||
### Berdasarkan standar terbuka |
|||
|
|||
* <a href="https://github.com/OAI/OpenAPI-Specification" class="external-link" target="_blank"><strong>OpenAPI</strong></a> untuk pembuatan API, termasuk deklarasi <abbr title="juga dikenal sebagai: endpoint atau route">path</abbr> <abbr title="juga dikenal sebagai Metode HTTP, seperti POST, GET, PUT, DELETE">operasi</abbr>, parameter, request body, keamanan, dll. |
|||
* Dokumentasi model data otomatis dengan <a href="https://json-schema.org/" class="external-link" target="_blank"><strong>JSON Schema</strong></a> (karena OpenAPI sendiri didasarkan pada JSON Schema). |
|||
* Dirancang berdasarkan standar-standar ini setelah studi yang cermat, bukan sebagai lapisan tambahan yang dibuat belakangan. |
|||
* Hal ini juga memungkinkan penggunaan **pembuatan kode klien** secara otomatis dalam berbagai bahasa pemrograman. |
|||
|
|||
### Dokumentasi Otomatis |
|||
|
|||
Antarmuka pengguna web untuk dokumentasi dan eksplorasi API yang interaktif. Karena framework ini didasarkan pada OpenAPI, tersedia berbagai pilihan, dengan 2 di antaranya sudah disertakan secara bawaan. |
|||
|
|||
* <a href="https://github.com/swagger-api/swagger-ui" class="external-link" target="_blank"><strong>Swagger UI</strong></a>, dengan eksplorasi interaktif, Anda bisa langsung memanggil dan menguji API dari peramban. |
|||
|
|||
 |
|||
|
|||
* Dokumentasi API alternatif dengan <a href="https://github.com/Rebilly/ReDoc" class="external-link" target="_blank"><strong>ReDoc</strong></a>. |
|||
|
|||
 |
|||
|
|||
### Hanya Python Modern |
|||
|
|||
Semuanya didasarkan pada deklarasi **tipe Python** standar (berkat Pydantic). Tidak ada sintaks baru yang perlu dipelajari. Cukup Python modern standar. |
|||
|
|||
Jika Anda membutuhkan penyegaran 2 menit tentang cara menggunakan tipe Python (bahkan jika Anda tidak menggunakan FastAPI), periksa tutorial singkat: [Python Types](python-types.md){.internal-link target=_blank}. |
|||
|
|||
Anda cukup menulis Python standar dengan tipe: |
|||
|
|||
```Python |
|||
from datetime import date |
|||
|
|||
from pydantic import BaseModel |
|||
|
|||
# Mendeklarasikan variabel sebagai string (str) |
|||
# dan mendapatkan dukungan editor di dalam fungsi tersebut |
|||
def main(user_id: str): |
|||
return user_id |
|||
|
|||
|
|||
# Sebuah model Pydantic |
|||
class User(BaseModel): |
|||
id: int |
|||
name: str |
|||
joined: date |
|||
``` |
|||
|
|||
Fungsi tersebut kemudian bisa digunakan seperti berikut: |
|||
|
|||
```Python |
|||
my_user: User = User(id=3, name="John Doe", joined="2018-07-19") |
|||
|
|||
second_user_data = { |
|||
"id": 4, |
|||
"name": "Mary", |
|||
"joined": "2018-11-30", |
|||
} |
|||
|
|||
my_second_user: User = User(**second_user_data) |
|||
``` |
|||
|
|||
/// info |
|||
|
|||
`**second_user_data` berarti: |
|||
|
|||
Ambil pasangan kunci dan nilai dari Kamus (Dicts) `second_user_data` secara langsung sebagai argumen kunci-nilai, setara dengan: `User(id=4, name="Mary", joined="2018-11-30")`. |
|||
|
|||
/// |
|||
|
|||
### Bantuan Editor |
|||
|
|||
Seluruh framework dirancang agar mudah dan intuitif untuk digunakan, semua keputusan telah diuji pada berbagai editor bahkan sebelum pengembangan dimulai, demi memastikan pengalaman pengembangan terbaik. |
|||
|
|||
Dalam survei pengembang Python, jelas bahwa <a href="https://www.jetbrains.com/research/python-developers-survey-2017/#tools-and-features" class="external-link" target="_blank"> salah satu fitur yang paling banyak digunakan adalah "pelengkapan otomatis" (autocompletion)</a>. |
|||
|
|||
Seluruh framework **FastAPI** dirancang untuk memenuhi kebutuhan tersebut. Pelengkapan otomatis berfungsi di mana pun. |
|||
|
|||
Anda akan jarang perlu kembali ke dokumentasi. |
|||
|
|||
Berikut adalah contoh bagaimana editor Anda dapat membantu Anda: |
|||
|
|||
* Di <a href="https://code.visualstudio.com/" class="external-link" target="_blank">Visual Studio Code</a>: |
|||
|
|||
 |
|||
|
|||
* Di <a href="https://www.jetbrains.com/pycharm/" class="external-link" target="_blank">PyCharm</a>: |
|||
|
|||
 |
|||
|
|||
Anda akan mendapatkan pelengkapan otomatis dalam kode yang mungkin sebelumnya Anda anggap mustahil. Contohnya, kunci `price` di dalam body JSON (yang bisa saja bersarang) yang berasal dari sebuah request. |
|||
|
|||
Tidak ada lagi kesalahan penulisan nama kunci, bolak-balik antara dokumentasi, atau scroll naik-turun untuk mencari apakah Anda pada akhirnya menggunakan `username` atau `user_name`. |
|||
|
|||
|
|||
### Ringkas |
|||
|
|||
Framework ini memiliki pengaturan **bawaan** yang masuk akal untuk segala hal, dengan konfigurasi opsional di setiap bagian. Semua parameter bisa disesuaikan dengan cermat untuk memenuhi kebutuhan Anda dan mendefinisikan API yang Anda inginkan. |
|||
|
|||
Namun secara bawaan, semuanya **berjalan begitu saja**. |
|||
|
|||
|
|||
### Validasi |
|||
|
|||
* Validasi untuk sebagian besar (atau semua?) **tipe data** Python, termasuk: |
|||
* Objek JSON (`dict`). |
|||
* Array JSON (`list`) yang mendefinisikan tipe item. |
|||
* String (`str`) field, yang mendefinisikan panjang minimal dan maksimal. |
|||
* Angka (`int`, `float`) dengan nilai minimal dan maksimal, dan lain-lain. |
|||
|
|||
* Validasi untuk tipe yang lebih kompleks, seperti: |
|||
* URL. |
|||
* Email. |
|||
* UUID. |
|||
* ...dan lainnya. |
|||
|
|||
Semua validasi ditangani oleh **Pydantic** yang sudah mapan dan tangguh. |
|||
|
|||
### Keamanan dan Otentikasi |
|||
|
|||
Keamanan dan otentikasi terintegrasi, tanpa kompromi dengan basis data atau model data apa pun. |
|||
|
|||
Semua skema keamanan yang didefinisikan dalam OpenAPI dapat didukung, termasuk: |
|||
|
|||
* HTTP Basic. |
|||
* **OAuth2** (juga dengan **JWT tokens**). Anda bisa melihat tutorial disini [OAuth2 with JWT](tutorial/security/oauth2-jwt.md){.internal-link target=_blank}. |
|||
* Kunci API di: |
|||
* Headers. |
|||
* Query parameters. |
|||
* Cookies, dll. |
|||
|
|||
Ditambah semua fitur keamanan dari Starlette (termasuk **session cookies**). |
|||
|
|||
Semua fitur ini dibangun sebagai alat dan komponen yang dapat digunakan kembali, mudah diintegrasikan dengan sistem Anda, penyimpanan data, basis data relasional, dan NoSQL, dll. |
|||
|
|||
|
|||
### Injeksi Dependensi (Dependency Injection) |
|||
|
|||
FastAPI menyertakan sistem <abbr title='juga dikenal sebagai "komponen", "resource", "service", "provider"'><strong>Injeksi Dependensi</strong></abbr> yang sangat mudah digunakan namun sangat kuat. |
|||
|
|||
* Bahkan dependensi dapat memiliki dependensi yang lain, menciptakan hierarki atau **"grafik" dependensi**. |
|||
* Semua **ditangani secara otomatis** oleh framework. |
|||
* Semua dependensi dapat meminta data dari request dan **menambah batasan operasi path** serta dokumentasi otomatis. |
|||
* **Validasi otomatis** bahkan untuk **parameter path operation** yang didefinisikan dalam dependensi. |
|||
* Dukungan untuk sistem otentikasi pengguna yang kompleks, **koneksi basis data**, dll. |
|||
* **Tidak ada kompromi** dengan basis data, frontend, dll., tetapi integrasi yang mudah dengan semuanya. |
|||
|
|||
|
|||
### "Plug-in" Tak Terbatas |
|||
|
|||
Atau dengan kata lain, tidak perlu "plug-in", cukup impor dan gunakan kode yang Anda butuhkan. |
|||
|
|||
Setiap integrasi dirancang agar sangat mudah digunakan (dengan dependensi) sehingga Anda dapat membuat "plug-in" untuk aplikasi Anda hanya dalam 2 baris kode menggunakan struktur dan sintaks yang sama dengan yang digunakan untuk **path operations** Anda. |
|||
|
|||
|
|||
### Teruji |
|||
|
|||
* 100% <abbr title="Jumlah kode yang diuji secara otomatis">cakupan pengujian</abbr>. |
|||
* 100% basis kode dengan <abbr title="Anotasi tipe Python, agar editor dan alat eksternal dapat memberikan dukungan yang lebih baik">anotasi tipe</abbr>. |
|||
* Digunakan dalam aplikasi produksi. |
|||
|
|||
|
|||
## Fitur Starlette |
|||
|
|||
**FastAPI** sepenuhnya kompatibel dengan (dan berbasis pada) <a href="https://www.starlette.io/" class="external-link" target="_blank"><strong>Starlette</strong></a>. Jadi, kode Starlette tambahan apa pun yang Anda miliki juga akan berfungsi. |
|||
|
|||
`FastAPI` sebenarnya adalah sub-kelas dari `Starlette`. Jadi, jika Anda sudah tahu atau menggunakan Starlette, sebagian besar fungsionalitasnya akan bekerja dengan cara yang sama. |
|||
|
|||
Dengan **FastAPI**, Anda mendapatkan semua fitur **Starlette** (karena FastAPI hanyalah Starlette yang lebih canggih): |
|||
|
|||
* Performa yang sangat mengesankan. Ini adalah <a href="https://github.com/encode/starlette#performance" class="external-link" target="_blank">salah satu framework Python tercepat yang tersedia, setara dengan **NodeJS** dan **Go**</a>. |
|||
* Dukungan **WebSocket**. |
|||
* Tugas latar belakang dalam proses.. |
|||
* Event startup dan shutdown. |
|||
* Klien pengujian yang dibangun di atas HTTPX. |
|||
* **CORS**, GZip, Static Files, Streaming responses. |
|||
* Dukungan **Sesi and Cookie**. |
|||
* 100% cakupan pengujian. |
|||
* 100% basis kode dengan anotasi tipe. |
|||
|
|||
|
|||
## Fitur Pydantic |
|||
|
|||
**FastAPI** sepenuhnya kompatibel dengan (dan berbasis pada) <a href="https://docs.pydantic.dev/" class="external-link" target="_blank"><strong>Pydantic</strong></a>. Jadi, kode Pydantic tambahan apa pun yang Anda miliki juga akan berfungsi. |
|||
|
|||
Termasuk pustaka eksternal yang juga berbasis Pydantic, seperti <abbr title="Object-Relational Mapper">ORM</abbr>, <abbr title="Object-Document Mapper">ODM</abbr> untuk basis data. |
|||
|
|||
Ini juga berarti bahwa dalam banyak kasus, Anda dapat meneruskan objek yang Anda dapatkan dari request **langsung ke basis data**, karena semuanya divalidasi secara otomatis. |
|||
|
|||
Hal yang sama berlaku sebaliknya, dalam banyak kasus Anda dapat langsung meneruskan objek yang Anda dapatkan dari basis data **langsung ke klien**. |
|||
|
|||
Dengan **FastAPI**, Anda mendapatkan semua fitur **Pydantic** (karena FastAPI berbasis pada Pydantic untuk semua penanganan data): |
|||
|
|||
* **Tidak membingungkan**: |
|||
* Tidak ada bahasa mikro definisi skema baru yang perlu dipelajari. |
|||
* Jika Anda tahu tipe Python, Anda tahu cara menggunakan Pydantic. |
|||
* Berfungsi dengan baik dengan **<abbr title="Integrated Development Environment, mirip dengan editor kode">IDE</abbr>/<abbr title="program yang memeriksa kesalahan kode">linter</abbr>/brain**: |
|||
* Karena struktur data Pydantic hanyalah instans dari kelas yang Anda definisikan; pelengkapan otomatis, linting, mypy, dan intuisi Anda akan berfungsi dengan baik dengan data yang telah divalidasi. |
|||
* Validasi **struktur kompleks**: |
|||
* Penggunaan model Pydantic hierarkis, `List` and `Dict` dari `typing` Python, dll. |
|||
* Dan validator memungkinkan skema data kompleks didefinisikan, diperiksa, dan didokumentasikan dengan jelas dan mudah sebagai JSON Schema. |
|||
* Anda dapat memiliki objek **JSON yang bersarang** dalam dan semuanya tervalidasi serta teranotasi. |
|||
* **Dapat diperluas**: |
|||
* Pydantic memungkinkan tipe data kustom didefinisikan atau Anda dapat memperluas validasi dengan metode pada model yang dihiasi dengan decorator validator. |
|||
* 100% cakupan pengujian. |
Loading…
Reference in new issue