Bu proje, FastAPI kullanılarak geliştirilmiş bir Blog API'sidir. Kullanıcıların blog yazıları oluşturmasına, düzenlemesine, silmesine ve yorum yapmasına olanak tanır.
Not: Herhangi bir hata ile karşılaşırsanız bana bariscem@proton.me adresinden ulaşabilirsiniz. Sorununuzu çözmekten memnuniyet duyarım.
-
Kullanıcı Yönetimi:
- Kullanıcı oluşturma.
- Kullanıcı listeleme.
- Tekil kullanıcı getirme.
-
Kategori Yönetimi:
- Kategori oluşturma.
- Kategori düzenleme.
- Kategori silme.
- Tüm kategorileri listeleme.
-
Blog Yazı Yönetimi:
- Yazı oluşturma.
- Yazı düzenleme.
- Yazı silme.
- Tüm yazıları listeleme.
- Tekil yazı getirme.
- Yazıya ait tüm yorumları listeleme.
-
Yorum Yönetimi:
- Yorum oluşturma.
- Yorum silme.
-
Güvenlik:
- Kullanıcı parolaları için güvenli hashleme (bcrypt).
- Ortam değişkenleriyle veritabanı bağlantı bilgilerini yönetme.
-
Mail Entragrasyonu:
- Kullanıcı yeni hesap oluştururken onay e-postası gönderme simülasyonu yapar.
- Yeni bir yorum eklendiği zaman gönderi sahibine bilgilendirme yapar.
-
Backend:
- FastAPI: Modern, hızlı ve kolay bir Python frameworkü.
- SQLAlchemy: Python için güçlü bir ORM.
- PostgreSQL: Güçlü bir ilişkisel veritabanı sistemine dayalı.
- bcrypt: Parola hashleme işlemleri için kullanılır.
- Celery: Asenkron görev kuyruğu ve dağıtılmış görev işleme sistemi.
- Redis: Hızlı, açık kaynaklı, bellek içi veri yapısı deposu.
-
Diğer:
- Pydantic V2: Veri doğrulama ve seri hale getirme işlemleri için.
- Docker: Uygulamanın konteynerize edilmesi için.
- Docker Compose: Birden fazla servisi kolayca yönetmek için.
- Docker Kurulumu: Projenin çalışması için Docker'in kurulu olması gerekmektedir.
- Docker Compose Kurulumu: Servisleri bir arada yönetmek için Docker Compose'in kurulu olması gerekmektedir.
-
Proje Deposu Klonlama:
git clone https://github.com/0Baris/fastapi-blog-api.git cd fastapi-blog-api -
.envDosyasını Oluşturma ve Yapılandırma:Projenin kök dizininde
.envdosyası oluşturun ve aşağıdaki ortam değişkenlerini ekleyin:POSTGRES_USER=blog_user # PostgreSQL kullanıcı adı POSTGRES_PASSWORD=blog_pass # PostgreSQL şifresi POSTGRES_DB=blog_db # PostgreSQL veritabanı adı DATABASE_URL=postgresql://blog_user:blog_pass@db:5432/blog_db # Veritabanı bağlantısı CELERY_BROKER_URL=redis://localhost:6379/0 # Celery broker (Redis) URL'i CELERY_RESULT_BACKEND=redis://localhost:6379/0 # Celery sonuç backend'i (Redis) URL'i MAIL_USERNAME=xyz@gmail.com # E-posta gönderme kullanıcı adı MAIL_PASSWORD=apppasword # E-posta gönderme şifresi (uygulama şifresi) MAIL_FROM=xyz@gmail.com # Gönderen e-posta adresi MAIL_PORT=587 # E-posta sunucu portu MAIL_SERVER=smtp.gmail.com # E-posta sunucu adresi MAIL_FROM_NAME="Blog API" # Gönderen adı MAIL_TLS=True # TLS şifrelemesi kullanılsın mı? MAIL_SSL=False # SSL şifrelemesi kullanılsın mı?
-
Docker Konteynerlerini Başlatma:
docker compose up --build
Bu komut, Docker imajlarını oluşturur ve konteynerleri başlatır.
-
Geliştirme Sunucusuna Erişim:
Tarayıcıda
http://localhost:8000/docsveyahttp://localhost:8000/redocadreslerinden API dokümantasyonuna ulaşabilirsiniz.
Aşağıda, API endpoint'leri ve nasıl kullanılacakları açıklanmıştır.
-
Tüm Kullanıcıları Getirme:
- Endpoint:
/api/v1/users/ - Yöntem:
GET
- Endpoint:
-
Tekil Kullanıcıyı Getirme:
- Endpoint:
/api/v1/users/{user_id} - Yöntem:
GET
- Endpoint:
-
Kullanıcı Oluşturma:
- Endpoint:
/api/v1/users/ - Yöntem:
POST - İstek Gövdesi:
{ "username": "test", "email": "test@example.com", "password": "benbirsifreyim123" }
- Endpoint:
-
Tüm Kategorileri Getirme:
- Endpoint:
/api/v1/category/ - Yöntem:
GET
- Endpoint:
-
Tekil Kategori Getirme:
- Endpoint:
/api/v1/category/{category_id} - Yöntem:
GET
- Endpoint:
-
Kategori Oluşturma:
- Endpoint:
/api/v1/category/ - Yöntem:
POST - İstek Gövdesi:
{ "title": "Teknoloji" }
- Endpoint:
-
Kategori Güncelleme:
- Endpoint:
/api/v1/category/update/{category_id} - Yöntem:
PUT - İstek Gövdesi:
{ "title": "Yeni Kategori" }
- Endpoint:
-
Kategori Silme:
- Endpoint:
/api/v1/categories/delete/{category_id} - Yöntem:
DELETE
- Endpoint:
-
Tüm Yazıları Getirme:
- Endpoint:
/api/v1/posts/ - Yöntem:
GET
- Endpoint:
-
Tekil Yazı Getirme:
- Endpoint:
/api/v1/posts/{post_id} - Yöntem:
GET
- Endpoint:
-
Yazı Oluşturma:
- Endpoint:
/api/v1/posts/ - Yöntem:
POST - İstek Gövdesi:
{ "title": "Python ile FastAPI Kullanımı", "content": "FastAPI, modern bir Python frameworküdür.", "category_id": 1, "author_id": 1 }
- Endpoint:
-
Yazı Güncelleme:
- Endpoint:
/api/v1/posts/update/{post_id} - Yöntem:
PUT - İstek Gövdesi:
{ "title": "Güncellenmiş Yazı Başlığı", "content": "Güncellenmiş yazı içeriği." }
- Endpoint:
-
Yazı Silme:
- Endpoint:
/api/v1/posts/delete/{post_id} - Yöntem:
DELETE
- Endpoint:
-
Yorum Ekleme:
- Endpoint:
/api/v1/comments/{post_id}/add - Yöntem:
POST - İstek Gövdesi:
{ "content": "Bu bir test yorumudur.", "author_id": 1 }
- Endpoint:
-
Yorum Silme:
- Endpoint:
/api/v1/comments/{post_id}/delete - Yöntem:
DELETE
- Endpoint:
Katkıda bulunmak isterseniz, lütfen aşağıdaki adımları izleyin:
-
Fork'layın: Projeyi GitHub'da forklayın.
-
Yeni Bir Dal Oluşturun:
git checkout -b feature/your-feature-name
-
Değişiklikleri Yapın ve Commit Edin:
git add . git commit -m "Özellik: Yeni özellik eklendi."
-
Dalınızı Push Edin:
git push origin feature/your-feature-name
-
Pull Request Oluşturun: GitHub üzerinden orijinal depoya pull request açın ve değişikliklerinizi açıklayın.
Bu proje MIT Lisansı altında lisanslanmıştır.
- FastAPI Dokümantasyonu
- SQLAlchemy ORM Dokümantasyonu
- Using FastAPI with SQLAlchemy
- Build a CRUD App with FastAPI and SQLAlchemy
- Creating a CRUD API with FastAPI, Medium
- Strong Password Hashing with SQLAlchemy, Medium
- Empowering Applications with Asynchronous Magic, Medium
Eğer uygulama çalışmadıysa, aşağıdaki adımları izleyin:
-
Logları Kontrol Edin:
- Docker loglarını kontrol etmek için:
docker compose logs app
- PostgreSQL loglarını kontrol etmek için:
docker compose logs db
- Docker loglarını kontrol etmek için:
-
Ortam Değişkenlerini Doğrulayın:
.envdosyasındaki yapılandırmaların doğru olduğundan emin olun.
-
Dockerfile'i ve
docker-compose.yml'i Denetleyin:Dockerfilevedocker-compose.ymldosyalarının son güncellemeyle uyumlu olduğundan emin olun.
-
Pydantic Modellerini Yeniden Oluşturun:
- Eğer Pydantic V2 kullanıyorsanız, modellerinizde
from_attributes = Truekullanıldığından emin olun. - İlişkiler için
.rebuild()yöntemini çağırın.
- Eğer Pydantic V2 kullanıyorsanız, modellerinizde
Projeyle ilgili sorularınız, önerileriniz veya geri bildirimleriniz için bana ulaşabilirsiniz:
- E-posta: bariscem@proton.me
- LinkedIn: Barış Cem Ant
- GitHub: Barış Cem Ant