Cluster ERP sunucusu, create_app fonksiyonunun src/cluster_erp/server/app.py içinde kurduğu tek bir FastAPI uygulamasıdır. Bu sayfa HTTP yollarının nasıl oluştuğunu, etkileşimli API belgelerinin nerede bulunduğunu, yolların hangi içerik türlerini kullandığını ve bir isteğin soketten hizmete kadar başına neler geldiğini açıklar. Uç noktaları listelemez; API başvurusu her yol grubu için bir sayfaya bağlanır.
Kısaca¶
- Her arka uç modülü yollarını
ModuleBase.api_prefixdeğeri olan/api/v1/<module>altına bağlar (src/cluster_erp/core/module_base.py:37-38).fleetveintranetmodülleri aynı öneki sabit metin olarak yazar (src/cluster_erp/modules/fleet/module.py:310,src/cluster_erp/modules/intranet/module.py:172). - Modül kayıt defteri her modülü yüklerken onun
register_routesmetodunu çağırır (src/cluster_erp/core/module_registry.py:49-51). - Modüller dışındaki paylaşılan yollar
src/cluster_erp/server/routes/içindedir vecreate_apptarafından eklenir (src/cluster_erp/server/app.py:1432-1450). - Etkileşimli belge sayfaları yalnız
debugayarı açıkken vardır (src/cluster_erp/server/app.py:1296-1303). - İstek ve yanıt gövdeleri JSON'dur; dosya yüklemeleri (çok parçalı form verisi) ve dosya indirmeleri bunun dışındadır.
Temel yollar¶
Tablo sunucunun yanıtladığı yolları gruplar. Modül ve paylaşılan yol sayıları API başvurusu sayfasındadır.
| Yol ailesi | Sahibi | Yolun kuruluşu | Kaynak |
|---|---|---|---|
/api/v1/<module>/... |
28 arka uç modülü | api_prefix, yönlendirici öneki ve yol |
src/cluster_erp/core/module_base.py:37-38 |
/api/v1/notes, /api/v1/attachments, /api/v1/email, /api/v1/chat |
paylaşılan sunucu yolları | yönlendiricinin prefix bağımsız değişkeni |
src/cluster_erp/server/routes/notes.py:14, src/cluster_erp/server/routes/attachments.py:27, src/cluster_erp/server/routes/email.py:22, src/cluster_erp/server/routes/chat.py:23 |
/api/v1/parties/composite, /api/v1/parties/{party_id}/roles/... |
paylaşılan sunucu yolları | taraflar önekinde ikinci bir yönlendirici | src/cluster_erp/server/routes/party_composite.py:27, src/cluster_erp/server/routes/party_roles.py:31 |
/api/v1/{module}/_fields/..., /api/v1/_overlay |
kiracı alanları | yolun içinde bir modül adı | src/cluster_erp/server/routes/tenant_fields.py:42-43 |
/api/v1/signup/..., /api/v1/vendor/... |
kayıt ve operatör konsolu | yalnız multi_tenant açıkken eklenir |
src/cluster_erp/server/app.py:1440-1450 |
/api/v1/modules, /api/v1/_meta, /api/v1/_switches |
uygulama | @app.get ile bildirilir |
src/cluster_erp/server/app.py:1507-1572 |
/health, /ready, /.well-known/security.txt |
uygulama | @app.get ile bildirilir |
src/cluster_erp/server/app.py:1459-1504 |
/app/..., /app/v/... |
web uygulaması statik dosyaları | webapp klasörü varsa app.mount |
src/cluster_erp/server/app.py:1633-1644 |
Modül önekleri¶
Çoğu modül prefix=self.api_prefix ile bir module_router oluşturur, alt modül yönlendiricilerini ona ekler ve onu bir yetkilendirme bağımlılığıyla uygulamaya ekler. Inventory modülü buna örnektir (src/cluster_erp/modules/inventory/module.py:52-62). Bazı modüller module_router kullanmaz ve öneki doğrudan app.include_router çağrısına verir; örneğin analytics, app_store, logs, mail, privacy ve records (src/cluster_erp/modules/analytics/module.py:55, src/cluster_erp/modules/records/module.py:50-52).
Bir alt modül yönlendiricisi kendi prefix değerini ekler; örneğin /warehouses (src/cluster_erp/modules/inventory/warehouses/routes.py:33). Bazı yönlendiricilerin öneki yoktur ve kaynak bölümünü her yolun içine yazar: crm yönlendiricileri, calendars yönlendiricisi, parties yönlendiricileri, satış siparişi yönlendiricileri, para birimi yönlendiricisi ve müşteri aboneliği yönlendiricisi (src/cluster_erp/modules/crm/customers/routes.py:28, src/cluster_erp/modules/calendars/routes.py:44, src/cluster_erp/modules/parties/parties/routes.py:28, src/cluster_erp/modules/sales_orders/orders/routes.py:33, src/cluster_erp/server/routes/currencies.py:18, src/cluster_erp/modules/subscriptions/customer_subscriptions/routes.py:30-34). Modül sayfaları her yolun tam yolunu gösterir; okurun parçaları toplaması gerekmez.
OpenAPI erişilebilirliği¶
create_app, docs_url="/api/docs" ve redoc_url="/api/redoc" değerlerini yalnız settings.debug doğruyken verir; aksi halde ikisi de None olur (src/cluster_erp/server/app.py:1296-1303). debug ayarının varsayılanı False değeridir (src/cluster_erp/config/settings.py:176). Çağrı openapi_url bağımsız değişkeni vermez; çatının varsayılanı geçerlidir, bkz. FastAPI başvurusu. İki yol include_in_schema=False ile şemadan çıkarılır: kapalı kayıt yoklaması ve /.well-known/security.txt (src/cluster_erp/server/app.py:1455, src/cluster_erp/server/app.py:1459). Her yönlendirici, üretilen şemada işlemleri gruplayan tags verir; örneğin tags=["inventory-warehouses"] (src/cluster_erp/modules/inventory/warehouses/routes.py:33).
İçerik türleri¶
| İçerik | Nerede | Kaynak |
|---|---|---|
| JSON istek ve yanıt gövdeleri | Pydantic gövdesi veya response_model taşıyan her yol |
modül sayfalarındaki yol dekoratörleri |
| Çok parçalı form verisi | 6 yol UploadFile alır: ek yükleme ve değiştirme, posta taslağı eki, taraf fotoğrafı, ürün fotoğrafı, ürün modeli fotoğrafı |
src/cluster_erp/server/routes/attachments.py:62, src/cluster_erp/modules/mail/messages/routes.py:130, src/cluster_erp/modules/parties/parties/routes.py:187, src/cluster_erp/modules/products_and_services/products/routes.py:216, src/cluster_erp/modules/products_and_services/product_models/routes.py:150 |
| Dosya indirmeleri | Response döndüren yollar; örneğin ek indirme, belge sürümü dosyası, ticari belge indirme, gizlilik dışa aktarımı |
src/cluster_erp/server/routes/attachments.py:102, src/cluster_erp/modules/documents/documents/routes.py:240, src/cluster_erp/modules/sales_orders/trade_documents/routes.py:84, src/cluster_erp/modules/privacy/requests/routes.py:153 |
text/calendar |
etkinlik iCalendar dışa aktarımı | src/cluster_erp/modules/intranet/events/routes.py:307 |
image/svg+xml, application/dxf |
yerleşim düzeni çıktısı | src/cluster_erp/modules/nesting/nesting_jobs/routes.py:322-394 |
text/plain |
/.well-known/security.txt |
src/cluster_erp/server/app.py:1459-1466 |
| gzip kodlaması | 1 KB ve üzeri yanıtlar | src/cluster_erp/server/app.py:1323 |
Bir isteğin yolu¶
Diyagram, bir modül yoluna giden kimliği doğrulanmış bir isteği izler. Zamanlamayı değil, kodun ne yaptığını gösterir. Çatının bir yolun bağımlılıklarını hangi sırayla çözdüğü projenin kodunda belirtilmez; bu yüzden üç bağımlılık birlikte gösterilir.
sequenceDiagram participant Client participant Middleware participant Dependencies participant Handler participant Service participant Database Client->>Middleware: HTTP isteği Note over Middleware: _security_headers aşırı büyük gövdeyi 413 ile reddeder Middleware->>Dependencies: yolu çağır Note over Dependencies: get_db_session, require_app, require_permission Dependencies->>Database: kiracı oturumunu aç, denetim bağlamını yaz Dependencies->>Handler: kullanıcı ve oturum ya da 401, 403, 422 Handler->>Service: doğrulanmış şema Service->>Database: sorgu ve flush Service-->>Handler: sonuç veya AppError Handler-->>Middleware: yanıt modeli Note over Middleware: ilk bayttan önce commit, etkinlik günlüğü, güvenlik başlıkları Middleware-->>Client: JSON yanıtı
Aynı adımlar düz metinle:
| Adım | Ne olur | Kaynak |
|---|---|---|
| Gövde sınırı | max_request_body_bytes üzerindeki bir Content-Length, REQUEST_TOO_LARGE koduyla 413 alır. |
src/cluster_erp/server/app.py:1390-1411 |
| Oturum | get_db_session kiracı veritabanını çözer, bir oturum açar ve eylemciyi, IP adresini, istemci yazılım dizgesini, oturum kimliğini ve bağıntı kimliğini veritabanı oturum ayarlarına yazar. |
src/cluster_erp/server/dependencies.py:160-200, src/cluster_erp/server/dependencies.py:34-72 |
| Yetkilendirme | require_app modülün kurulu, lisanslı ve koltuklu durumunu denetler ve bir entitlement.* koduyla 403 atar. |
src/cluster_erp/server/entitlements.py:225-273 |
| Yetki | require_permission kullanıcıyı çözer, listelenen her yetki kodunu ister ve ABAC ilkelerini değerlendirir. |
src/cluster_erp/modules/auth/guards.py:205-240 |
| Doğrulama | Şemaya uymayan bir gövde veya parametre VALIDATION_ERROR koduyla 422 alır. |
src/cluster_erp/server/error_handler.py:226-246 |
| İşleyici ve hizmet | İşleyici hizmeti oturumla kurar ve çağırır; hizmetler iş kuralı hatalarında AppError atar. |
src/cluster_erp/modules/inventory/warehouses/routes.py:108-116 |
| Commit | CommitBeforeResponseMiddleware, yanıt başlarken oturumun commit kancasını çalıştırır. |
src/cluster_erp/server/middleware.py:25-57, src/cluster_erp/server/dependencies.py:168-190 |
| Günlük ve başlıklar | ActivityLogMiddleware isteği kaydeder; _security_headers güvenlik başlıklarını ekler. |
src/cluster_erp/server/middleware.py:424, src/cluster_erp/server/app.py:1412-1429 |
Ara katman sırası ve her katman İstek hattı ve ara katmanlar sayfasında anlatılır.
Tanıtılan terimler¶
| Terim | Kod tanımlayıcısı | Tanım | Türkçe terim | Kaynak |
|---|---|---|---|---|
| API prefix | api_prefix |
Bir modülün yollarının temel yolu; /api/v1/ ve ardından modül adı. |
API öneki | src/cluster_erp/core/module_base.py:37-38 |
| module router | module_router |
Bir modülün API önekiyle oluşturduğu ve alt modül yönlendiricilerini içine eklediği yönlendirici. | modül yönlendiricisi | src/cluster_erp/modules/inventory/module.py:52 |
İlgili sayfalar¶
- API başvurusu
- Kimlik doğrulama ve başlıklar
- API kuralları
- Hatalar
- Sunucu başlatma ve uygulama fabrikası
- Modül yaşam döngüsü
92f8051 numaralı commit ile 2026-11-13 tarihinde doğrulandı.