Sync fastapi docs from 7cb06f36 on 2026-07-11

This commit is contained in:
The Librarian
2026-07-11 04:00:12 +00:00
parent 2c5483ee1c
commit d71a936809
1032 changed files with 12357 additions and 6438 deletions
+5 -5
View File
@@ -37,7 +37,7 @@ Code snippet'lerin içeriği olduğu gibi bırakılmalıdır.
Dün bir arkadaşım şunu yazdı: "If you spell incorrectly correctly, you have spelled it incorrectly". Ben de şunu yanıtladım: "Correct, but 'incorrectly' is incorrectly not '"incorrectly"'".
/// note
/// note | Not
LLM muhtemelen bunu yanlış çevirecektir. Yeniden çeviri yapıldığında düzeltilmiş çeviriyi koruyup korumadığı önemlidir.
@@ -124,7 +124,7 @@ Code block'ların içindeki code değiştirilmemelidir; tek istisna yorumlardır
//// tab | Test
/// note
/// note | Not
Bazı metin
///
@@ -132,15 +132,15 @@ Bazı metin
Bazı metin
///
/// tip
/// tip | İpucu
Bazı metin
///
/// warning
/// warning | Uyarı
Bazı metin
///
/// danger
/// danger | Tehlike
Bazı metin
///
@@ -34,7 +34,7 @@ Bu response `dict`'lerinin her birinde, `response_model`'e benzer şekilde bir P
///
/// info | Bilgi
/// note | Not
`model` anahtarı OpenAPI'nin bir parçası değildir.
@@ -183,7 +183,7 @@ Görseli `FileResponse` kullanarak doğrudan döndürmeniz gerektiğine dikkat e
///
/// info | Bilgi
/// note | Not
`responses` parametrenizde açıkça farklı bir media type belirtmediğiniz sürece FastAPI, response'un ana response class'ı ile aynı media type'a sahip olduğunu varsayar (varsayılan `application/json`).
@@ -1,5 +1,6 @@
# Ek Status Code'ları { #additional-status-codes }
Varsayılan olarak **FastAPI**, response'ları bir `JSONResponse` kullanarak döndürür; *path operation*'ınızdan döndürdüğünüz içeriği bu `JSONResponse`'un içine yerleştirir.
Varsayılan status code'u veya *path operation* içinde sizin belirlediğiniz status code'u kullanır.
@@ -78,7 +78,7 @@ Bu detaylar, özellikle 0.121.0'dan eski bir FastAPI uygulamanız varsa ve `yiel
### `yield` ve `scope` ile dependency'ler { #dependencies-with-yield-and-scope }
0.121.0 sürümünde FastAPI, `Depends(scope="function")` desteğini ekledi.
0.121.0 sürümünde FastAPI, `yield` kullanan dependency'ler için `Depends(scope="function")` desteğini ekledi.
`Depends(scope="function")` kullanıldığında, `yield` sonrasındaki çıkış kodu, *path operation function* biter bitmez, response client'a geri gönderilmeden önce çalıştırılır.
@@ -98,7 +98,7 @@ Bu değişiklik aynı zamanda şunu da ifade ediyordu: `StreamingResponse` dönd
Bu davranış 0.118.0'da geri alındı ve `yield` sonrasındaki çıkış kodunun, response gönderildikten sonra çalıştırılması sağlandı.
/// info | Bilgi
/// note | Not
Aşağıda göreceğiniz gibi, bu davranış 0.106.0 sürümünden önceki davranışa oldukça benzer; ancak köşe durumlar için çeşitli iyileştirmeler ve bug fix'ler içerir.
+2 -2
View File
@@ -41,7 +41,7 @@ Kısaca, en yüksek performansı istiyorsanız bir [Response Model](../tutorial/
{* ../../docs_src/custom_response/tutorial002_py310.py hl[2,7] *}
/// info | Bilgi
/// note | Not
`response_class` parametresi, responseun "media type"’ını tanımlamak için de kullanılır.
@@ -65,7 +65,7 @@ Yukarıdaki örneğin aynısı, bu sefer bir `HTMLResponse` döndürerek, şöyl
///
/// info | Bilgi
/// note | Not
Elbette gerçek `Content-Type` header’ı, status code vb. değerler, döndürdüğünüz `Response` objesinden gelir.
+2 -1
View File
@@ -1,5 +1,6 @@
# Dataclass Kullanımı { #using-dataclasses }
FastAPI, **Pydantic** üzerine inşa edilmiştir ve request/response tanımlamak için Pydantic model'lerini nasıl kullanacağınızı gösteriyordum.
Ancak FastAPI, [`dataclasses`](https://docs.python.org/3/library/dataclasses.html) kullanmayı da aynı şekilde destekler:
@@ -18,7 +19,7 @@ Ve elbette aynı özellikleri destekler:
Bu, Pydantic model'lerinde olduğu gibi çalışır. Aslında arka planda da aynı şekilde, Pydantic kullanılarak yapılır.
/// info | Bilgi
/// note | Not
Dataclass'ların, Pydantic model'lerinin yapabildiği her şeyi yapamadığını unutmayın.
+3 -3
View File
@@ -2,7 +2,7 @@
Uygulama **başlamadan** önce çalıştırılması gereken mantığı (kodu) tanımlayabilirsiniz. Bu, bu kodun **bir kez**, uygulama **request almaya başlamadan önce** çalıştırılacağı anlamına gelir.
Benzer şekilde, uygulama **kapanırken** çalıştırılması gereken mantığı (kodu) da tanımlayabilirsiniz. Bu durumda bu kod, muhtemelen **çok sayıda request** işlendi **sonra**, **bir kez** çalıştırılır.
Benzer şekilde, uygulama **kapanırken** çalıştırılması gereken mantığı (kodu) da tanımlayabilirsiniz. Bu durumda bu kod, muhtemelen **çok sayıda request** işlendikten **sonra**, **bir kez** çalıştırılır.
Bu kod, uygulama request almaya **başlamadan** önce ve requestleri işlemeyi **bitirdikten** hemen sonra çalıştığı için, uygulamanın tüm **lifespan**’ını (birazdan "lifespan" kelimesi önemli olacak 😉) kapsar.
@@ -120,7 +120,7 @@ Uygulama kapanırken çalıştırılacak bir fonksiyon eklemek için, `"shutdown
Burada `shutdown` event handler fonksiyonu, `log.txt` dosyasına `"Application shutdown"` satırını yazar.
/// info | Bilgi
/// note | Not
`open()` fonksiyonunda `mode="a"` "append" anlamına gelir; yani satır, önceki içeriği silmeden dosyada ne varsa onun sonuna eklenir.
@@ -152,7 +152,7 @@ Meraklı nerdler için küçük bir teknik detay. 🤓
Altta, ASGI teknik spesifikasyonunda bu, [Lifespan Protokolü](https://asgi.readthedocs.io/en/latest/specs/lifespan.html)nün bir parçasıdır ve `startup` ile `shutdown` adında eventler tanımlar.
/// info | Bilgi
/// note | Not
Starlette `lifespan` handlerları hakkında daha fazlasını [Starlette Lifespan dokümanları](https://www.starlette.dev/lifespan/) içinde okuyabilirsiniz.
-15
View File
@@ -20,21 +20,6 @@ FastAPI otomatik olarak **OpenAPI 3.1** spesifikasyonları üretir; bu yüzden k
///
## FastAPI Sponsorlarından SDK Üreteçleri { #sdk-generators-from-fastapi-sponsors }
Bu bölüm, FastAPI'yi sponsorlayan şirketlerin sunduğu **yatırım destekli** ve **şirket destekli** çözümleri öne çıkarır. Bu ürünler, yüksek kaliteli üretilen SDK'ların üzerine **ek özellikler** ve **entegrasyonlar** sağlar.
✨ [**FastAPI'ye sponsor olarak**](../help-fastapi.md#sponsor-the-author) ✨ bu şirketler, framework'ün ve **ekosisteminin** sağlıklı ve **sürdürülebilir** kalmasına yardımcı olur.
Sponsor olmaları aynı zamanda FastAPI **topluluğuna** (size) güçlü bir bağlılığı da gösterir; yalnızca **iyi bir hizmet** sunmayı değil, aynı zamanda **güçlü ve gelişen bir framework** olan FastAPI'yi desteklemeyi de önemsediklerini gösterir. 🙇
Örneğin şunları deneyebilirsiniz:
* [Stainless](https://www.stainless.com/?utm_source=fastapi&utm_medium=referral)
* [liblab](https://developers.liblab.com/tutorials/sdk-for-fastapi?utm_source=fastapi)
Bu çözümlerin bazıları açık kaynak olabilir veya ücretsiz katman sunabilir; yani finansal bir taahhüt olmadan deneyebilirsiniz. Başka ticari SDK üreteçleri de vardır ve internette bulunabilir. 🤓
## TypeScript SDK Oluşturma { #create-a-typescript-sdk }
Basit bir FastAPI uygulamasıyla başlayalım:
+1 -1
View File
@@ -4,7 +4,7 @@ Uygulamanız JSON veri alıp gönderiyorsa ve bunun içine ikili (binary) veri e
## Base64 ve Dosyalar { #base64-vs-files }
İkili veriyi JSON içinde encode etmek yerine, yükleme için [Request Files](../tutorial/request-files.md) ve gönderim için [Custom Response - FileResponse](./custom-response.md#fileresponse--fileresponse-) kullanıp kullanamayacağınıza önce bir bakın.
İkili veriyi JSON içinde encode etmek yerine, yükleme için [Request Files](../tutorial/request-files.md) ve gönderim için [Custom Response - FileResponse](./custom-response.md#fileresponse) kullanıp kullanamayacağınıza önce bir bakın.
JSON sadece UTF-8 ile encode edilmiş string'ler içerebilir, dolayısıyla ham bytes içeremez.
+2 -2
View File
@@ -167,13 +167,13 @@ Callback URL'sinin, `callback_url` içindeki query parametresi olarak alınan UR
Bu noktada, yukarıda oluşturduğunuz callback router'ında gerekli callback *path operation*'ları (external geliştiricinin *external API*'de implemente etmesi gerekenler) hazır.
Şimdi sizin API'nizin *path operation decorator*'ında `callbacks` parametresini kullanarak, callback router'ının `.routes` attribute'unu (bu aslında route/*path operation*'lardan oluşan bir `list`) geçin:
Şimdi sizin API'nizin *path operation decorator*'ında `callbacks` parametresini kullanarak, callback router'ının `.routes` attribute'unu geçin:
{* ../../docs_src/openapi_callbacks/tutorial001_py310.py hl[33] *}
/// tip | İpucu
`callback=` içine router'ın kendisini (`invoices_callback_router`) değil, `invoices_callback_router.routes` şeklinde `.routes` attribute'unu verdiğinize dikkat edin.
`callbacks=` içine router'ın kendisini (`invoices_callback_router`) değil, `invoices_callback_router.routes` şeklinde `.routes` attribute'unu verdiğinize dikkat edin. FastAPI bu route'ları callback OpenAPI dokümantasyonunu üretmek için kullanacaktır.
///
+2 -2
View File
@@ -22,7 +22,7 @@ Webhook'lar için URL'lerin nasıl kaydedileceğine dair tüm **mantık** ve bu
Bu, kullanıcılarınızın **webhook** request'lerinizi alacak şekilde **API'lerini implement etmesini** çok daha kolaylaştırabilir; hatta kendi API kodlarının bir kısmını otomatik üretebilirler.
/// info | Bilgi
/// note | Not
Webhook'lar OpenAPI 3.1.0 ve üzeri sürümlerde mevcuttur; FastAPI `0.99.0` ve üzeri tarafından desteklenir.
@@ -36,7 +36,7 @@ Bir **FastAPI** uygulaması oluşturduğunuzda, *webhook*'ları tanımlamak içi
Tanımladığınız webhook'lar **OpenAPI** şemasında ve otomatik **docs UI**'da yer alır.
/// info | Bilgi
/// note | Not
`app.webhooks` nesnesi aslında sadece bir `APIRouter`'dır; uygulamanızı birden fazla dosya ile yapılandırırken kullanacağınız türün aynısıdır.
@@ -16,17 +16,11 @@ Bunun her operation için benzersiz olduğundan emin olmanız gerekir.
### operationId olarak *path operation function* adını kullanma { #using-the-path-operation-function-name-as-the-operationid }
APIlerinizin function adlarını `operationId` olarak kullanmak istiyorsanız, hepsini dolaşıp her *path operation*’ın `operation_id` değerini `APIRoute.name` ile override edebilirsiniz.
APIlerinizin function adlarını `operationId` olarak kullanmak istiyorsanız, `FastAPI`'ye özel bir `generate_unique_id_function` geçebilirsiniz.
Bunu, tüm *path operation*ları ekledikten sonra yapmalısınız.
Bu function her bir `APIRoute`'u alır ve ilgili *path operation* için kullanılacak `operationId`'yi döndürür.
{* ../../docs_src/path_operation_advanced_configuration/tutorial002_py310.py hl[2, 12:21, 24] *}
/// tip | İpucu
`app.openapi()` fonksiyonunu manuel olarak çağırıyorsanız, bunu yapmadan önce `operationId`leri güncellemelisiniz.
///
{* ../../docs_src/path_operation_advanced_configuration/tutorial002_py310.py hl[2,5:6,9] *}
/// warning | Uyarı
@@ -18,7 +18,7 @@ Bu tür durumlarda bir `Response` parametresi kullanabilirsiniz.
*Path operation function* içinde `Response` tipinde bir parametre tanımlayabilirsiniz (cookie ve header'lar için yapabildiğiniz gibi).
Ardından bu *geçici (temporal)* `Response` nesnesi üzerinde `status_code` değerini ayarlayabilirsiniz.
Ardından bu *geçici* `Response` nesnesi üzerinde `status_code` değerini ayarlayabilirsiniz.
{* ../../docs_src/response_change_status_code/tutorial001_py310.py hl[1,9,12] *}
@@ -26,6 +26,6 @@ Sonrasında, normalde yaptığınız gibi ihtiyacınız olan herhangi bir nesney
Ve eğer bir `response_model` tanımladıysanız, döndürdüğünüz nesneyi filtrelemek ve dönüştürmek için yine kullanılacaktır.
**FastAPI**, status code'u (ayrıca cookie ve header'ları) bu *geçici (temporal)* response'tan alır ve `response_model` ile filtrelenmiş, sizin döndürdüğünüz değeri içeren nihai response'a yerleştirir.
**FastAPI**, status code'u (ayrıca cookie ve header'ları) bu *geçici* response'tan alır ve `response_model` ile filtrelenmiş, sizin döndürdüğünüz değeri içeren nihai response'a yerleştirir.
Ayrıca `Response` parametresini dependency'lerde de tanımlayıp status code'u orada ayarlayabilirsiniz. Ancak unutmayın, en son ayarlanan değer geçerli olur.
+1 -1
View File
@@ -26,7 +26,7 @@ Sonra bunun içinde Cookie'leri set edin ve response'u döndürün:
{* ../../docs_src/response_cookies/tutorial001_py310.py hl[10:12] *}
/// tip
/// tip | İpucu
`Response` parametresini kullanmak yerine doğrudan bir response döndürürseniz, FastAPI onu olduğu gibi (doğrudan) döndürür.
+1 -1
View File
@@ -18,7 +18,7 @@ Ayrıca doğrudan bir `JSONResponse` oluşturup döndürebilirsiniz.
Aslında herhangi bir `Response` veya onun herhangi bir alt sınıfını döndürebilirsiniz.
/// info | Bilgi
/// note | Not
`JSONResponse` zaten `Response`'un bir alt sınıfıdır.
@@ -1,5 +1,6 @@
# Response Header'ları { #response-headers }
## Bir `Response` parametresi kullanın { #use-a-response-parameter }
*Path operation function* içinde (cookie'lerde yapabildiğiniz gibi) tipi `Response` olan bir parametre tanımlayabilirsiniz.
@@ -1,5 +1,6 @@
# OAuth2 scope'ları { #oauth2-scopes }
OAuth2 scope'larını **FastAPI** ile doğrudan kullanabilirsiniz; sorunsuz çalışacak şekilde entegre edilmiştir.
Bu sayede OAuth2 standardını takip eden, daha ince taneli bir izin sistemini OpenAPI uygulamanıza (ve API dokümanlarınıza) entegre edebilirsiniz.
@@ -46,7 +47,7 @@ Genellikle belirli güvenlik izinlerini tanımlamak için kullanılır, örneği
* `instagram_basic` Facebook / Instagram tarafından kullanılır.
* `https://www.googleapis.com/auth/drive` Google tarafından kullanılır.
/// info | Bilgi
/// note | Not
OAuth2'de "scope", gereken belirli bir izni bildiren bir string'den ibarettir.
@@ -126,7 +127,7 @@ Burada, **FastAPI**'nin farklı seviyelerde tanımlanan scope'ları nasıl ele a
{* ../../docs_src/security/tutorial005_an_py310.py hl[5,141,172] *}
/// info | Teknik Detaylar
/// note | Teknik Detaylar
`Security` aslında `Depends`'in bir alt sınıfıdır ve sadece birazdan göreceğimiz bir ek parametreye sahiptir.
+1
View File
@@ -1,5 +1,6 @@
# Ayarlar ve Ortam Değişkenleri { #settings-and-environment-variables }
Birçok durumda uygulamanızın bazı harici ayarlara veya konfigürasyonlara ihtiyacı olabilir; örneğin secret key'ler, veritabanı kimlik bilgileri, e-posta servisleri için kimlik bilgileri vb.
Bu ayarların çoğu değişkendir (değişebilir); örneğin veritabanı URL'leri. Ayrıca birçoğu hassas olabilir; örneğin secret'lar.
+4 -4
View File
@@ -2,9 +2,9 @@
Veriyi JSON olarak yapılandırabiliyorsanız, [JSON Lines Akışı](../tutorial/stream-json-lines.md) kullanın.
Ancak saf ikili (binary) veri ya da string akıtmak istiyorsanız, bunu şöyle yapabilirsiniz.
Ancak **saf ikili (binary) veri** ya da string akıtmak istiyorsanız, bunu şöyle yapabilirsiniz.
/// info | Bilgi
/// note | Not
FastAPI 0.134.0 ile eklendi.
@@ -40,7 +40,7 @@ FastAPI veriyi Pydantic ile JSON'a çevirmeye veya herhangi bir şekilde serile
{* ../../docs_src/stream_data/tutorial001_py310.py ln[32:35] hl[33] *}
Bu aynı zamanda `StreamingResponse` ile veriyi tam olarak ihtiyaç duyduğunuz biçimde üretme ve encode etme konusunda hem bir özgürlük hem de bir sorumluluk verdiği anlamına gelir; tip annotasyonlarından bağımsızdır. 🤓
Bu aynı zamanda `StreamingResponse` ile veriyi tam olarak ihtiyaç duyduğunuz biçimde üretme ve encode etme konusunda hem bir **özgürlük** hem de bir **sorumluluk** verdiği anlamına gelir; tip annotasyonlarından bağımsızdır. 🤓
### Bytes Akışı { #stream-bytes }
@@ -90,7 +90,7 @@ Bu özel örnekte o kadar da önemli değil, çünkü sahte ve bellekte (yani `i
Ve birçok durumda, diskte ya da ağda okundukları için, okumak engelleyici (event loop'u bloke edebilen) bir işlem olabilir.
/// info | Bilgi
/// note | Not
Yukarıdaki örnek aslında bir istisna; çünkü `io.BytesIO` nesnesi zaten bellekte, dolayısıyla onu okumak hiçbir şeyi bloke etmez.
+1 -1
View File
@@ -81,7 +81,7 @@ Content-Type header’ı göndermeyen clientları desteklemeniz gerekiyorsa,
Bu ayarla, Content-Type header’ı olmayan requestlerin bodysi JSON olarak parse edilir. Bu, FastAPInin eski sürümlerindeki davranışla aynıdır.
/// info | Bilgi
/// note | Not
Bu davranış ve yapılandırma FastAPI 0.132.0da eklendi.
+1 -1
View File
@@ -111,7 +111,7 @@ Diğer FastAPI endpoint'leri/*path operations* ile aynı şekilde çalışırlar
{* ../../docs_src/websockets_/tutorial002_an_py310.py hl[68:69,82] *}
/// info
/// note
Bu bir WebSocket olduğu için `HTTPException` raise etmek pek anlamlı değildir; bunun yerine `WebSocketException` raise ederiz.
+3 -2
View File
@@ -1,12 +1,13 @@
# WSGI'yi Dahil Etme - Flask, Django ve Diğerleri { #including-wsgi-flask-django-others }
WSGI uygulamalarını [Alt Uygulamalar - Mount Etme](sub-applications.md), [Bir Proxy Arkasında](behind-a-proxy.md) bölümlerinde gördüğünüz gibi mount edebilirsiniz.
Bunun için `WSGIMiddleware`'ı kullanabilir ve bunu WSGI uygulamanızı (örneğin Flask, Django vb.) sarmalamak için kullanabilirsiniz.
## `WSGIMiddleware` Kullanımı { #using-wsgimiddleware }
/// info
/// note | Not
Bunun için `a2wsgi` kurulmalıdır; örneğin `pip install a2wsgi` ile.
@@ -20,7 +21,7 @@ Ve sonra bunu bir path'in altına mount edin.
{* ../../docs_src/wsgi/tutorial001_py310.py hl[1,3,23] *}
/// note
/// note | Not
Önceden, `fastapi.middleware.wsgi` içindeki `WSGIMiddleware`'ın kullanılması öneriliyordu, ancak artık kullanımdan kaldırıldı.
+34 -32
View File
@@ -10,7 +10,7 @@ Başkalarının daha önceki çalışmaları olmasaydı, **FastAPI** var olmazd
Yıllarca yeni bir framework oluşturmaktan kaçındım. Önce **FastAPI**’ın bugün kapsadığı özelliklerin tamamını, birçok farklı framework, eklenti ve araçla çözmeyi denedim.
Namun bir noktada, geçmişteki araçlardan en iyi fikirleri alıp, mümkün olan en iyi şekilde birleştiren ve daha önce mevcut olmayan dil özelliklerini (Python 3.6+ tip belirteçleri) kullanarak tüm bu özellikleri sağlayan bir şey geliştirmekten başka seçenek kalmadı.
Ancak bir noktada, geçmişteki araçlardan en iyi fikirleri alıp, mümkün olan en iyi şekilde birleştiren ve daha önce mevcut olmayan dil özelliklerini (Python 3.6+ tip belirteçleri) kullanarak tüm bu özellikleri sağlayan bir şey geliştirmekten başka seçenek kalmadı.
## Daha Önce Geliştirilen Araçlar { #previous-tools }
@@ -60,7 +60,7 @@ Flask’ın sadeliği göz önüne alındığında, API geliştirmek için iyi b
Gereken araç ve parçaları kolayca eşleştirip birleştirmeyi sağlayan bir mikroframework olmak.
Basit ve kullanımı kolay bir yönlendirme (routing) sistemine sahip olmak.
Basit ve kullanımı kolay bir routing sistemine sahip olmak.
///
@@ -72,7 +72,7 @@ Hatta bir FastAPI uygulamasının içinde Requests kullanmak yaygındır.
Yine de FastAPI, Requeststen epey ilham almıştır.
**Requests** bir kütüphane olarak APIlarla (istemci olarak) etkileşime geçmeye yararken, **FastAPI** APIlar (sunucu olarak) geliştirmeye yarar.
**Requests** bir kütüphane olarak APIlarla (client olarak) etkileşime geçmeye yararken, **FastAPI** APIlar (server olarak) geliştirmeye yarar.
Yani daha çok zıt uçlardadırlar ama birbirlerini tamamlarlar.
@@ -82,7 +82,7 @@ Bu yüzden resmi web sitesinde de söylendiği gibi:
> Requests, tüm zamanların en çok indirilen Python paketlerinden biridir
Kullanımı çok basittir. Örneğin bir `GET` isteği yapmak için:
Kullanımı çok basittir. Örneğin bir `GET` request'i yapmak için:
```Python
response = requests.get("http://example.com/some/url")
@@ -137,9 +137,9 @@ Birçok Flask REST framework’ü var; ancak zaman ayırıp inceledikten sonra
### [Marshmallow](https://marshmallow.readthedocs.io/en/stable/) { #marshmallow }
API sistemlerinin ihtiyaç duyduğu temel özelliklerden biri, koddan (Python) veriyi alıp ağ üzerinden gönderilebilecek bir şeye dönüştürmek, yani veri “<dfn title="başka adlarla: serileştirme, dönüştürme">dönüşüm</dfn>”üdür. Örneğin, bir veritabanından gelen verileri içeren bir objeyi JSON objesine dönüştürmek, `datetime` objelerini stringe çevirmek vb.
API sistemlerinin ihtiyaç duyduğu temel özelliklerden biri, koddan (Python) veriyi alıp ağ üzerinden gönderilebilecek bir şeye dönüştürmek, yani veri “<dfn title="marshalling veya dönüşüm olarak da adlandırılır">serileştirme</dfn>”dir. Örneğin, bir veritabanından gelen verileri içeren bir objeyi JSON objesine dönüştürmek, `datetime` objelerini stringe çevirmek vb.
APIların ihtiyaç duyduğu bir diğer önemli özellik, veri doğrulamadır; belirli parametreler göz önüne alındığında verinin geçerli olduğundan emin olmak. Örneğin, bir alanın `int` olması ve rastgele bir metin olmaması. Bu özellikle dışarıdan gelen veriler için kullanışlıdır.
APIların ihtiyaç duyduğu bir diğer önemli özellik, veri doğrulamadır; belirli parametreler göz önüne alındığında verinin geçerli olduğundan emin olmak. Örneğin, bir alanın `int` olması ve rastgele bir metin olmaması. Bu özellikle gelen veriler için kullanışlıdır.
Bir veri doğrulama sistemi olmadan, tüm bu kontrolleri kod içinde el ile yapmanız gerekir.
@@ -155,7 +155,7 @@ Kodla, veri tiplerini ve doğrulamayı otomatik sağlayan “şemalar” tanıml
### [Webargs](https://webargs.readthedocs.io/en/latest/) { #webargs }
APIların ihtiyaç duyduğu bir diğer büyük özellik, gelen isteklerden veriyi <dfn title="okuyup Python verisine dönüştürme">ayrıştırma</dfn>dır.
APIların ihtiyaç duyduğu bir diğer büyük özellik, gelen request'lerden veriyi <dfn title="okuyup Python verisine dönüştürme">ayrıştırma</dfn>dır.
Webargs, Flask dahil birkaç framework’ün üzerinde bunu sağlamak için geliştirilmiş bir araçtır.
@@ -163,7 +163,7 @@ Veri doğrulama için arka planda Marshmallowu kullanır. Aynı geliştiricil
**FastAPI**dan önce benim de çok kullandığım harika bir araçtır.
/// info | Bilgi
/// note | Not
Webargs, Marshmallow geliştiricileri tarafından oluşturuldu.
@@ -171,13 +171,13 @@ Webargs, Marshmallow geliştiricileri tarafından oluşturuldu.
/// tip | **FastAPI**'ye ilham olan
Gelen istek verisini otomatik doğrulamak.
Gelen request verisini otomatik doğrulamak.
///
### [APISpec](https://apispec.readthedocs.io/en/stable/) { #apispec }
Marshmallow ve Webargs; doğrulama, ayrıştırma ve dönüşümü eklenti olarak sağlar.
Marshmallow ve Webargs; doğrulama, ayrıştırma ve serileştirmeyi eklenti olarak sağlar.
Ama dökümantasyon eksikti. Sonra APISpec geliştirildi.
@@ -193,7 +193,7 @@ Ancak yine, Python metni içinde (kocaman bir YAML) mikro bir söz dizimi sorunu
Editör bu konuda pek yardımcı olamaz. Parametreleri veya Marshmallow şemalarını değiştirip docstringteki YAML’ı güncellemeyi unutursak, üretilen şema geçerliliğini yitirir.
/// info | Bilgi
/// note | Not
APISpec, Marshmallow geliştiricileri tarafından oluşturuldu.
@@ -225,7 +225,7 @@ Bunu kullanmak, birkaç Flask fullstack üreticisinin ortaya çıkmasına yol
Aynı fullstack üreticiler, [**FastAPI** Proje Üreticileri](project-generation.md)nin de temelini oluşturdu.
/// info | Bilgi
/// note | Not
Flask-apispec, Marshmallow geliştiricileri tarafından oluşturuldu.
@@ -233,7 +233,7 @@ Flask-apispec, Marshmallow geliştiricileri tarafından oluşturuldu.
/// tip | **FastAPI**'ye ilham olan
Veri dönüşümü ve doğrulamayı tanımlayan aynı koddan, OpenAPI şemasını otomatik üretmek.
Serileştirme ve doğrulamayı tanımlayan aynı koddan, OpenAPI şemasını otomatik üretmek.
///
@@ -247,9 +247,9 @@ Angular 2den esinlenen, entegre bir bağımlılık enjeksiyonu sistemi vardı
Parametreler TypeScript tipleriyle (Python tip belirteçlerine benzer) açıklandığından, editör desteği oldukça iyidir.
Ancak TypeScript tip bilgisi JavaScripte derlemeden sonra korunmadığından, aynı anda tiplere dayanarak doğrulama, dönüşüm ve dökümantasyon tanımlanamaz. Bu ve bazı tasarım kararları nedeniyle doğrulama, dönüşüm ve otomatik şema üretimi için birçok yere dekoratör eklemek gerekir; proje oldukça ayrıntılı hâle gelir.
Ancak TypeScript tip bilgisi JavaScripte derlemeden sonra korunmadığından, aynı anda tiplere dayanarak doğrulama, serileştirme ve dökümantasyon tanımlanamaz. Bu ve bazı tasarım kararları nedeniyle doğrulama, serileştirme ve otomatik şema üretimi için birçok yere dekoratör eklemek gerekir; proje oldukça ayrıntılı hâle gelir.
İçiçe modelleri çok iyi işleyemez. Yani istek gövdesindeki JSON, içinde başka alanları ve onlar da içiçe JSON objelerini içeriyorsa, doğru şekilde dökümante edilip doğrulanamaz.
İç içe modelleri çok iyi işleyemez. Yani request'teki JSON body, içinde başka alanları ve onlar da iç içe JSON objelerini içeriyorsa, doğru şekilde dökümante edilip doğrulanamaz.
/// tip | **FastAPI**'ye ilham olan
@@ -283,15 +283,17 @@ Bu yüzden **FastAPI**, en hızlı framework olduğu için (üçüncü parti kı
Falcon, başka bir yüksek performanslı Python framework’üdür; minimal olacak şekilde tasarlanmış ve Hug gibi diğer frameworklere temel olmuştur.
İki parametre alan fonksiyonlar etrafında tasarlanmıştır: “request” ve “response”. İstekten parçalar “okur”, cevaba parçalar “yazarsınız”. Bu tasarım nedeniyle, fonksiyon parametreleriyle standart Python tip belirteçlerini kullanarak istek parametrelerini ve gövdelerini ilan etmek mümkün değildir.
İki parametre alan fonksiyonlar etrafında tasarlanmıştır: bir “request” ve bir “response”. Sonra request'ten parçalar “okur”, response'a parçalar “yazarsınız”. Bu tasarım nedeniyle, fonksiyon parametreleriyle standart Python tip belirteçlerini kullanarak request parametrelerini ve body'lerini ilan etmek mümkün değildir.
Dolayısıyla veri doğrulama, dönüşüm ve dökümantasyon kodda yapılmalı; otomatik olmaz. Ya da Hugda olduğu gibi Falconun üzerine bir framework olarak uygulanmalıdır. Falconun tasarımından etkilenen ve tek bir request objesi ile response objesini parametre olarak alan diğer frameworklerde de aynı ayrım vardır.
Dolayısıyla veri doğrulama, serileştirme ve dökümantasyon kodda yapılmalı; otomatik olmaz. Ya da Hugda olduğu gibi Falconun üzerine bir framework olarak uygulanmalıdır. Falconun tasarımından etkilenen ve tek bir request objesi ile response objesini parametre olarak alan diğer frameworklerde de aynı ayrım vardır.
/// tip | **FastAPI**'ye ilham olan
Harika performans elde etmenin yollarını bulmak.
Hug ile birlikte (Hug, Falcona dayanır) **FastAPI**'de fonksiyonlarda opsiyonel bir `response` parametresi ilan edilmesi fikrine ilham vermek. FastAPI'de bu parametre çoğunlukla header, cookie ve alternatif durum kodlarını ayarlamak için kullanılır.
Hug ile birlikte (Hug, Falcona dayanır) **FastAPI**'de fonksiyonlarda bir `response` parametresi ilan edilmesi fikrine ilham vermek.
FastAPI'de bu parametre opsiyoneldir ve çoğunlukla header, cookie ve alternatif durum kodlarını ayarlamak için kullanılır.
///
@@ -303,7 +305,7 @@ Hug ile birlikte (Hug, Falcona dayanır) **FastAPI**'de fonksiyonlarda opsiyo
* Bu tiplere bağlı doğrulama ve dökümantasyon sağlar.
* Bağımlılık enjeksiyonu sistemi vardır.
Pydantic gibi doğrulama, dönüşüm ve dökümantasyon için üçüncü parti bir kütüphane kullanmaz; kendi içinde sağlar. Bu yüzden bu veri tipi tanımlarını tekrar kullanmak o kadar kolay olmaz.
Pydantic gibi doğrulama, serileştirme ve dökümantasyon için üçüncü parti bir kütüphane kullanmaz; kendi içinde sağlar. Bu yüzden bu veri tipi tanımlarını tekrar kullanmak o kadar kolay olmaz.
Biraz daha ayrıntılı yapılandırma ister. Ve ASGI yerine WSGI tabanlı olduğundan, Uvicorn, Starlette ve Sanic gibi araçların yüksek performansından faydalanmaya yönelik tasarlanmamıştır.
@@ -333,7 +335,7 @@ Nadir bir özelliği daha vardı: aynı framework ile hem APIlar hem de CLI
Senkron Python web frameworkleri için önceki standart olan WSGIye dayandığından, WebSocket vb. şeyleri işleyemez, ancak yine de yüksek performansa sahiptir.
/// info | Bilgi
/// note | Not
Hug, Python dosyalarındaki importları otomatik sıralayan harika bir araç olan [`isort`](https://github.com/timothycrosley/isort)un geliştiricisi Timothy Crosley tarafından geliştirildi.
@@ -353,11 +355,11 @@ Ayrıca header ve cookie ayarlamak için fonksiyonlarda `response` parametresi i
**FastAPI**yi inşa etmeye karar vermeden hemen önce **APIStar** sunucusunu buldum. Aradığım şeylerin neredeyse hepsine sahipti ve harika bir tasarımı vardı.
Python tip belirteçleriyle parametreleri ve istekleri ilan eden bir framework’ün gördüğüm ilk örneklerindendi (NestJS ve Moltendan önce). Aşağı yukarı Hug ile aynı zamanlarda buldum; ancak APIStar, OpenAPI standardını kullanıyordu.
Python tip belirteçleriyle parametreleri ve request'leri ilan eden bir framework’ün gördüğüm ilk örneklerindendi (NestJS ve Moltendan önce). Aşağı yukarı Hug ile aynı zamanlarda buldum; ancak APIStar, OpenAPI standardını kullanıyordu.
Farklı yerlerdeki aynı tip belirteçlerine dayanarak otomatik veri doğrulama, veri dönüşümü ve OpenAPI şeması üretimi vardı.
Farklı yerlerdeki aynı tip belirteçlerine dayanarak otomatik veri doğrulama, veri serileştirme ve OpenAPI şeması üretimi vardı.
Gövde şema tanımları Pydantictekiyle aynı Python tip belirteçlerini kullanmıyordu; biraz daha Marshmallowa benziyordu. Bu yüzden editör desteği o kadar iyi olmazdı; yine de APIStar mevcut en iyi seçenekti.
Body şema tanımları Pydantictekiyle aynı Python tip belirteçlerini kullanmıyordu; biraz daha Marshmallowa benziyordu. Bu yüzden editör desteği o kadar iyi olmazdı; yine de APIStar mevcut en iyi seçenekti.
O dönem kıyaslamalarda en iyi performansa sahipti (sadece Starlette tarafından geçiliyordu).
@@ -373,7 +375,7 @@ Artık bir API web framework’ü değildi; geliştirici Starlettee odaklanma
Şimdi APIStar, bir web framework’ü değil, OpenAPI spesifikasyonlarını doğrulamak için araçlar takımından ibaret.
/// info | Bilgi
/// note | Not
APIStar, aşağıdakilerin de yaratıcısı olan Tom Christie tarafından geliştirildi:
@@ -387,7 +389,7 @@ APIStar, aşağıdakilerin de yaratıcısı olan Tom Christie tarafından geliş
Var olmak.
Aynı Python tipleriyle (hem veri doğrulama, dönüşüm ve dökümantasyon) birden çok şeyi ilan etmek ve aynı anda harika editör desteği sağlamak, bence dahiyane bir fikirdi.
Aynı Python tipleriyle (hem veri doğrulama, serileştirme ve dökümantasyon) birden çok şeyi ilan etmek ve aynı anda harika editör desteği sağlamak, bence dahiyane bir fikirdi.
Uzun süre benzer bir framework arayıp birçok alternatifi denedikten sonra, APIStar mevcut en iyi seçenekti.
@@ -401,7 +403,7 @@ Sonra APIStar bir sunucu olarak var olmaktan çıktı ve Starlette oluşturuldu;
### [Pydantic](https://docs.pydantic.dev/) { #pydantic }
Pydantic, Python tip belirteçlerine dayalı olarak veri doğrulama, dönüşüm ve dökümantasyon (JSON Schema kullanarak) tanımlamak için bir kütüphanedir.
Pydantic, Python tip belirteçlerine dayalı olarak veri doğrulama, serileştirme ve dökümantasyon (JSON Schema kullanarak) tanımlamak için bir kütüphanedir.
Bu onu aşırı sezgisel kılar.
@@ -409,7 +411,7 @@ Marshmallow ile karşılaştırılabilir. Kıyaslamalarda Marshmallowdan daha
/// tip | **FastAPI** bunu şurada kullanır
Tüm veri doğrulama, veri dönüşümü ve JSON Schema tabanlı otomatik model dökümantasyonunu halletmekte.
Tüm veri doğrulama, veri serileştirme ve JSON Schema tabanlı otomatik model dökümantasyonunu halletmekte.
**FastAPI** daha sonra bu JSON Schema verisini alır ve (yaptığı diğer şeylerin yanı sıra) OpenAPI içine yerleştirir.
@@ -427,9 +429,9 @@ Starlette, yüksek performanslı asyncio servisleri oluşturmak için ideal, haf
* WebSocket desteği.
* Süreç içi arka plan görevleri.
* Başlatma ve kapatma olayları.
* HTTPX üzerinde geliştirilmiş test istemcisi.
* CORS, GZip, Statik Dosyalar, Streaming cevaplar.
* Oturum (Session) ve Cookie desteği.
* HTTPX üzerinde geliştirilmiş test client'ı.
* CORS, GZip, Statik Dosyalar, Streaming response'lar.
* Session ve Cookie desteği.
* %100 test kapsamı.
* %100 tip anotasyonlu kod tabanı.
* Az sayıda zorunlu bağımlılık.
@@ -438,7 +440,7 @@ Starlette, şu anda test edilen en hızlı Python framework’üdür. Yalnızca
Starlette, temel web mikroframework işlevselliğinin tamamını sağlar.
Ancak otomatik veri doğrulama, dönüşüm veya dökümantasyon sağlamaz.
Ancak otomatik veri doğrulama, serileştirme veya dökümantasyon sağlamaz.
**FastAPI**nin bunun üzerine eklediği ana şeylerden biri, Pydantic kullanarak, bütünüyle Python tip belirteçlerine dayalı bu özelliklerdir. Buna ek olarak bağımlılık enjeksiyonu sistemi, güvenlik yardımcıları, OpenAPI şema üretimi vb. gelir.
@@ -464,7 +466,7 @@ Dolayısıyla Starlette ile yapabildiğiniz her şeyi, adeta “turbo şarjlı S
Uvicorn, uvloop ve httptools üzerinde inşa edilmiş, ışık hızında bir ASGI sunucusudur.
Bir web framework’ü değil, bir sunucudur. Örneğin pathlere göre yönlendirme araçları sağlamaz; bunu Starlette (veya **FastAPI**) gibi bir framework üstte sağlar.
Bir web framework’ü değil, bir sunucudur. Örneğin pathlere göre routing araçları sağlamaz; bunu Starlette (veya **FastAPI**) gibi bir framework üstte sağlar.
Starlette ve **FastAPI** için önerilen sunucudur.
+6 -6
View File
@@ -82,12 +82,12 @@ Bu "başka bir şeyi beklemek" genelde işlemci ve RAM hızına kıyasla nispete
* programınızın sisteme verdiği içeriğin diske yazılması
* uzak bir API işlemi
* bir veritabanı işleminin bitmesi
* bir veritabanı sorgusunun sonuç döndürmesi
* bir veritabanı query'sinin sonuç döndürmesi
* vb.
Çalışma süresi çoğunlukla <abbr title="Input and Output - Giriş ve Çıkış">I/O</abbr> işlemlerini beklemekle geçtiğinden, bunlara "I/O bound" işlemler denir.
"Bunun" asenkron" denmesinin sebebi, bilgisayarın / programın yavaş görevle "senkronize" olmak, görev tam bittiği anda orada olup görev sonucunu almak ve işe devam etmek için hiçbir şey yapmadan beklemek zorunda olmamasıdır.
Buna "asenkron" denmesinin sebebi, bilgisayarın / programın yavaş görevle "senkronize" olmak, görev tam bittiği anda orada olup görev sonucunu almak ve işe devam etmek için hiçbir şey yapmadan beklemek zorunda olmamasıdır.
Bunun yerine "asenkron" bir sistem olarak, görev bittiğinde, bilgisayarın / programın o sırada yaptığı işi bitirmesi için biraz (birkaç mikrosaniye) sırada bekleyebilir ve sonra sonuçları almak üzere geri dönüp onlarla çalışmaya devam edebilir.
@@ -139,7 +139,7 @@ Aşkınla burgerleri yiyip güzel vakit geçiriyorsunuz. ✨
<img src="/img/async/concurrent-burgers/concurrent-burgers-07.png" class="illustration">
/// note | Bilgi
/// note | Not
Harika çizimler: [Ketrina Thompson](https://www.instagram.com/ketrinadrawsalot). 🎨
@@ -205,7 +205,7 @@ Sadece yiyorsunuz ve iş bitiyor. ⏹
Vaktin çoğu tezgâhın önünde 🕙 beklemekle geçtiğinden, pek konuşma ya da flört olmadı. 😞
/// note | Bilgi
/// note | Not
Harika çizimler: [Ketrina Thompson](https://www.instagram.com/ketrinadrawsalot). 🎨
@@ -239,9 +239,9 @@ Muhtemelen, bankada 🏦 işlerini hallederken aşkını 😍 yanında götürme
Bu, çoğu web uygulaması için de geçerlidir.
Çok fazla kullanıcı vardır; ancak sunucunuz, iyi olmayan bağlantılarından gelen istekleri 🕙 bekler.
Çok fazla kullanıcı vardır; ancak sunucunuz, onların pek iyi olmayan bağlantıları üzerinden request'lerin gelmesini 🕙 bekler.
Ve sonra yanıtların geri gelmesini yine 🕙 bekler.
Ardından response'ların geri gelmesini yine 🕙 bekler.
Bu "beklemeler" 🕙 mikrosaniyelerle ölçülür; ama hepsi toplandığında sonuçta oldukça fazla bekleme olur.
+1 -1
View File
@@ -16,7 +16,7 @@ FastAPI Cloud, *FastAPI and friends* açık kaynak projelerinin birincil sponsor
## Bulut Sağlayıcılar - Sponsorlar { #cloud-providers-sponsors }
Diğer bazı bulut sağlayıcılar da ✨ [**FastAPI'ye sponsor olur**](../help-fastapi.md#sponsor-the-author) ✨. 🙇
Diğer bazı bulut sağlayıcılar da ✨ [**FastAPI'ye sponsor olur**](https://github.com/sponsors/tiangolo) ✨. 🙇
Kılavuzlarını takip etmek ve servislerini denemek için onları da değerlendirmek isteyebilirsiniz:
+1
View File
@@ -1,5 +1,6 @@
# Deployment Kavramları { #deployments-concepts }
Bir **FastAPI** uygulamasını (hatta genel olarak herhangi bir web API'yi) deploy ederken, muhtemelen önemseyeceğiniz bazı kavramlar vardır. Bu kavramları kullanarak, **uygulamanızı deploy etmek** için **en uygun** yöntemi bulabilirsiniz.
Önemli kavramlardan bazıları şunlardır:
+5 -5
View File
@@ -26,7 +26,7 @@ COPY ./app /code/app
CMD ["fastapi", "run", "app/main.py", "--port", "80"]
# If running behind a proxy like Nginx or Traefik add --proxy-headers
# Nginx veya Traefik gibi bir proxy arkasında çalıştırıyorsanız --proxy-headers ekleyin
# CMD ["fastapi", "run", "app/main.py", "--port", "80", "--proxy-headers"]
```
@@ -132,7 +132,7 @@ Successfully installed fastapi pydantic
</div>
/// info | Bilgi
/// note | Not
Paket bağımlılıklarını tanımlamak ve yüklemek için başka formatlar ve araçlar da vardır.
@@ -243,14 +243,14 @@ Aşağıda açıklandığı gibi `CMD` talimatının **her zaman** **exec form**
✅ **Exec** form:
```Dockerfile
# ✅ Do this
# ✅ Bunu yapın
CMD ["fastapi", "run", "app/main.py", "--port", "80"]
```
⛔️ **Shell** form:
```Dockerfile
# ⛔️ Don't do this
# ⛔️ Bunu yapmayın
CMD fastapi run app/main.py --port 80
```
@@ -556,7 +556,7 @@ Container kullanıyorsanız (örn. Docker, Kubernetes), temelde iki yaklaşım v
**Birden fazla container**'ınız varsa ve muhtemelen her biri **tek process** çalıştırıyorsa (ör. bir **Kubernetes** cluster'ında), replication yapılan worker container'lar çalışmadan **önce**, **başlatmadan önceki adımlar**ın işini yapan **ayrı bir container** kullanmak isteyebilirsiniz (tek container, tek process).
/// info | Bilgi
/// note | Not
Kubernetes kullanıyorsanız, bu muhtemelen bir [Init Container](https://kubernetes.io/docs/concepts/workloads/pods/init-containers/) olur.
+6 -24
View File
@@ -1,26 +1,6 @@
# FastAPI Cloud { #fastapi-cloud }
FastAPI uygulamanızı [FastAPI Cloud](https://fastapicloud.com)'a **tek bir komutla** deploy edebilirsiniz. Henüz yapmadıysanız gidip bekleme listesine katılın. 🚀
## Giriş Yapma { #login }
Önceden bir **FastAPI Cloud** hesabınız olduğundan emin olun (sizi bekleme listesinden davet ettik 😉).
Ardından giriş yapın:
<div class="termy">
```console
$ fastapi login
You are logged in to FastAPI Cloud 🚀
```
</div>
## Deploy { #deploy }
Şimdi uygulamanızı **tek bir komutla** deploy edin:
FastAPI uygulamanızı [FastAPI Cloud](https://fastapicloud.com)'a yalnızca **tek bir komutla** deploy edebilirsiniz. 🚀
<div class="termy">
@@ -36,20 +16,22 @@ Deploying to FastAPI Cloud...
</div>
CLI, FastAPI uygulamanızı otomatik olarak algılar ve buluta deploy eder. Giriş yapmadıysanız, kimlik doğrulamasını tamamlamak için tarayıcınız açılır.
Hepsi bu! Artık uygulamanıza o URL üzerinden erişebilirsiniz. ✨
## FastAPI Cloud Hakkında { #about-fastapi-cloud }
**[FastAPI Cloud](https://fastapicloud.com)**, **FastAPI**'nin arkasındaki aynı yazar ve ekip tarafından geliştirilmiştir.
Bir API'yi minimum eforla **geliştirme**, **deploy etme** ve **erişilebilir kılma** sürecini sadeleştirir.
Bir API'yi minimum eforla **geliştirme**, **deploy etme** ve **erişim** süreçlerini sadeleştirir.
FastAPI ile uygulama geliştirirken elde ettiğiniz aynı **developer experience**'ı, onları buluta **deploy etmeye** de taşır. 🎉
Ayrıca bir uygulamayı deploy ederken ihtiyaç duyacağınız pek çok şeyi de sizin için halleder; örneğin:
* HTTPS
* Replication (çoğaltma), request'lere göre autoscaling ile
* Replication, request'lere göre autoscaling ile
* vb.
FastAPI Cloud, *FastAPI and friends* açık kaynak projelerinin birincil sponsoru ve finansman sağlayıcısıdır. ✨
@@ -62,4 +44,4 @@ FastAPI uygulamalarını deploy etmek için cloud sağlayıcınızın kendi kıl
## Kendi server'ınıza deploy etme { #deploy-your-own-server }
Bu **Deployment** kılavuzunun ilerleyen bölümlerinde tüm detayları da ele alacağız; böylece neler olduğunu, nelerin gerçekleşmesi gerektiğini ve FastAPI uygulamalarını kendi başınıza (kendi server'larınızla da) nasıl deploy edebileceğinizi anlayacaksınız. 🤓
Bu **Deployment** kılavuzunun ilerleyen bölümlerinde size tüm detayları da öğreteceğim; böylece neler olduğunu, nelerin gerçekleşmesi gerektiğini ve FastAPI uygulamalarını kendi başınıza, kendi server'larınızla da nasıl deploy edebileceğinizi anlayacaksınız. 🤓
+2 -2
View File
@@ -17,7 +17,7 @@ Bir kullanıcı gözüyle **HTTPSin temellerini öğrenmek** için [https://h
* HTTPS için **server**’ın, **üçüncü bir taraf** tarafından verilen **"sertifikalara"** sahip olması gerekir.
* Bu sertifikalar aslında üçüncü tarafça "üretilmez", üçüncü taraftan **temin edilir**.
* Sertifikaların bir **geçerlilik süresi** vardır.
* Süresi **dolar**.
* Süreleri **sona erer**.
* Sonrasında **yenilenmeleri**, üçüncü taraftan **yeniden temin edilmeleri** gerekir.
* Bağlantının şifrelenmesi **TCP seviyesinde** gerçekleşir.
* Bu, **HTTPnin bir katman altıdır**.
@@ -169,7 +169,7 @@ Bu şekilde TLS Termination Proxy, birden fazla uygulama için **birden fazla do
### Sertifika Yenileme { #certificate-renewal }
Gelecekte bir noktada, her sertifikanın süresi **dolar** (temin edildikten yaklaşık 3 ay sonra).
Gelecekte bir noktada, her sertifikanın süresi **sona erer** (temin edildikten yaklaşık 3 ay sonra).
Ardından başka bir program (bazı durumlarda ayrı bir programdır, bazı durumlarda aynı TLS Termination Proxy olabilir) Let's Encrypt ile konuşup sertifika(ları) yeniler.
+1 -1
View File
@@ -1,5 +1,6 @@
# Bir Sunucuyu Manuel Olarak Çalıştırın { #run-a-server-manually }
## `fastapi run` Komutunu Kullanın { #use-the-fastapi-run-command }
Kısacası, FastAPI uygulamanızı sunmak için `fastapi run` kullanın:
@@ -56,7 +57,6 @@ Buna alternatif birkaç seçenek daha vardır, örneğin:
* [Hypercorn](https://hypercorn.readthedocs.io/): diğer özelliklerin yanında HTTP/2 ve Trio ile uyumlu bir ASGI server.
* [Daphne](https://github.com/django/daphne): Django Channels için geliştirilmiş ASGI server.
* [Granian](https://github.com/emmett-framework/granian): Python uygulamaları için bir Rust HTTP server.
* [NGINX Unit](https://unit.nginx.org/howto/fastapi/): NGINX Unit, hafif ve çok yönlü bir web uygulaması runtime'ıdır.
## Sunucu Makinesi ve Sunucu Programı { #server-machine-and-server-program }
+1 -1
View File
@@ -17,7 +17,7 @@ Uygulamaları deploy ederken, çok çekirdekten (multiple cores) faydalanmak ve
Burada, `fastapi` komutunu kullanarak ya da `uvicorn` komutunu doğrudan çalıştırarak worker process'lerle Uvicorn'u nasıl kullanacağınızı göstereceğim.
/// info | Bilgi
/// note | Not
Container kullanıyorsanız (örneğin Docker veya Kubernetes ile), bununla ilgili daha fazlasını bir sonraki bölümde anlatacağım: [Container'larda FastAPI - Docker](docker.md).
+1 -1
View File
@@ -2,7 +2,7 @@
Resmi [FastAPI Extension](https://marketplace.visualstudio.com/items?itemName=FastAPILabs.fastapi-vscode), FastAPI geliştirme akışınızı iyileştirir: *path operation* keşfi, gezinme, FastAPI Clouda deploy ve canlı log akışı.
Daha fazla ayrıntı için, GitHub deposundaki READMEye bakın: [GitHub repository](https://github.com/fastapi/fastapi-vscode).
Daha fazla ayrıntı için, GitHub deposundaki READMEye bakın: [GitHub deposu](https://github.com/fastapi/fastapi-vscode).
## Kurulum ve Yükleme { #setup-and-installation }
+17 -17
View File
@@ -19,10 +19,10 @@ Pythona ihtiyaç duymadan, **shell (terminal)** içinde ortam değişkenleri
<div class="termy">
```console
// You could create an env var MY_NAME with
// MY_NAME adlı bir env var'ı şöyle oluşturabilirsiniz
$ export MY_NAME="Wade Wilson"
// Then you could use it with other programs, like
// Sonra bunu diğer programlarla şöyle kullanabilirsiniz
$ echo "Hello $MY_NAME"
Hello Wade Wilson
@@ -37,10 +37,10 @@ Hello Wade Wilson
<div class="termy">
```console
// Create an env var MY_NAME
// MY_NAME adlı bir env var oluşturun
$ $Env:MY_NAME = "Wade Wilson"
// Use it with other programs, like
// Bunu diğer programlarla şöyle kullanın
$ echo "Hello $Env:MY_NAME"
Hello Wade Wilson
@@ -78,20 +78,20 @@ Sonrasında bu Python programını çalıştırabilirsiniz:
<div class="termy">
```console
// Here we don't set the env var yet
// Burada env var'ı henüz ayarlamıyoruz
$ python main.py
// As we didn't set the env var, we get the default value
// Env var'ı ayarlamadığımız için varsayılan değeri alırız
Hello World from Python
// But if we create an environment variable first
// Ama önce bir ortam değişkeni oluşturursak
$ export MY_NAME="Wade Wilson"
// And then call the program again
// Sonra programı tekrar çağırırsak
$ python main.py
// Now it can read the environment variable
// Artık ortam değişkenini okuyabilir
Hello Wade Wilson from Python
```
@@ -105,20 +105,20 @@ Hello Wade Wilson from Python
<div class="termy">
```console
// Here we don't set the env var yet
// Burada env var'ı henüz ayarlamıyoruz
$ python main.py
// As we didn't set the env var, we get the default value
// Env var'ı ayarlamadığımız için varsayılan değeri alırız
Hello World from Python
// But if we create an environment variable first
// Ama önce bir ortam değişkeni oluşturursak
$ $Env:MY_NAME = "Wade Wilson"
// And then call the program again
// Sonra programı tekrar çağırırsak
$ python main.py
// Now it can read the environment variable
// Artık ortam değişkenini okuyabilir
Hello Wade Wilson from Python
```
@@ -136,14 +136,14 @@ Bunu yapmak için, program komutunun hemen öncesinde ve aynı satırda tanımla
<div class="termy">
```console
// Create an env var MY_NAME in line for this program call
// Bu program çağrısı için aynı satırda MY_NAME adlı bir env var oluşturun
$ MY_NAME="Wade Wilson" python main.py
// Now it can read the environment variable
// Artık ortam değişkenini okuyabilir
Hello Wade Wilson from Python
// The env var no longer exists afterwards
// Sonrasında env var artık mevcut değildir
$ python main.py
Hello World from Python
+2 -2
View File
@@ -99,7 +99,7 @@ Artık anahtar adlarını yanlış yazmak, dokümana gidip gelmek ya da sonunda
Her şey için mantıklı **varsayılanlar** ve her yerde isteğe bağlı yapılandırmalar vardır. Tüm parametreler, ihtiyacınızı karşılayacak şekilde ince ayar yapılarak tanımlamak istediğiniz APIyi oluşturabilir.
Ancak varsayılan hâliyle hepsi **hemen çalışır**.
Ancak varsayılan hâliyle hepsi **"hemen çalışır"**.
### Doğrulama { #validation }
@@ -149,7 +149,7 @@ FastAPI, son derece kolay kullanımlı ama son derece güçlü bir <dfn title='
Başka bir deyişle, onlara gerek yok; ihtiyaç duyduğunuz kodu import edin ve kullanın.
Her entegrasyon (bağımlılıklar ile) o kadar basit olacak şekilde tasarlanmıştır ki, uygulamanız için, *path operations* ile kullandığınız aynı yapı ve söz dizimiyle sadece 2 satırda bir plug-in yazabilirsiniz.
Her entegrasyon (bağımlılıklar ile) o kadar basit olacak şekilde tasarlanmıştır ki, uygulamanız için, *path operations* ile kullandığınız aynı yapı ve söz dizimiyle sadece 2 satırda bir "plug-in" yazabilirsiniz.
### Test Edildi { #tested }
+2 -2
View File
@@ -38,7 +38,7 @@ Böylece **FastAPI**'nin bug fix'ler ve yeni özelliklerle gelen her yeni releas
## Yazarı Takip Edin { #follow-the-author }
FastAPI ve friends hakkında paylaşacak haberlerim olduğunda duymak için, [beni (Sebastián Ramírez / `tiangolo`)](https://tiangolo.com) birkaç yerde takip edebilirsiniz:
FastAPI ve friends hakkında paylaşacak haberlerim olduğunda duymak için, yazar [beni (Sebastián Ramírez / `tiangolo`)](https://tiangolo.com) birkaç yerde takip edebilirsiniz:
* [**GitHub**'da @tiangolo](https://github.com/tiangolo).
* [**X (Twitter)**'da @tiangolo](https://x.com/tiangolo)
@@ -68,7 +68,7 @@ GitHub repository'sinde örneğin şunlar için [yeni bir soru oluşturabilirsin
## Sohbete Katılın { #join-the-chat }
FastAPI topluluğundan diğer kişilerle takılmak için 👥 [Discord chat server](https://discord.gg/VQjSZaeJmf) 👥 sohbetine katılın.
👥 [Discord sohbet sunucusuna](https://discord.gg/VQjSZaeJmf) 👥 katılın ve FastAPI topluluğundaki diğer kişilerle takılın.
/// tip | İpucu
+2 -2
View File
@@ -56,7 +56,7 @@ Kullanabileceğiniz diğer tüm olası yapılandırmaları görmek için, resmi
Swagger UI ayrıca bazı yapılandırmaların **yalnızca JavaScript** nesneleri olmasına izin verir (örneğin JavaScript fonksiyonları).
FastAPI, bu yalnızca JavaScript olan `presets` ayarlarını da içerir:
FastAPI, yalnızca JavaScript olan bu `presets` ayarlarını da içerir:
```JavaScript
presets: [
@@ -67,4 +67,4 @@ presets: [
Bunlar string değil, **JavaScript** nesneleridir; dolayısıyla bunları Python kodundan doğrudan geçemezsiniz.
Böyle yalnızca JavaScript yapılandırmalarına ihtiyacınız varsa, yukarıdaki yöntemlerden birini kullanabilirsiniz: Swagger UI'nin tüm *path operation*'larını override edin ve ihtiyaç duyduğunuz JavaScript'i elle yazın.
Böyle yalnızca JavaScript yapılandırmalarına ihtiyacınız varsa, yukarıdaki yöntemlerden birini kullanabilirsiniz. Swagger UI *path operation*'ının tamamını override edin ve ihtiyaç duyduğunuz JavaScript'i elle yazın.
@@ -1,5 +1,6 @@
# Özel Request ve APIRoute sınıfı { #custom-request-and-apiroute-class }
Bazı durumlarda, `Request` ve `APIRoute` sınıflarının kullandığı mantığı override etmek isteyebilirsiniz.
Özellikle bu yaklaşım, bir middleware içindeki mantığa iyi bir alternatif olabilir.
+10 -2
View File
@@ -25,9 +25,17 @@ Ve `get_openapi()` fonksiyonu şu parametreleri alır:
* `openapi_version`: Kullanılan OpenAPI specification sürümü. Varsayılan olarak en günceli: `3.1.0`.
* `summary`: API'nin kısa özeti.
* `description`: API'nizin açıklaması; markdown içerebilir ve dokümanlarda gösterilir.
* `routes`: route'ların listesi; bunların her biri kayıtlı *path operations*'lardır. `app.routes` içinden alınırlar.
* `routes`: Uygulamadan gelen route'lar; `app.routes` içinden alınır. FastAPI, kayıtlı *path operations*'ları toplamak için bunları kullanır; eklenen router'lardan gelenler de dahildir.
/// info | Bilgi
/// tip | Teknik Detaylar
`app.routes` daha alt seviyede bir route ağacıdır. Yalnızca son `APIRoute` objelerini değil, FastAPI'nin dahili olarak eklenen router'lar için kullandığı aday route'ları da içerebilir.
Yine de `app.routes`'i `get_openapi()`'ye geçebilirsiniz. FastAPI, etkili path operation'ları toplamak için bu route ağacını gezecektir.
///
/// note | Bilgi
`summary` parametresi OpenAPI 3.1.0 ve üzeri sürümlerde vardır; FastAPI 0.99.0 ve üzeri tarafından desteklenmektedir.
+1
View File
@@ -1,5 +1,6 @@
# GraphQL { #graphql }
**FastAPI**, **ASGI** standardını temel aldığı için ASGI ile uyumlu herhangi bir **GraphQL** kütüphanesini entegre etmek oldukça kolaydır.
Aynı uygulama içinde normal FastAPI *path operation*'larını GraphQL ile birlikte kullanabilirsiniz.
@@ -8,6 +8,8 @@ FastAPI 0.119.0 sürümü, v2'ye geçişi kolaylaştırmak için, Pydantic v2
FastAPI 0.126.0 sürümü Pydantic v1 desteğini kaldırdı, ancak bir süre daha `pydantic.v1` desteğini sürdürdü.
FastAPI 0.128.0 sürümü `pydantic.v1` desteğini de kaldırdı, bu yüzden FastAPI'nin en güncel sürümleri Pydantic v2 gerektirir.
/// warning | Uyarı
Pydantic ekibi, Python'ın en yeni sürümleri için Pydantic v1 desteğini, **Python 3.14** ile başlayarak sonlandırdı.
@@ -54,6 +56,16 @@ Bu da şu anlama gelir: Pydantic v2'nin en güncel sürümünü kurup, bu alt mo
### v2 İçinde Pydantic v1 için FastAPI Desteği { #fastapi-support-for-pydantic-v1-in-v2 }
/// warning | Uyarı
`pydantic.v1` modelleri için bu FastAPI desteği **FastAPI 0.119.0** sürümünde eklendi ve **FastAPI 0.128.0** sürümünde kaldırıldı. Pydantic v2'ye geçiş için geçici bir yardımcı olması amaçlanmıştı.
FastAPI'nin güncel sürümlerinde, uygulamanızda bir `pydantic.v1` modeli kullanmak hataya neden olur.
Bu bölümün geri kalanı yalnızca bu eski sürümlerde mevcut olan geçici desteği açıklar.
///
FastAPI 0.119.0'dan itibaren, v2'ye geçişi kolaylaştırmak için Pydantic v2nin içinden Pydantic v1 kullanımına yönelik kısmi destek de vardır.
Dolayısıyla Pydantic'i en güncel 2 sürümüne yükseltip import'ları `pydantic.v1` alt modülünü kullanacak şekilde değiştirebilirsiniz; çoğu durumda bu doğrudan çalışır.
@@ -122,6 +134,12 @@ Pydantic v1 modelleriyle `Body`, `Query`, `Form` vb. parametreler için FastAPI'
### Adım Adım Geçiş { #migrate-in-steps }
/// warning | Uyarı
Aşağıda açıklanan, aynı uygulamada hem Pydantic v1 hem de v2 modellerini kullanarak yapılan kademeli geçiş yalnızca **FastAPI 0.119.0 ile 0.127.x** arasında çalışır. Bu destek **FastAPI 0.128.0** sürümünde kaldırıldı; en güncel sürümler **Pydantic v2** modelleri gerektirir.
///
/// tip | İpucu
Önce `bump-pydantic` ile deneyin; testleriniz geçerse ve bu yol çalışırsa tek komutla işi bitirmiş olursunuz. ✨
@@ -77,7 +77,7 @@ Ama `Item-Output` için `description` **required**'dır, kırmızı yıldız var
**Pydantic v2**'nin bu özelliğiyle API dokümantasyonunuz daha **hassas** olur; ayrıca autogenerated client'lar ve SDK'lar kullanıyorsanız, onlar da daha tutarlı ve daha iyi bir **developer experience** ile daha doğru üretilir. 🎉
## Schema'ları Ayırma { #do-not-separate-schemas }
## Schema'ları Ayırmayın { #do-not-separate-schemas }
Bazı durumlarda **input ve output için aynı schema'yı** kullanmak isteyebilirsiniz.
@@ -85,7 +85,7 @@ Bunun muhtemelen en yaygın nedeni, halihazırda autogenerated client kodların
Bu durumda **FastAPI**'de bu özelliği `separate_input_output_schemas=False` parametresiyle kapatabilirsiniz.
/// info | Bilgi
/// note | Not
`separate_input_output_schemas` desteği FastAPI `0.102.0` sürümünde eklendi. 🤓
+6 -6
View File
@@ -26,7 +26,7 @@ include_yaml:
<img src="https://img.shields.io/pypi/v/fastapi?color=%2334D058&label=pypi%20package" alt="Package version">
</a>
<a href="https://pypi.org/project/fastapi">
<img src="https://img.shields.io/pypi/pyversions/fastapi.svg?color=%2334D058" alt="Supported Python versions">
<img src="https://img.shields.io/pyp/pyversions/fastapi.svg?color=%2334D058" alt="Supported Python versions">
</a>
</p>
@@ -45,11 +45,11 @@ Temel özellikleri şunlardır:
* **Hızlı**: Çok yüksek performanslı, **NodeJS** ve **Go** ile eşit düzeyde (Starlette ve Pydantic sayesinde). [Mevcut en hızlı Python framework'lerinden biri](#performance).
* **Kodlaması Hızlı**: Özellik geliştirme hızını yaklaşık %200 ile %300 aralığında artırır. *
* **Daha az hata**: İnsan (geliştirici) kaynaklı hataları yaklaşık %40 azaltır. *
* **Sezgisel**: Harika bir editör desteği. Her yerde <dfn title="oto-tamamlama, autocompletion, IntelliSense olarak da bilinir">Tamamlama</dfn>. Hata ayıklamaya daha az zaman.
* **Sezgisel**: Harika bir editör desteği. Her yerde <dfn title="otomatik tamamlama, oto-tamamlama, IntelliSense olarak da bilinir">Tamamlama</dfn>. Hata ayıklamaya daha az zaman.
* **Kolay**: Kullanımı ve öğrenmesi kolay olacak şekilde tasarlandı. Doküman okumaya daha az zaman.
* **Kısa**: Kod tekrarını minimize eder. Her parametre tanımından birden fazla özellik. Daha az hata.
* **Sağlam**: Production'a hazır kod elde edersiniz. Otomatik etkileşimli dokümantasyon ile birlikte.
* **Standardlara dayalı**: API'lar için açık standartlara dayalıdır (ve tamamen uyumludur); [OpenAPI](https://github.com/OAI/OpenAPI-Specification) (önceden Swagger olarak biliniyordu) ve [JSON Schema](https://json-schema.org/).
* **Standartlara dayalı**: API'lar için açık standartlara dayalıdır (ve tamamen uyumludur); [OpenAPI](https://github.com/OAI/OpenAPI-Specification) (önceden Swagger olarak biliniyordu) ve [JSON Schema](https://json-schema.org/).
<small>* tahmin, production uygulamalar geliştiren dahili bir geliştirme ekibinin yaptığı testlere dayanmaktadır.</small>
@@ -492,9 +492,7 @@ Daha fazla özellik içeren daha kapsamlı bir örnek için <a href="https://fas
### Uygulamanızı deploy edin (opsiyonel) { #deploy-your-app-optional }
İsterseniz FastAPI uygulamanızı [FastAPI Cloud](https://fastapicloud.com)'a deploy edebilirsiniz; eğer henüz yapmadıysanız gidip bekleme listesine katılın. 🚀
Zaten bir **FastAPI Cloud** hesabınız varsa (bekleme listesinden sizi davet ettiysek 😉), uygulamanızı tek bir komutla deploy edebilirsiniz.
FastAPI uygulamanızı tek bir komutla [FastAPI Cloud](https://fastapicloud.com)'a deploy edebilirsiniz. 🚀
<div class="termy">
@@ -510,6 +508,8 @@ Deploying to FastAPI Cloud...
</div>
CLI, FastAPI uygulamanızı otomatik olarak algılar ve cloud'a deploy eder. Giriş yapmadıysanız, kimlik doğrulama sürecini tamamlamak için tarayıcınız açılır.
Hepsi bu! Artık uygulamanıza bu URL'den erişebilirsiniz. ✨
#### FastAPI Cloud hakkında { #about-fastapi-cloud }
+1
View File
@@ -1,5 +1,6 @@
# Full Stack FastAPI Şablonu { #full-stack-fastapi-template }
Şablonlar genellikle belirli bir kurulumla gelir, ancak esnek ve özelleştirilebilir olacak şekilde tasarlanırlar. Bu sayede şablonu projenizin gereksinimlerine göre değiştirip uyarlayabilir, çok iyi bir başlangıç noktası olarak kullanabilirsiniz. 🏁
Bu şablonu başlangıç için kullanabilirsiniz; çünkü ilk kurulumun, güvenliğin, veritabanının ve bazı API endpoint'lerinin önemli bir kısmı sizin için zaten hazırlanmıştır.
+1
View File
@@ -1,5 +1,6 @@
# Python Tiplerine Giriş { #python-types-intro }
Python, isteğe bağlı "type hints" (diğer adıyla "type annotations") desteğine sahiptir.
Bu **"type hints"** veya annotations, bir değişkenin <dfn title="örneğin: str, int, float, bool">tip</dfn>'ini bildirmeye yarayan özel bir sözdizimidir.
+34 -22
View File
@@ -17,16 +17,16 @@ Diyelim ki şöyle bir dosya yapınız var:
```
.
├── app
   ├── __init__.py
   ├── main.py
   ├── dependencies.py
   └── routers
   │ ├── __init__.py
   │ ├── items.py
   │ └── users.py
   └── internal
   ├── __init__.py
   └── admin.py
├── __init__.py
├── main.py
├── dependencies.py
└── routers
│ ├── __init__.py
│ ├── items.py
│ └── users.py
└── internal
├── __init__.py
└── admin.py
```
/// tip | İpucu
@@ -44,7 +44,7 @@ from app.routers import items
///
* `app` dizini her şeyi içerir. Ayrıca boş bir `app/__init__.py` dosyası olduğu için bir "Python package" (bir "Python module" koleksiyonu) olur: `app`.
* İçinde bir `app/main.py` dosyası vardır. Bir Python package'in (içinde `__init__.py` dosyası olan bir dizinin) içinde olduğundan, o package'in bir "module"’üdür: `app.main`.
* İçinde bir `app/main.py` dosyası vardır. Bir Python packagein (içinde `__init__.py` dosyası olan bir dizinin) içinde olduğundan, o packagein bir "module"’üdür: `app.main`.
* Benzer şekilde `app/dependencies.py` dosyası da bir "module"dür: `app.dependencies`.
* `app/routers/` adında bir alt dizin vardır ve içinde başka bir `__init__.py` dosyası bulunur; dolayısıyla bu bir "Python subpackage"dir: `app.routers`.
* `app/routers/items.py` dosyası `app/routers/` packagei içinde olduğundan bir submoduledür: `app.routers.items`.
@@ -138,7 +138,7 @@ Diyelim ki uygulamanızdaki "items" ile ilgili endpoint'ler de `app/routers/item
Bu, `app/routers/users.py` ile aynı yapıdadır.
Namun biraz daha akıllı davranıp kodu sadeleştirmek istiyoruz.
Ancak biraz daha akıllı davranıp kodu sadeleştirmek istiyoruz.
Bu moduledeki tüm *path operation*ların şu ortak özelliklere sahip olduğunu biliyoruz:
@@ -230,7 +230,7 @@ from .dependencies import get_token_header
* `dependencies` module’ünü bul (`app/routers/dependencies.py` gibi hayali bir dosya)...
* ve oradan `get_token_header` function’ını import et.
Ama o dosya yok; bizim dependencylerimiz `app/dependencies.py` dosyasında.
Ancak o dosya yok; bizim dependencylerimiz `app/dependencies.py` dosyasında.
Uygulama/dosya yapımızın nasıl göründüğünü hatırlayın:
@@ -396,17 +396,17 @@ Böylece o router içindeki tüm routelar uygulamanın bir parçası olarak d
/// note | Teknik Detaylar
Aslında içeride, `APIRouter` içinde tanımlanan her *path operation* için bir *path operation* oluşturur.
Router ana uygulamaya dahil edildiğinde FastAPI, orijinal `APIRouter`’ı ve içindeki `APIRoute`ları etkin tutar.
Yani perde arkasında, her şey tek bir uygulamaymış gibi çalışır.
Bu da, özel (custom) `APIRouter` ve `APIRoute` alt sınıflarının, router dahil edildikten sonra da işleyişe katılabileceği anlamına gelir.
///
/// tip | İpucu
Routerları dahil ederken performans konusunda endişelenmeniz gerekmez.
Routerları dahil ederken performans konusunda endişelenmeyin.
Bu işlem mikrosaniyeler sürer ve sadece startup sırasında olur.
Bu mekanizma hafif olacak ve her request'e ek yük bindirmeyecek şekilde tasarlanmıştır.
Dolayısıyla performansı etkilemez. ⚡
@@ -453,15 +453,15 @@ ve `app.include_router()` ile eklenen diğer tüm *path operation*larla birli
/// note | Çok Teknik Detaylar
**Not**: Bu oldukça teknik bir detay; büyük ihtimalle **direkt geçebilirsiniz**.
Not: Bu, muhtemelen doğrudan atlayabileceğiniz oldukça teknik bir detaydır.
---
`APIRouter`lar "mount" edilmez; uygulamanın geri kalanından izole değildir.
Çünkü *path operation*larını OpenAPI şemasına ve kullanıcı arayüzlerine dahil etmek istiyoruz.
Bunun nedeni, onların *path operation*larını OpenAPI şemasına ve kullanıcı arayüzlerine dahil etmek istememizdir.
Onları tamamen izole edip bağımsız şekilde "mount" edemediğimiz için, *path operation*lar doğrudan eklenmek yerine "klonlanır" (yeniden oluşturulur).
FastAPI, orijinal routerları ve *path operation*ları etkin tutar; istekleri işlerken ve OpenAPI üretirken router prefixlerini, dependencyleri, tagleri, responsesları ve diğer metaverileri birleştirir.
///
@@ -490,7 +490,7 @@ Komuta dosya yolunu da verebilirsiniz, örneğin:
$ fastapi dev app/main.py
```
Ama o zaman her `fastapi` komutunu çalıştırdığınızda doğru yolu hatırlayıp geçirmeniz gerekir.
Ancak o zaman her `fastapi` komutunu çalıştırdığınızda doğru yolu hatırlayıp geçirmeniz gerekir.
Ayrıca, diğer araçlar uygulamayı bulamayabilir; örneğin [VS Code Eklentisi](../editor-support.md) veya [FastAPI Cloud](https://fastapicloud.com). Bu yüzden `pyproject.toml` içinde `entrypoint` kullanmanız önerilir.
@@ -532,4 +532,16 @@ Bir `APIRouter`’ı `FastAPI` uygulamasına dahil ettiğiniz gibi, bir `APIRout
router.include_router(other_router)
```
`router`’ı `FastAPI` uygulamasına dahil etmeden önce bunu yaptığınızdan emin olun; böylece `other_router` içindeki *path operation*lar da dahil edilmiş olur.
Bunu, `router`’ı `FastAPI` uygulamasına dahil etmeden önce de sonra da yapabilirsiniz. FastAPI, `other_router` içindeki *path operation*ları yönlendirmeye (routing) ve OpenAPIye yine dahil eder.
Aynı şey, routerlara daha sonra eklenen *path operation*lar için de geçerlidir. Önceden yapılmış dahil etme üzerinden de görünür olurlar.
/// warning | Teknik Detaylar
Bir router’ı dahil ettikten sonra `router.routes`i doğrudan değiştirmekten kaçının. FastAPI, router dahilini canlı (live) kabul eder; bu nedenle orijinal router ve içindeki routelar, yönlendirme ve OpenAPI üretiminin bir parçası olarak kalır.
Route ve router eklemek için path operation decoratorları ve `.include_router()` gibi belgelenmiş APIleri kullanın.
`router.routes`i, route tanımlarını ve dahil edilmiş routerları barındırabilen daha alt seviye bir route ağacı olarak düşünün; bunu nihai *path operation*ların düz bir listesiymiş gibi kullanmaktan kaçının.
///
@@ -111,7 +111,7 @@ q: str | None = None
{* ../../docs_src/body_multiple_params/tutorial004_an_py310.py hl[28] *}
/// info | Bilgi
/// note | Not
`Body`, `Query`, `Path` ve daha sonra göreceğiniz diğerleriyle aynı ek validasyon ve metadata parametrelerine de sahiptir.
@@ -126,7 +126,7 @@ Varsayılan olarak **FastAPI**, body'nin doğrudan bu modelin içeriği olmasın
Ancak, ek body parametreleri tanımladığınızda olduğu gibi, `item` anahtarı olan bir JSON ve onun içinde modelin içeriğini beklemesini istiyorsanız, `Body`'nin özel parametresi olan `embed`'i kullanabilirsiniz:
```Python
item: Item = Body(embed=True)
item: Annotated[Item, Body(embed=True)]
```
yani şöyle:
+3 -2
View File
@@ -1,5 +1,6 @@
# Body - İç İçe Modeller { #body-nested-models }
**FastAPI** ile (Pydantic sayesinde) istediğiniz kadar derin iç içe geçmiş modelleri tanımlayabilir, doğrulayabilir, dokümante edebilir ve kullanabilirsiniz.
## List alanları { #list-fields }
@@ -135,7 +136,7 @@ Bu, aşağıdaki gibi bir JSON body bekler (dönüştürür, doğrular, doküman
}
```
/// info | Bilgi
/// note | Not
`images` keyinin artık image objectlerinden oluşan bir list içerdiğine dikkat edin.
@@ -147,7 +148,7 @@ Bu, aşağıdaki gibi bir JSON body bekler (dönüştürür, doğrular, doküman
{* ../../docs_src/body_nested_models/tutorial007_py310.py hl[7,12,18,21,25] *}
/// info | Bilgi
/// note | Not
`Offer`’ın bir `Item` listi olduğuna, `Item`ların da opsiyonel bir `Image` listine sahip olduğuna dikkat edin.
+2 -1
View File
@@ -1,5 +1,6 @@
# Request Body { #request-body }
Bir client'ten (örneğin bir tarayıcıdan) API'nize veri göndermeniz gerektiğinde, bunu **request body** olarak gönderirsiniz.
Bir **request** body, client'in API'nize gönderdiği veridir. Bir **response** body ise API'nizin client'e gönderdiği veridir.
@@ -8,7 +9,7 @@ API'niz neredeyse her zaman bir **response** body göndermek zorundadır. Ancak
Bir **request** body tanımlamak için, tüm gücü ve avantajlarıyla [Pydantic](https://docs.pydantic.dev/) modellerini kullanırsınız.
/// info | Bilgi
/// note | Not
Veri göndermek için şunlardan birini kullanmalısınız: `POST` (en yaygını), `PUT`, `DELETE` veya `PATCH`.
+2 -2
View File
@@ -6,7 +6,7 @@ Bu sayede **model'i yeniden kullanabilir**, **birden fazla yerde** tekrar tekrar
/// note | Not
This is supported since FastAPI version `0.115.0`. 🤓
Bu özellik FastAPI'nin `0.115.0` sürümünden itibaren desteklenmektedir. 🤓
///
@@ -32,7 +32,7 @@ Tanımlanan cookie'leri `/docs` altındaki docs UI'da görebilirsiniz:
<img src="/img/tutorial/cookie-param-models/image01.png">
</div>
/// info | Bilgi
/// note | Not
Tarayıcıların cookie'leri özel biçimlerde ve arka planda yönetmesi nedeniyle, **JavaScript**'in cookie'lere erişmesine kolayca izin vermediğini aklınızda bulundurun.
+2 -2
View File
@@ -24,13 +24,13 @@ Ancak `fastapi`'dan `Query`, `Path`, `Cookie` ve diğerlerini import ettiğinizd
///
/// info | Bilgi
/// note | Not
Cookie'leri tanımlamak için `Cookie` kullanmanız gerekir, aksi halde parametreler query parametreleri olarak yorumlanır.
///
/// info | Bilgi
/// note | Not
**Tarayıcılar cookie'leri** özel şekillerde ve arka planda işlediği için, **JavaScript**'in onlara dokunmasına kolayca izin **vermezler**.
+1 -1
View File
@@ -59,7 +59,7 @@ Yani örneğin `importer.py` adında başka bir dosyanız var ve içinde şunlar
```Python
from myapp import app
# Some more code
# Biraz daha kod
```
bu durumda `myapp.py` içindeki otomatik oluşturulan `__name__` değişkeni `"__main__"` değerine sahip olmaz.
@@ -28,7 +28,7 @@ Ayrıca kodunuzda kullanılmayan bir parametreyi gören yeni geliştiricilerin b
///
/// info | Bilgi
/// note | Not
Bu örnekte uydurma özel header'lar olan `X-Key` ve `X-Token` kullanıyoruz.
@@ -1,6 +1,6 @@
# `yield` ile Dependency'ler { #dependencies-with-yield }
FastAPI, işini bitirdikten sonra <dfn title='bazen "exit code", "cleanup code", "teardown code", "closing code", "context manager exit code" vb. olarak da adlandırılır'>ek adımlar</dfn> çalıştıran dependency'leri destekler.
FastAPI, işini bitirdikten sonra <dfn title='bazen "çıkış kodu", "temizleme kodu", "sökme kodu", "kapatma kodu", "bağlam yöneticisi çıkış kodu" vb. olarak da adlandırılır'>ek adımlar</dfn> çalıştıran dependency'leri destekler.
Bunu yapmak için `return` yerine `yield` kullanın ve ek adımları (kodu) `yield` satırından sonra yazın.
@@ -111,7 +111,7 @@ Ama ihtiyaç duyarsanız diye burada. 🤓
{* ../../docs_src/dependencies/tutorial008b_an_py310.py hl[18:22,31] *}
Exception yakalayıp buna göre özel bir response oluşturmak istiyorsanız bir [Custom Exception Handler](../handling-errors.md#install-custom-exception-handlers) oluşturun.
Exception yakalayıp buna göre özel bir response oluşturmak istiyorsanız bir [Özel Exception Handler](../handling-errors.md#install-custom-exception-handlers) oluşturun.
## `yield` ve `except` ile Dependency'ler { #dependencies-with-yield-and-except }
@@ -170,7 +170,7 @@ participant tasks as Background tasks
end
```
/// info | Bilgi
/// note | Not
Client'a yalnızca **tek bir response** gönderilir. Bu, error response'lardan biri olabilir ya da *path operation*'dan dönen response olabilir.
@@ -233,7 +233,8 @@ participant operation as Path Operation
`yield` kullanan dependency'ler, zaman içinde farklı kullanım senaryolarını kapsamak ve bazı sorunları düzeltmek için gelişti.
FastAPI'nin farklı sürümlerinde nelerin değiştiğini görmek isterseniz, advanced guide'da şu bölümü okuyabilirsiniz: [Advanced Dependencies - Dependencies with `yield`, `HTTPException`, `except` and Background Tasks](../../advanced/advanced-dependencies.md#dependencies-with-yield-httpexception-except-and-background-tasks).
FastAPI'nin farklı sürümlerinde nelerin değiştiğini görmek isterseniz, gelişmiş kılavuzda şu bölümü okuyabilirsiniz: [Gelişmiş Dependency'ler - `yield`, `HTTPException`, `except` ve Background Tasks ile Dependency'ler](../../advanced/advanced-dependencies.md#dependencies-with-yield-httpexception-except-and-background-tasks).
## Context Managers { #context-managers }
### "Context Managers" Nedir? { #what-are-context-managers }
+2 -2
View File
@@ -51,7 +51,7 @@ Bu örnekte, bu dependency şunları bekler:
Sonra da bu değerleri içeren bir `dict` döndürür.
/// info | Bilgi
/// note | Not
FastAPI, `Annotated` desteğini 0.95.0 sürümünde ekledi (ve önermeye başladı).
@@ -106,7 +106,7 @@ common_parameters --> read_users
Bu şekilde paylaşılan kodu bir kez yazarsınız ve onu *path operation*'larda çağırma işini **FastAPI** halleder.
/// check | Ek bilgi
/// tip | İpucu
Dikkat edin: Bunu "register" etmek ya da benzeri bir şey yapmak için özel bir class oluşturup **FastAPI**'ye bir yere geçirmeniz gerekmez.
@@ -35,7 +35,7 @@ Sonra bu bağımlılığı şöyle kullanabiliriz:
{* ../../docs_src/dependencies/tutorial005_an_py310.py hl[23] *}
/// info | Bilgi
/// note | Not
Dikkat edin, *path operation function* içinde yalnızca tek bir bağımlılık tanımlıyoruz: `query_or_cookie_extractor`.
+1 -1
View File
@@ -53,7 +53,7 @@ Kullanabileceğiniz ek veri tiplerinden bazıları şunlardır:
## Örnek { #example }
Yukarıdaki tiplerden bazılarını kullanan parametrelere sahip bir örnek *path operation* şöyle:
Yukarıdaki tiplerden bazılarını kullanan parametrelere sahip bir örnek *path operation*:
{* ../../docs_src/extra_data_types/tutorial001_an_py310.py hl[1,3,12:16] *}
+1
View File
@@ -1,5 +1,6 @@
# Ek Modeller { #extra-models }
Önceki örnekten devam edersek, birbiriyle ilişkili birden fazla modelin olması oldukça yaygındır.
Bu durum özellikle kullanıcı modellerinde sık görülür, çünkü:
+14 -21
View File
@@ -1,5 +1,6 @@
# İlk Adımlar { #first-steps }
En sade FastAPI dosyası şu şekilde görünür:
{* ../../docs_src/first_steps/tutorial001_py310.py *}
@@ -180,7 +181,7 @@ Bu da şuna eşdeğer olur:
from backend.main import app
```
### Path ile `fastapi dev` { #fastapi-dev-with-path }
### Path ile veya `--entrypoint` CLI seçeneğiyle `fastapi dev` { #fastapi-dev-with-path-or-with-entrypoint-cli-option }
Dosya path'ini `fastapi dev` komutuna da verebilirsiniz; hangi FastAPI app objesini kullanacağını tahmin eder:
@@ -188,29 +189,19 @@ Dosya path'ini `fastapi dev` komutuna da verebilirsiniz; hangi FastAPI app objes
$ fastapi dev main.py
```
Ancak `fastapi` komutunu her çağırdığınızda doğru path'i geçmeyi hatırlamanız gerekir.
Veya `fastapi dev` komutuna `--entrypoint` seçeneğini de geçebilirsiniz:
```console
$ fastapi dev --entrypoint main:app
```
Ancak `fastapi` komutunu her çağırdığınızda doğru path'i veya entrypoint'i geçmeyi hatırlamanız gerekir.
Ayrıca, [VS Code Eklentisi](../editor-support.md) veya [FastAPI Cloud](https://fastapicloud.com) gibi başka araçlar da onu bulamayabilir; bu yüzden `pyproject.toml` içindeki `entrypoint`'i kullanmanız önerilir.
### Uygulamanızı Yayınlayın (opsiyonel) { #deploy-your-app-optional }
İsterseniz FastAPI uygulamanızı [FastAPI Cloud](https://fastapicloud.com)'a deploy edebilirsiniz; henüz katılmadıysanız gidip bekleme listesine yazılın. 🚀
Zaten bir **FastAPI Cloud** hesabınız varsa (bekleme listesinden sizi davet ettiysek 😉), uygulamanızı tek komutla deploy edebilirsiniz.
Deploy etmeden önce giriş yaptığınızdan emin olun:
<div class="termy">
```console
$ fastapi login
You are logged in to FastAPI Cloud 🚀
```
</div>
Ardından uygulamanızı deploy edin:
İsterseniz FastAPI uygulamanızı [FastAPI Cloud](https://fastapicloud.com)'a tek komutla deploy edebilirsiniz. 🚀
<div class="termy">
@@ -226,6 +217,8 @@ Deploying to FastAPI Cloud...
</div>
CLI, FastAPI uygulamanızı otomatik olarak algılar ve buluta deploy eder. Giriş yapmadıysanız, kimlik doğrulama işlemini tamamlamak için tarayıcınız açılır.
Bu kadar! Artık uygulamanıza o URL üzerinden erişebilirsiniz. ✨
## Adım Adım Özetleyelim { #recap-step-by-step }
@@ -270,7 +263,7 @@ https://example.com/items/foo
/items/foo
```
/// info | Bilgi
/// note | Not
Bir "path" genellikle "endpoint" veya "route" olarak da adlandırılır.
@@ -322,7 +315,7 @@ Biz de bunlara "**operation**" diyeceğiz.
* path `/`
* <dfn title="bir HTTP GET methodu"><code>get</code> operation</dfn> kullanarak
/// info | `@decorator` Bilgisi
/// note | `@decorator` Bilgisi
Python'daki `@something` söz dizimi "decorator" olarak adlandırılır.
+133
View File
@@ -0,0 +1,133 @@
# Frontend { #frontend }
Statik frontend uygulamalarını `app.frontend()` (veya `router.frontend()`) ile sunabilirsiniz.
Bu, Vite ile React, TanStack Router, Astro, Vue, Svelte, Angular, Solid ve benzeri statik dosyalar üreten frontend araçları için kullanışlıdır.
Bu araçlarda genellikle frontend'i build eden bir adım olur, örneğin şöyle bir komutla:
```bash
npm run build
```
Bu komut, frontend dosyalarınızla birlikte `./dist/` gibi bir dizin oluşturur.
Bu dizini, frontend framework'lerinin ihtiyaç duyduğu kurallara uygun şekilde sunmak için `app.frontend()` kullanabilirsiniz.
**FastAPI** önce *path operation*'ları kontrol eder. Frontend dosyaları yalnızca hiçbir normal route eşleşmezse kontrol edilir, bu yüzden API'niz bundan etkilenmez.
## Frontend Sunma { #serve-a-frontend }
Frontend'inizi build ettikten sonra, örneğin `npm run build` ile, oluşturulan dosyaları bir dizine koyun; örneğin `dist`.
Proje yapınız şöyle görünebilir:
```text
.
├── pyproject.toml
├── app
│ ├── __init__.py
│ └── main.py
└── dist
├── index.html
└── assets
└── app.js
```
Ardından bunu `app.frontend()` ile sunun:
{* ../../docs_src/frontend/tutorial001_py310.py hl[5] *}
Böylece `/assets/app.js` için gelen bir request, `dist/assets/app.js` dosyasını sunabilir.
Aynı zamanda bir **FastAPI** *path operation*'ınız varsa, öncelik *path operation*'dadır.
## Client-Side Routing { #client-side-routing }
**Single-page app**'ler (SPA'ler) dahil birçok frontend uygulaması client-side routing kullanır. `/dashboard/settings` gibi bir path gerçek bir dosya olmayabilir; bunu frontend framework'ü ele alır.
Bu yüzden, o URL'ye doğrudan erişildiğinde (uygulama içinde gezinmek yerine), backend frontend uygulamasını `index.html` üzerinden sunmalıdır. Böylece frontend framework'ü client-side routing'i işleyebilir.
Bunun için `fallback="index.html"` kullanın:
{* ../../docs_src/frontend/tutorial002_py310.py hl[5] *}
**FastAPI** bu fallback'i yalnızca tarayıcı gezinmesi gibi görünen `GET` ve `HEAD` request'leri için kullanır. JavaScript, CSS ve görseller gibi eksik dosyalar yine `404` döndürür.
`POST` veya `PUT` gibi diğer metotlarla, yalnızca frontend fallback'i ile eşleşen path'lere yapılan request'ler de `404` döndürür. Normal **FastAPI** *path operation*'ları frontend route'larından yine daha yüksek önceliğe sahiptir.
/// tip | İpucu
Varsayılan olarak `fallback`, `fallback="auto"` değerine sahiptir. Çoğu durumda `fallback` belirtmeniz gerekmez. Detaylar için aşağıyı okuyun.
///
Client-side routing kullanan birçok frontend uygulamasında istediğiniz davranış budur; örneğin TanStack Router ile React, Vue, Angular, SvelteKit veya Solid.
## Özel 404 Sayfası { #custom-404-page }
Bulunamayan frontend path'leri için statik bir `404.html` sayfası da sunabilirsiniz:
{* ../../docs_src/frontend/tutorial003_py310.py hl[5] *}
Bu response, `404` status code'unu korur.
Bu durumda **FastAPI**, bulunamayan frontend path'leri için `index.html` sunmaz. Bunun yerine `404.html` dosyasını döndürür.
/// tip | İpucu
Varsayılan olarak `fallback`, `fallback="auto"` değerine sahiptir. Bu durumda bir `404.html` dosyası bulunursa, otomatik olarak fallback olarak kullanılır.
Bu yüzden normalde `fallback` argümanını atlayabilirsiniz.
///
Bu, Astro gibi her sayfa için statik HTML dosyaları üreten frontend araçlarıyla kullanışlıdır.
## Otomatik Fallback { #fallback-auto }
Varsayılan olarak `app.frontend()`, `fallback="auto"` kullanır.
Frontend dizininde bir `404.html` dosyası varsa, bulunamayan frontend path'leri bu dosyayı `404` status code'u ile sunar.
Aksi halde bir `index.html` dosyası varsa, bulunamayan tarayıcı gezinme path'leri `index.html` sunar. Client-side routing kullanan birçok frontend uygulamasının beklediği davranış budur.
Bu yüzden çoğu durumda `fallback` argümanını belirtmeden `app.frontend("/", directory="dist")` kullanabilirsiniz.
{* ../../docs_src/frontend/tutorial001_py310.py hl[5] *}
## Fallback'i Devre Dışı Bırakma { #disable-fallback }
Bulunamayan frontend path'leri için fallback dosyası sunmak istemiyorsanız `fallback=None` kullanın:
{* ../../docs_src/frontend/tutorial005_py310.py hl[5] *}
Bundan sonra bulunamayan frontend path'leri normal `404` döndürür.
## Dizini Kontrol Etme { #check-directory }
Varsayılan olarak `app.frontend()`, uygulama oluşturulduğunda dizinin var olduğunu kontrol eder.
Bu, yapılandırma hatalarını erken yakalamaya yardımcı olur. Örneğin frontend build çıktısı dizini yoksa, **FastAPI** başlangıçta hata verir.
Frontend dosyalarınız daha sonra oluşturuluyorsa, örneğin app nesnesi oluşturulduktan sonra ayrı bir build adımıyla, `check_dir=False` ayarlayın:
{* ../../docs_src/frontend/tutorial006_py310.py hl[5] *}
`check_dir=False` ile **FastAPI**, app oluşturulduğunda dizini kontrol etmez. Yapılandırılan dizin bir request işlendiği sırada hâlâ yoksa, **FastAPI** o zaman hata verir.
## `APIRouter` ile Kullanma { #use-it-with-apirouter }
Frontend dosyalarını bir `APIRouter`'a da ekleyebilir ve bunu bir prefix ile dahil edebilirsiniz:
{* ../../docs_src/frontend/tutorial004_py310.py hl[6,7] *}
Bu örnekte frontend path'leri `/app` altında sunulur.
Uygulamadaki herhangi bir normal *path operation*, diğer router'larda olanlar dahil, yine öncelikli olur.
## Yalnızca Statik Build Çıktısı { #static-build-output-only }
`app.frontend()`, frontend build'iniz tarafından önceden oluşturulmuş dosyaları sunar.
Server-side rendering çalıştırmaz. Her request için server'da dinamik rendering gerektiren framework'ler için değil, statik dosyalar üreten frontend framework'leri içindir.
+1 -1
View File
@@ -93,7 +93,7 @@ Ve bu exception’ı FastAPI ile global olarak handle etmek istiyorsunuz.
Burada `/unicorns/yolo` için request atarsanız, *path operation* bir `UnicornException` `raise` eder.
Namun bu, `unicorn_exception_handler` tarafından handle edilir.
Ancak bu, `unicorn_exception_handler` tarafından handle edilir.
Böylece HTTP status codeu `418` olan, JSON içeriği şu şekilde temiz bir hata responseu alırsınız:
+2 -2
View File
@@ -76,11 +76,11 @@ $ pip install "fastapi[standard]"
/// note | Not
`pip install "fastapi[standard]"` ile kurduğunuzda, bazı varsayılan opsiyonel standard bağımlılıklarla birlikte gelir. Bunlara `fastapi-cloud-cli` da dahildir; bu sayede [FastAPI Cloud](https://fastapicloud.com)'a deploy edebilirsiniz.
`pip install "fastapi[standard]"` ile kurduğunuzda, bazı varsayılan opsiyonel standart bağımlılıklarla birlikte gelir. Bunlara `fastapi-cloud-cli` da dahildir; bu sayede [FastAPI Cloud](https://fastapicloud.com)'a deploy edebilirsiniz.
Bu opsiyonel bağımlılıkları istemiyorsanız bunun yerine `pip install fastapi` kurabilirsiniz.
Standard bağımlılıkları kurmak istiyor ama `fastapi-cloud-cli` olmasın diyorsanız, `pip install "fastapi[standard-no-fastapi-cloud-cli]"` ile kurabilirsiniz.
Standart bağımlılıkları kurmak istiyor ama `fastapi-cloud-cli` olmasın diyorsanız, `pip install "fastapi[standard-no-fastapi-cloud-cli]"` ile kurabilirsiniz.
///
+3 -3
View File
@@ -11,7 +11,7 @@ OpenAPI spesifikasyonunda ve otomatik API doküman arayüzlerinde kullanılan ş
| `title` | `str` | API'nin başlığı. |
| `summary` | `str` | API'nin kısa özeti. <small>OpenAPI 3.1.0, FastAPI 0.99.0 sürümünden itibaren mevcut.</small> |
| `description` | `str` | API'nin kısa açıklaması. Markdown kullanabilir. |
| `version` | `string` | API'nin sürümü. Bu, OpenAPI'nin değil, kendi uygulamanızın sürümüdür. Örneğin `2.5.0`. |
| `version` | `str` | API'nin sürümü. Bu, OpenAPI'nin değil, kendi uygulamanızın sürümüdür. Örneğin `2.5.0`. |
| `terms_of_service` | `str` | API'nin Kullanım Koşulları (Terms of Service) için bir URL. Verilirse, URL formatında olmalıdır. |
| `contact` | `dict` | Yayınlanan API için iletişim bilgileri. Birden fazla alan içerebilir. <details><summary><code>contact</code> alanları</summary><table><thead><tr><th>Parametre</th><th>Tip</th><th>Açıklama</th></tr></thead><tbody><tr><td><code>name</code></td><td><code>str</code></td><td>İletişim kişisi/kuruluşunu tanımlayan ad.</td></tr><tr><td><code>url</code></td><td><code>str</code></td><td>İletişim bilgilerine işaret eden URL. URL formatında OLMALIDIR.</td></tr><tr><td><code>email</code></td><td><code>str</code></td><td>İletişim kişisi/kuruluşunun e-posta adresi. E-posta adresi formatında OLMALIDIR.</td></tr></tbody></table></details> |
| `license_info` | `dict` | Yayınlanan API için lisans bilgileri. Birden fazla alan içerebilir. <details><summary><code>license_info</code> alanları</summary><table><thead><tr><th>Parametre</th><th>Tip</th><th>Açıklama</th></tr></thead><tbody><tr><td><code>name</code></td><td><code>str</code></td><td><strong>ZORUNLU</strong> (<code>license_info</code> ayarlanmışsa). API için kullanılan lisans adı.</td></tr><tr><td><code>identifier</code></td><td><code>str</code></td><td>API için bir [SPDX](https://spdx.org/licenses/) lisans ifadesi. <code>identifier</code> alanı, <code>url</code> alanıyla karşılıklı olarak dışlayıcıdır (ikisi aynı anda kullanılamaz). <small>OpenAPI 3.1.0, FastAPI 0.99.0 sürümünden itibaren mevcut.</small></td></tr><tr><td><code>url</code></td><td><code>str</code></td><td>API için kullanılan lisansa ait URL. URL formatında OLMALIDIR.</td></tr></tbody></table></details> |
@@ -74,9 +74,9 @@ Kullandığınız tüm tag'ler için metadata eklemek zorunda değilsiniz.
{* ../../docs_src/metadata/tutorial004_py310.py hl[21,26] *}
/// info | Bilgi
/// note | Not
Tag'ler hakkında daha fazlası için: [Path Operation Configuration](path-operation-configuration.md#tags).
Tag'ler hakkında daha fazlası için: [Path Operation Yapılandırması](path-operation-configuration.md#tags).
///
@@ -1,5 +1,6 @@
# Path Operation Yapılandırması { #path-operation-configuration }
Onu yapılandırmak için *path operation decorator*’ınıza geçebileceğiniz çeşitli parametreler vardır.
/// warning | Uyarı
@@ -66,19 +67,19 @@ Interactive docsta şöyle kullanılacaktır:
<img src="/img/tutorial/path-operation-configuration/image02.png">
## Response description { #response-description }
## Response Açıklaması { #response-description }
`response_description` parametresi ile response açıklamasını belirtebilirsiniz:
{* ../../docs_src/path_operation_configuration/tutorial005_py310.py hl[18] *}
/// info | Bilgi
/// note | Not
`response_description` özellikle responseu ifade eder; `description` ise genel olarak *path operation*’ı ifade eder.
///
/// check | Ek bilgi
/// tip | İpucu
OpenAPI, her *path operation* için bir response description zorunlu kılar.
@@ -8,7 +8,7 @@
{* ../../docs_src/path_params_numeric_validations/tutorial001_an_py310.py hl[1,3] *}
/// info | Bilgi
/// note | Not
FastAPI, 0.95.0 sürümünde `Annotated` desteğini ekledi (ve bunu önermeye başladı).
@@ -56,7 +56,7 @@ Dolayısıyla fonksiyonunuzu şöyle tanımlayabilirsiniz:
{* ../../docs_src/path_params_numeric_validations/tutorial002_py310.py hl[7] *}
Namun şunu unutmayın: `Annotated` kullanırsanız bu problem olmaz; çünkü `Query()` veya `Path()` için fonksiyon parametresi default değerlerini kullanmıyorsunuz.
Ancak şunu unutmayın: `Annotated` kullanırsanız bu problem olmaz; çünkü `Query()` veya `Path()` için fonksiyon parametresi default değerlerini kullanmıyorsunuz.
{* ../../docs_src/path_params_numeric_validations/tutorial002_an_py310.py *}
@@ -131,7 +131,7 @@ Ayrıca sayısal doğrulamalar da tanımlayabilirsiniz:
* `lt`: `l`ess `t`han
* `le`: `l`ess than or `e`qual
/// info | Bilgi
/// note | Not
`Query`, `Path` ve ileride göreceğiniz diğer class'lar ortak bir `Param` class'ının alt class'larıdır.
+4 -4
View File
@@ -20,7 +20,7 @@ Standart Python tip belirteçlerini kullanarak path parametresinin tipini fonksi
Bu durumda, `item_id` bir `int` olarak tanımlanır.
/// check | Ek bilgi
/// tip | İpucu
Bu sayede, fonksiyon içinde hata denetimi, kod tamamlama vb. konularda editör desteğine kavuşursunuz.
@@ -34,7 +34,7 @@ Bu örneği çalıştırıp tarayıcınızda [http://127.0.0.1:8000/items/3](htt
{"item_id":3}
```
/// check | Ek bilgi
/// tip | İpucu
Dikkat edin: fonksiyonunuzun aldığı (ve döndürdüğü) değer olan `3`, string `"3"` değil, bir Python `int`'idir.
@@ -66,7 +66,7 @@ Ancak tarayıcınızda [http://127.0.0.1:8000/items/foo](http://127.0.0.1:8000/i
Aynı hata, şu örnekte olduğu gibi `int` yerine `float` verirseniz de ortaya çıkar: [http://127.0.0.1:8000/items/4.2](http://127.0.0.1:8000/items/4.2)
/// check | Ek bilgi
/// tip | İpucu
Yani, aynı Python tip tanımıyla birlikte **FastAPI** size veri doğrulama sağlar.
@@ -82,7 +82,7 @@ Tarayıcınızı [http://127.0.0.1:8000/docs](http://127.0.0.1:8000/docs) adresi
<img src="/img/tutorial/path-params/image01.png">
/// check | Ek bilgi
/// tip | İpucu
Yine, sadece aynı Python tip tanımıyla **FastAPI** size otomatik ve interaktif dokümantasyon (Swagger UI entegrasyonuyla) sağlar.
@@ -1,5 +1,6 @@
# Query Parametreleri ve String Doğrulamaları { #query-parameters-and-string-validations }
**FastAPI**, parametreleriniz için ek bilgi ve doğrulamalar (validation) tanımlamanıza izin verir.
Örnek olarak şu uygulamayı ele alalım:
@@ -29,7 +30,7 @@ Bunu yapmak için önce şunları import edin:
{* ../../docs_src/query_params_str_validations/tutorial002_an_py310.py hl[1,3] *}
/// info | Bilgi
/// note | Not
FastAPI, 0.95.0 sürümünde `Annotated` desteğini ekledi (ve önermeye başladı).
@@ -348,7 +349,7 @@ O zaman bir `alias` tanımlayabilirsiniz; bu alias, parametre değerini bulmak i
Diyelim ki artık bu parametreyi istemiyorsunuz.
Bazı clientlar hâlâ kullandığı için bir süre tutmanız gerekiyor, ama dokümanların bunu açıkça <dfn title="kullanımdan kalkmış, kullanmamanız önerilir">deprecated</dfn> olarak göstermesini istiyorsunuz.
Bazı clientlar hâlâ kullandığı için bir süre tutmanız gerekiyor, ama dokümanların bunu açıkça <dfn title="kullanımdan kalkmış, kullanmamanız önerilir">kullanımdan kalkmış</dfn> olarak göstermesini istiyorsunuz.
O zaman `Query`ye `deprecated=True` parametresini geçin:
@@ -382,7 +383,7 @@ Pydanticte [`BeforeValidator`](https://docs.pydantic.dev/latest/concepts/vali
{* ../../docs_src/query_params_str_validations/tutorial015_an_py310.py hl[5,16:19,24] *}
/// info | Bilgi
/// note | Not
Bu özellik Pydantic 2 ve üzeri sürümlerde mevcuttur. 😎
+3 -3
View File
@@ -1,4 +1,4 @@
# Sorgu Parametreleri { #query-parameters }
# Query Parametreleri { #query-parameters }
Fonksiyonda path parametrelerinin parçası olmayan diğer parametreleri tanımladığınızda, bunlar otomatik olarak "query" parametreleri olarak yorumlanır.
@@ -65,13 +65,13 @@ Aynı şekilde, varsayılan değerlerini `None` yaparak isteğe bağlı query pa
Bu durumda, fonksiyon parametresi `q` isteğe bağlı olur ve varsayılan olarak `None` olur.
/// check | Ek bilgi
/// tip | İpucu
Ayrıca, **FastAPI** path parametresi olan `item_id`'nin bir path parametresi olduğunu ve `q`'nun path olmadığını fark edecek kadar akıllıdır; dolayısıyla bu bir query parametresidir.
///
## Sorgu parametresi tip dönüşümü { #query-parameter-type-conversion }
## Query parametresi tip dönüşümü { #query-parameter-type-conversion }
`bool` tipleri de tanımlayabilirsiniz, ve bunlar dönüştürülür:
+4 -4
View File
@@ -2,11 +2,11 @@
İstemcinin upload edeceği dosyaları `File` kullanarak tanımlayabilirsiniz.
/// info | Bilgi
/// note | Not
Upload edilen dosyaları alabilmek için önce [`python-multipart`](https://github.com/Kludex/python-multipart) yükleyin.
Bir [virtual environment](../virtual-environments.md) oluşturduğunuzdan, aktive ettiğinizden ve ardından paketi yüklediğinizden emin olun. Örneğin:
Bir [Sanal ortam](../virtual-environments.md) oluşturduğunuzdan, aktive ettiğinizden ve ardından paketi yüklediğinizden emin olun. Örneğin:
```console
$ pip install python-multipart
@@ -28,7 +28,7 @@ Bunun nedeni, upload edilen dosyaların "form data" olarak gönderilmesidir.
{* ../../docs_src/request_files/tutorial001_an_py310.py hl[9] *}
/// info | Bilgi
/// note | Not
`File`, doğrudan `Form`dan türeyen bir sınıftır.
@@ -64,7 +64,7 @@ Tipi `UploadFile` olan bir dosya parametresi tanımlayın:
* Bu sayede görüntüler, videolar, büyük binaryler vb. gibi büyük dosyalarda tüm belleği tüketmeden iyi çalışır.
* Upload edilen dosyadan metadata alabilirsiniz.
* [file-like](https://docs.python.org/3/glossary.html#term-file-like-object) bir `async` arayüze sahiptir.
* [`SpooledTemporaryFile`](https://docs.python.org/3/library/tempfile.html#tempfile.SpooledTemporaryFile) nesnesini dışa açar; bunu, file-like nesne bekleyen diğer librarylere doğrudan geçebilirsiniz.
* Gerçek bir Python [`SpooledTemporaryFile`](https://docs.python.org/3/library/tempfile.html#tempfile.SpooledTemporaryFile) nesnesini dışa açar; bunu, file-like nesne bekleyen diğer librarylere doğrudan geçebilirsiniz.
### `UploadFile` { #uploadfile }
+2 -2
View File
@@ -2,11 +2,11 @@
FastAPI'de **form field**'larını tanımlamak için **Pydantic model**'lerini kullanabilirsiniz.
/// info | Bilgi
/// note | Not
Form'ları kullanmak için önce [`python-multipart`](https://github.com/Kludex/python-multipart)'ı yükleyin.
Bir [virtual environment](../virtual-environments.md) oluşturduğunuzdan, onu etkinleştirdiğinizden ve ardından paketi kurduğunuzdan emin olun. Örneğin:
Bir [Sanal ortam](../virtual-environments.md) oluşturduğunuzdan, onu etkinleştirdiğinizden ve ardından paketi kurduğunuzdan emin olun. Örneğin:
```console
$ pip install python-multipart
@@ -2,7 +2,7 @@
`File` ve `Form` kullanarak aynı anda hem dosyaları hem de form alanlarını tanımlayabilirsiniz.
/// info | Bilgi
/// note | Not
Yüklenen dosyaları ve/veya form verisini almak için önce [`python-multipart`](https://github.com/Kludex/python-multipart) paketini kurun.
+5 -4
View File
@@ -1,8 +1,9 @@
# Form Verisi { #form-data }
JSON yerine form alanlarını almanız gerektiğinde `Form` kullanabilirsiniz.
/// info | Bilgi
/// note | Not
Formları kullanmak için önce [`python-multipart`](https://github.com/Kludex/python-multipart) paketini kurun.
@@ -28,11 +29,11 @@ Form parametrelerini `Body` veya `Query` için yaptığınız gibi oluşturun:
Örneğin OAuth2 spesifikasyonunun kullanılabileceği ("password flow" olarak adlandırılan) yollardan birinde, form alanları olarak bir `username` ve `password` göndermek zorunludur.
<dfn title="spesifikasyon">Spesifikasyon</dfn>, alanların adının tam olarak `username` ve `password` olmasını ve JSON değil form alanları olarak gönderilmesini gerektirir.
<dfn title="spesifikasyon">spesifikasyon</dfn>, alanların adının tam olarak `username` ve `password` olmasını ve JSON değil form alanları olarak gönderilmesini gerektirir.
`Form` ile `Body` (ve `Query`, `Path`, `Cookie`) ile yaptığınız aynı konfigürasyonları tanımlayabilirsiniz; validasyon, örnekler, alias (örn. `username` yerine `user-name`) vb. dahil.
/// info | Bilgi
/// note | Not
`Form`, doğrudan `Body`'den miras alan bir sınıftır.
@@ -62,7 +63,7 @@ Bu encoding'ler ve form alanları hakkında daha fazla okumak isterseniz, [<abbr
/// warning | Uyarı
Bir *path operation* içinde birden fazla `Form` parametresi tanımlayabilirsiniz, ancak JSON olarak almayı beklediğiniz `Body` alanlarını da ayrıca tanımlayamazsınız; çünkü bu durumda request'in body'si `application/x-www-form-urlencoded` ile encode edilmiş olur.
Bir *path operation* içinde birden fazla `Form` parametresi tanımlayabilirsiniz, ancak JSON olarak almayı beklediğiniz `Body` alanlarını da ayrıca tanımlayamazsınız; çünkü bu durumda request'in body'si `application/json` yerine `application/x-www-form-urlencoded` ile encode edilmiş olur.
Bu **FastAPI**'ın bir kısıtlaması değildir, HTTP protokolünün bir parçasıdır.
+3 -3
View File
@@ -72,7 +72,7 @@ Burada `UserIn` adında bir model declare ediyoruz; bu model plaintext bir passw
{* ../../docs_src/response_model/tutorial002_py310.py hl[7,9] *}
/// info | Bilgi
/// note | Not
`EmailStr` kullanmak için önce [`email-validator`](https://github.com/JoshData/python-email-validator) paketini kurun.
@@ -98,7 +98,7 @@ Artık bir browser password ile user oluşturduğunda, API response içinde ayn
Bu örnekte sorun olmayabilir; çünkü password’ü gönderen kullanıcı zaten aynı kişi.
Ancak aynı modeli başka bir *path operation* için kullanırsak, kullanıcının passwordlerini her clienta gönderiyor olabiliriz.
Namun aynı modeli başka bir *path operation* için kullanırsak, kullanıcının passwordlerini her clienta gönderiyor olabiliriz.
/// danger
@@ -251,7 +251,7 @@ Dolayısıyla IDsi `foo` olan item için bu *path operation*a request atar
}
```
/// info | Bilgi
/// note | Not
Ayrıca şunları da kullanabilirsiniz:
@@ -1,4 +1,4 @@
# Response Status Code { #response-status-code }
# Response Status Code'u { #response-status-code }
Bir response model tanımlayabildiğiniz gibi, herhangi bir *path operation* içinde `status_code` parametresiyle response için kullanılacak HTTP status code'u da belirtebilirsiniz:
@@ -18,7 +18,7 @@ Bir response model tanımlayabildiğiniz gibi, herhangi bir *path operation* iç
`status_code` parametresi, HTTP status code'u içeren bir sayı alır.
/// info | Bilgi
/// note | Not
Alternatif olarak `status_code`, Python'un [`http.HTTPStatus`](https://docs.python.org/3/library/http.html#http.HTTPStatus)'ı gibi bir `IntEnum` da alabilir.
@@ -24,7 +24,7 @@ Aynı tekniği JSON Schemayı genişletmek ve kendi özel ek bilgilerinizi ek
///
/// info | Bilgi
/// note | Not
OpenAPI 3.1.0 (FastAPI 0.99.0dan beri kullanılıyor), **JSON Schema** standardının bir parçası olan `examples` için destek ekledi.
@@ -123,7 +123,7 @@ FastAPIde OpenAPIye özel `examples`’ı, şu araçlar için `openapi_exa
/// tip | İpucu
Zaten **FastAPI** sürümü **0.99.0 veya üzerini** kullanıyorsanız, büyük olasılıkla bu detayları **atlanabilirsiniz**.
Zaten **FastAPI** sürümü **0.99.0 veya üzerini** kullanıyorsanız, büyük olasılıkla bu detayları **atlayabilirsiniz**.
Bunlar daha çok OpenAPI 3.1.0’ın henüz mevcut olmadığı eski sürümler için geçerlidir.
@@ -155,7 +155,7 @@ OpenAPI ayrıca spesifikasyonun diğer bölümlerine de `example` ve `examples`
* `File()`
* `Form()`
/// info | Bilgi
/// note | Not
Bu eski OpenAPIye özel `examples` parametresi, FastAPI `0.103.0` sürümünden beri `openapi_examples` olarak kullanılıyor.
@@ -171,7 +171,7 @@ Ve artık, deprecated olan eski tekil (ve özel) `example` alanına kıyasla bu
JSON Schemadaki bu yeni `examples` alanı, OpenAPIde başka yerlerde kullanılan (yukarıda anlatılan) metadatalı `dict` yapısından farklı olarak **sadece örneklerden oluşan bir `list`**tir.
/// info | Bilgi
/// note | Not
OpenAPI 3.1.0, JSON Schema ile bu yeni ve daha basit entegrasyonla yayımlandıktan sonra bile bir süre, otomatik dokümantasyonu sağlayan araç Swagger UI OpenAPI 3.1.0’ı desteklemiyordu (5.0.0 sürümünden beri destekliyor 🎉).
@@ -24,13 +24,13 @@ Güvenliği yönetmek için **FastAPI**nin sunduğu araçları kullanalım.
## Çalıştırın { #run-it }
/// info | Bilgi
/// note | Not
The [`python-multipart`](https://github.com/Kludex/python-multipart) paketi, `pip install "fastapi[standard]"` komutunu çalıştırdığınızda **FastAPI** ile birlikte otomatik olarak kurulur.
[`python-multipart`](https://github.com/Kludex/python-multipart) paketi, `pip install "fastapi[standard]"` komutunu çalıştırdığınızda **FastAPI** ile birlikte otomatik olarak kurulur.
Ancak `pip install fastapi` komutunu kullanırsanız, `python-multipart` paketi varsayılan olarak dahil edilmez.
Elle kurmak için bir [virtual environment](../../virtual-environments.md) oluşturduğunuzdan, onu aktive ettiğinizden emin olun ve ardından şununla kurun:
Elle kurmak için bir [Sanal ortam](../../virtual-environments.md) oluşturduğunuzdan, onu aktive ettiğinizden emin olun ve ardından şununla kurun:
```console
$ pip install python-multipart
@@ -60,7 +60,7 @@ Etkileşimli dokümantasyona gidin: [http://127.0.0.1:8000/docs](http://127.0.0.
<img src="/img/tutorial/security/image01.png">
/// check | Authorize butonu!
/// tip | Authorize butonu!
Artık parıl parıl yeni bir "Authorize" butonunuz var.
@@ -118,7 +118,7 @@ O yüzden basitleştirilmiş bu bakış açısından üzerinden geçelim:
Bu örnekte **OAuth2**yi, **Password** flow ile, **Bearer** token kullanarak uygulayacağız. Bunu `OAuth2PasswordBearer` sınıfı ile yaparız.
/// info | Bilgi
/// note | Not
"Bearer" token tek seçenek değildir.
@@ -140,7 +140,7 @@ Burada `tokenUrl="token"`, henüz oluşturmadığımız göreli bir URL olan `to
Göreli URL kullandığımız için, APIniz `https://example.com/` adresinde olsaydı `https://example.com/token` anlamına gelirdi. Ama APIniz `https://example.com/api/v1/` adresinde olsaydı, bu kez `https://example.com/api/v1/token` anlamına gelirdi.
Göreli URL kullanmak, [Behind a Proxy](../../advanced/behind-a-proxy.md) gibi daha ileri kullanım senaryolarında bile uygulamanızın çalışmaya devam etmesini garanti etmek açısından önemlidir.
Göreli URL kullanmak, [Bir Proxy Arkasında](../../advanced/behind-a-proxy.md) gibi daha ileri kullanım senaryolarında bile uygulamanızın çalışmaya devam etmesini garanti etmek açısından önemlidir.
///
@@ -148,7 +148,7 @@ Bu parametre o endpointi / *path operation*’ı oluşturmaz; fakat `/token`
Birazdan gerçek path operation’ı da oluşturacağız.
/// info | Teknik Detaylar
/// note | Teknik Detaylar
Eğer çok katı bir "Pythonista" iseniz, `token_url` yerine `tokenUrl` şeklindeki parametre adlandırma stilini sevmeyebilirsiniz.
@@ -176,7 +176,7 @@ Bu dependency, *path operation function* içindeki `token` parametresine atanaca
**FastAPI**, bu dependencyyi OpenAPI şemasında (ve otomatik API dokümanlarında) bir "security scheme" tanımlamak için kullanabileceğini bilir.
/// info | Teknik Detaylar
/// note | Teknik Detaylar
**FastAPI**, bir dependency içinde tanımlanan `OAuth2PasswordBearer` sınıfını OpenAPIde security scheme tanımlamak için kullanabileceğini bilir; çünkü bu sınıf `fastapi.security.oauth2.OAuth2`den kalıtım alır, o da `fastapi.security.base.SecurityBase`den kalıtım alır.
@@ -14,7 +14,7 @@ Bize mevcut kullanıcıyı verecek şekilde düzenleyelim.
Body'leri bildirmek için Pydantic'i nasıl kullanıyorsak, aynı şekilde onu başka her yerde de kullanabiliriz:
{* ../../docs_src/security/tutorial002_an_py310.py hl[5,12:6] *}
{* ../../docs_src/security/tutorial002_an_py310.py hl[5,12:16] *}
## `get_current_user` dependency'si oluşturun { #create-a-get-current-user-dependency }
@@ -52,7 +52,7 @@ Burada `Depends` kullandığınız için **FastAPI** karışıklık yaşamaz.
///
/// check | Ek bilgi
/// tip | İpucu
Bu dependency sisteminin tasarımı, hepsi `User` modeli döndüren farklı dependency'lere (farklı "dependable"lara) sahip olmamıza izin verir.
+3 -3
View File
@@ -42,7 +42,7 @@ $ pip install pyjwt
</div>
/// info | Bilgi
/// note | Not
RSA veya ECDSA gibi dijital imza algoritmaları kullanmayı planlıyorsanız, `pyjwt[crypto]` bağımlılığı olan `cryptography` kütüphanesini kurmalısınız.
@@ -120,7 +120,7 @@ Bir tane de kullanıcıyı authenticate edip geri döndüren bir yardımcı fonk
`authenticate_user`, veritabanında var olmayan bir username ile çağrıldığında, yine de sahte (dummy) bir hash'e karşı `verify_password` çalıştırıyoruz.
Bu, username geçerli olsun ya da olmasın endpoint'in yaklaşık aynı sürede yanıt vermesini sağlar; böylece mevcut username'leri saymaya yarayabilecek zamanlama saldırılarını (timing attacks) engeller.
Bu, username geçerli olsun ya da olmasın endpoint'in yaklaşık aynı sürede yanıt vermesini sağlar; böylece mevcut username'leri saymaya yarayabilecek **timing attacks** saldırılarını engeller.
/// note | Not
@@ -213,7 +213,7 @@ Uygulamayı, öncekiyle aynı şekilde authorize edin.
Username: `johndoe`
Password: `secret`
/// check | Ek bilgi
/// tip | İpucu
Kodun hiçbir yerinde düz metin password "`secret`" yok; sadece hash'lenmiş hâli var.
@@ -32,7 +32,7 @@ Genelde belirli güvenlik izinlerini (permission) belirtmek için kullanılırla
* `instagram_basic` Facebook / Instagram tarafından kullanılır.
* `https://www.googleapis.com/auth/drive` Google tarafından kullanılır.
/// info | Bilgi
/// note | Not
OAuth2de bir "scope", gerekli olan belirli bir izni ifade eden basit bir stringdir.
@@ -72,7 +72,7 @@ Bunu zorlamak istiyorsanız, `OAuth2PasswordRequestForm` yerine `OAuth2PasswordR
* Opsiyonel `client_id` (bu örnekte ihtiyacımız yok).
* Opsiyonel `client_secret` (bu örnekte ihtiyacımız yok).
/// info | Bilgi
/// note | Not
`OAuth2PasswordRequestForm`, `OAuth2PasswordBearer` gibi **FastAPI**ye özel “özel bir sınıf” değildir.
@@ -144,9 +144,9 @@ UserInDB(
)
```
/// info | Bilgi
/// note | Not
`**user_dict` için daha kapsamlı bir açıklama için [**Extra Models** dokümantasyonundaki ilgili bölüme](../extra-models.md#about-user-in-dict) geri dönüp bakın.
`**user_dict` için daha kapsamlı bir açıklama için [**Extra Models** dokümantasyonundaki ilgili bölüme](../extra-models.md#about-user-in-model-dump) geri dönüp bakın.
///
@@ -196,7 +196,7 @@ Dolayısıyla endpointimizde kullanıcıyı ancak kullanıcı varsa, doğru
{* ../../docs_src/security/tutorial003_an_py310.py hl[58:66,69:74,94] *}
/// info | Bilgi
/// note | Not
Burada `Bearer` değerine sahip ek `WWW-Authenticate` header’ını döndürmemiz de spesifikasyonun bir parçasıdır.
+1 -1
View File
@@ -4,7 +4,7 @@
Bu, [JSON Lines Akışı](stream-json-lines.md) ile benzerdir ancak tarayıcılar tarafından yerel olarak desteklenen [`EventSource` API'si](https://developer.mozilla.org/en-US/docs/Web/API/EventSource) ile `text/event-stream` formatını kullanır.
/// info | Bilgi
/// note | Not
FastAPI 0.135.0'da eklendi.
+1 -1
View File
@@ -352,6 +352,6 @@ $ fastapi dev
## Özet { #recap }
Bir SQL veritabanıyla etkileşim kurmak için [**SQLModel**](https://sqlmodel.tiangolo.com/) kullanabilir ve *data model* ile *table model* yaklaşımıyla kodu sadeleştirebilirsiniz.
Bir SQL veritabanıyla etkileşim kurmak için [**SQLModel**](https://sqlmodel.tiangolo.com/) kullanabilir ve *data model*ler ile *table model*ler kullanarak kodu sadeleştirebilirsiniz.
**SQLModel** dokümantasyonunda çok daha fazlasını öğrenebilirsiniz; **FastAPI** ile SQLModel kullanımı için daha uzun bir mini [tutorial](https://sqlmodel.tiangolo.com/tutorial/fastapi/) da bulunuyor. 🚀
+8
View File
@@ -2,6 +2,14 @@
`StaticFiles` kullanarak bir dizindeki statik dosyaları otomatik olarak sunabilirsiniz.
/// tip | İpucu
Bir frontend host etmeniz gerekiyorsa, bunun yerine `app.frontend()` kullanın; bununla ilgili bilgileri [Frontend](frontend.md) bölümünde okuyabilirsiniz.
`app.frontend()`, altında `StaticFiles` kullanır ve frontend'ler için client-side routing'i handle etmek gibi ek avantajlar sağlar.
///
## `StaticFiles` Kullanımı { #use-staticfiles }
* `StaticFiles`'ı import edin.
+2 -2
View File
@@ -2,7 +2,7 @@
Bir veri dizisini “akış” olarak göndermek istediğiniz durumlar olabilir; bunu **JSON Lines** ile yapabilirsiniz.
/// info | Bilgi
/// note | Not
FastAPI 0.134.0 ile eklendi.
@@ -48,7 +48,7 @@ Responseun `application/json` yerine `application/jsonl` içerik türü (Cont
Bir JSON dizisine (Python list eşdeğeri) çok benzer; ancak öğeler `[]` içine alınmak ve araya `,` konmak yerine, her satırda **bir JSON nesnesi** vardır; bunlar yeni satır karakteri ile ayrılır.
/// info | Bilgi
/// note | Not
Önemli nokta, uygulamanız her satırı sırayla üretebilirken, istemcinin de önceki satırları tüketmeye devam edebilmesidir.
+5 -2
View File
@@ -8,7 +8,7 @@ Bununla birlikte **FastAPI** ile [pytest](https://docs.pytest.org/)'i doğrudan
## `TestClient` Kullanımı { #using-testclient }
/// info | Bilgi
/// note | Not
`TestClient` kullanmak için önce [`httpx`](https://www.python-httpx.org)'i kurun.
@@ -75,6 +75,7 @@ Ayrıca **FastAPI** uygulamanız birden fazla dosya/modül vb. ile de oluşturul
`main.py` dosyasında **FastAPI** uygulamanız bulunuyor olsun:
{* ../../docs_src/app_testing/app_a_py310/main.py *}
### Test Dosyası { #testing-file }
@@ -93,6 +94,7 @@ Bu dosya aynı package içinde olduğu için, `main` modülünden (`main.py`) `a
{* ../../docs_src/app_testing/app_a_py310/test_main.py hl[3] *}
...ve test kodunu da öncekiyle aynı şekilde yazabilirsiniz.
## Test Etme: Genişletilmiş Örnek { #testing-extended-example }
@@ -127,6 +129,7 @@ Sonrasında `test_main.py` dosyanızı genişletilmiş testlerle güncelleyebili
{* ../../docs_src/app_testing/app_b_an_py310/test_main.py *}
Client'ın request içinde bir bilgi göndermesi gerektiğinde ve bunu nasıl yapacağınızı bilemediğinizde, `httpx` ile nasıl yapılacağını aratabilirsiniz (Google) ya da HTTPXin tasarımı Requestse dayandığı için `requests` ile nasıl yapıldığını da arayabilirsiniz.
Sonra testlerinizde aynısını uygularsınız.
@@ -141,7 +144,7 @@ Sonra testlerinizde aynısını uygularsınız.
Backend'e veri geçme hakkında daha fazla bilgi için (`httpx` veya `TestClient` kullanarak) [HTTPX dokümantasyonu](https://www.python-httpx.org)'na bakın.
/// info | Bilgi
/// note | Not
`TestClient`'ın Pydantic model'lerini değil, JSON'a dönüştürülebilen verileri aldığını unutmayın.
+4 -2
View File
@@ -53,7 +53,7 @@ $ cd awesome-project
## Virtual Environment Oluşturun { #create-a-virtual-environment }
Bir Python projesi üzerinde **ilk kez** çalışmaya başladığınızda, **virtual environment**'i <dfn title="başka seçenekler de var, bu basit bir yönergedir">projenizin içinde</dfn> oluşturun.
Bir Python projesi üzerinde **ilk kez** çalışmaya başladığınızda, virtual environment'i **<dfn title="başka seçenekler de var, bu basit bir yönergedir">projenizin içinde</dfn>** oluşturun.
/// tip | İpucu
@@ -443,6 +443,8 @@ Böylece `python` çalıştırdığınızda, o virtual environment içinden (ve
Artık projeniz üzerinde çalışmaya başlayabilirsiniz.
/// tip | İpucu
Yukarıdaki her şeyin aslında ne olduğunu anlamak ister misiniz?
@@ -517,7 +519,7 @@ $ pip install "harry==3"
Sonuç olarak global Python environment'ınızda `harry` versiyon `3` kurulu olur.
Ve `philosophers-stone`'u tekrar çalıştırmaya kalkarsanız, `harry` versiyon `1`e ihtiyaç duyduğu için **çalışmama** ihtimali vardır.
Ve `philosophers-stone`'u tekrar çalıştırmaya kalkarsanız, `harry` versiyon `1`'e ihtiyaç duyduğu için **çalışmama** ihtimali vardır.
```mermaid
flowchart LR