Modül tanımı
CoSuite modüllerini manifestte tanımla (sözleşme 1.7). Özellikler, OpenAPI 3.1 ve kapsamlarla API, webhook'lar, provides, veri kategorileri, pazarlar ve test kuralları.
Sözleşme sürümü 1.7'den bu yana manifestindeki her modül kendini ayrıntılı olarak tanımlayabilir. CoSuite kataloğu, kayıt akışı, uygulamanın CoSuite'teki sayfası, cosuite.io ürün sayfaları ve (Faz 2'de) müşteri API başvuru belgesi bu alanlardan üretilir. Her alan isteğe bağlıdır; bir 1.6 manifesti olduğu gibi geçerli kalır.
Örnek
{
"key": "dent.treatment",
"name": { "tr": "Hasta ve tedavi planı", "en": "Patients and treatment plans", "az": "Xəstə və müalicə planı" },
"description": { "tr": "Hasta kartı ve tedavi planı.", "en": "Patient records and treatment plans.", "az": "Xəstə kartı və müalicə planı." },
"limits": [{ "key": "smsPerMonth", "unit": "count_per_month" }],
"features": [
{ "key": "plan_pdf", "name": { "tr": "Tedavi planı PDF'i", "en": "Treatment plan PDF", "az": "Müalicə planı PDF" } },
{ "key": "sms", "name": { "tr": "SMS hatırlatma", "en": "SMS reminders", "az": "SMS xatırlatma" }, "limit": "smsPerMonth" }
],
"api": { "version": "2026-11", "openapi": "/openapi.json", "scopes": [{ "key": "patients:read" }, { "key": "patients:write" }] },
"webhooks": [{ "type": "treatment.completed", "scope": "patients:read", "schema": { "type": "object" } }],
"provides": [],
"dataCategories": ["identity", "contact", "health"],
"markets": [
{ "country": "TR", "locales": ["tr"] },
{ "country": "AZ", "locales": ["az"], "price": { "currency": "AZN", "amount": 25 } }
]
}
Alanlar
| Alan | Anlamı |
|---|---|
key, name, limits, usage |
Önceki sürümlerden değişmedi (bkz. sözleşme). Modül anahtarı <appKey>.<module>; name dil başına, en fazla 200 karakter. |
description |
Dil başına açıklama, en fazla 1000 karakter. |
features[] |
Modülün yetenekleri: key (küçük harf, ^[a-z][a-z0-9_]*$), dil başına name, isteğe bağlı dil başına description ve bağlı olduğu isteğe bağlı bir limit (aynı modülün limits[].key değerlerinden biri). |
api |
Modülün müşterilere açtığı uçlar. openapi: bir OpenAPI 3.1 belgesi; ya bir URL (https ya da baseUrl adresine göre göreli bir yol; yalnızca JSON, en fazla 2 MB) ya da gömülü bir nesne. scopes[]: modülün resource:action biçimindeki kapsamları (patients:read), her biri isteğe bağlı dil başına bir name ile. version: API sürümün. |
webhooks[] |
Modülün yaydığı olaylar: type (noktalı küçük harf, örneğin treatment.completed), isteğe bağlı dil başına name ve description, isteğe bağlı bir abonelik scope değeri (api.scopes içinden biri) ve data için bir JSON Schema. |
provides[] |
Modülün CoSuite'te üstlendiği ortak iş işlevleri: crm, quotes, einvoice, expenses, inventory, projects, inbox, booking, reviews, payments, reports, website, seo, social, shipping, hr, pos. Aynı işletme için aynı işlevi aynı anda iki modül sağlamaz. |
dataCategories[] |
Modülün işlediği kişisel veriler: identity, contact, financial, health, location, biometric, children, communications, media, usage, employment, legal. Gizlilik bildirimleri (GDPR, KVKK) ve inceleme için kullanılır. |
markets[] |
Modülün sunulduğu ülkeler (country, ISO 3166-1 alpha-2) ve dilleri (locales, manifestin locales listesinden alınır); isteğe bağlı bir ülke fiyatı { currency, amount }. Boşsa pazar CoSuite'te belirlenir. |
Sınırlar bir bakışta: modül başına en fazla 64 özellik, 64 kapsam, 64 webhook, 16 provides, 32 veri kategorisi ve 100 pazar.
Uyumluluk testinin uyguladığı kurallar
Uyumluluk testi yalnızca doldurduğun alanları denetler. İş ortağı portalı da gönderdiğinde aynı denetimleri çalıştırır.
- Her pazar dilinde metin.
marketsiçinde kullanılan her dil için modülünnamevedescriptionalanları ile her özelliğinnamealanı doldurulmuş olmalıdır. - Pazar dilleri manifestten gelir.
markets[].localesiçindeki her dil, manifestinlocaleslistesinde de bulunmalıdır. features,api.scopes,webhooks(typedeğerine göre) vemarkets(countrydeğerine göre) içinde yinelenen anahtar olmaz;providesiçinde de yineleme olmaz.- Özellik limitleri mevcuttur. Bir özelliğin
limitdeğeri modülünlimits[].keydeğerlerinden biri olmalıdır. - Webhook kapsamları mevcuttur. Bir webhook'un
scopedeğeri birapitanımı gerektirir veapi.scopesiçinden biri olmalıdır. - Yalnızca bilinen değerler.
providesvedataCategoriesyalnızca yukarıda listelenen değerleri kabul eder. CoSuite'in kendisi bilinmeyen değerleri yok sayar (ileriye uyumluluk), ama test yazım hatalarını yakalamak için onları reddeder. apiiçeren her modül için OpenAPI denetlenir: belge indirilir (ya da satır içinden okunur) ve aşağıda anlatıldığı gibi doğrulanır.
OpenAPI gereksinimleri
Test, CoSuite'in dayandığı kısımları denetler; tam bir şema doğrulaması değildir.
openapideğeri3.1.x;info.titleveinfo.versionmevcut;pathsboş değil ve her yol/ile başlıyor.- Her işlem (operation),
cosuitegüvenlik şeması üzerinden en az bir kapsam gerektirir:security: [{ "cosuite": ["<scope>"] }]. Kendisecuritytanımı olmayan bir işlem, kök düzeydekisecuritytanımını devralır. - Belgede kullanılan her kapsam, modülün
api.scopeslistesinde tanımlanmış olmalıdır. operationIddeğerleri benzersizdir.openapibir URL olduğunda:baseUrladresin https ise https olmalı, yönlendirme olmadan 10 saniye içinde JSON ile200dönmeli (YAML desteklenmez) ve en fazla 2 MB olmalıdır.
En sade geçerli belge:
{
"openapi": "3.1.0",
"info": { "title": "DentCloud treatment API", "version": "2026-11" },
"security": [{ "cosuite": ["patients:read"] }],
"components": {
"securitySchemes": {
"cosuite": { "type": "http", "scheme": "bearer", "bearerFormat": "CoSuite API key", "description": "CoSuite customer API key; the gateway checks the scopes in security" }
}
},
"paths": {
"/patients": {
"get": { "operationId": "listPatients", "responses": { "200": { "description": "Patients" } } },
"post": {
"operationId": "createPatient",
"security": [{ "cosuite": ["patients:write"] }],
"responses": { "201": { "description": "Created" } }
}
}
}
}
Yukarıdaki cosuite şeması kesin tanımdır: müşteriler CoSuite API anahtarlarını ağ geçidine bearer token olarak gönderir, ağ geçidi security içindeki kapsamları denetler. İsterseniz servers[0].url alanına API'nizin, uygulamanızla aynı kökendeki temel yolunu yazın (ör. https://app.dentcloud.example/api); ağ geçidi istekleri oraya iletir.
Müşteriler API'ne nasıl ulaşır
Müşteriler modülünüzün uçlarını kendi CoSuite anahtarlarıyla api.cosuite.io ağ geçidi üzerinden çağırır. İstek uygulamanıza Connect imzasıyla ve hangi işletmenin çağırdığını bildiren X-CoSuite-Tenant başlığıyla gelir. Başlıklar, yükümlülükleriniz ve hata kodları için Ağ geçidi ve müşteri API'si sayfasına bakın.
Pazarlar ve diller
- Bir müşteri yalnızca kendi ülkesinde sunulan modülleri görür.
marketslistelersen modülün yalnızca o ülkelerde gösterilir. - Her pazarın dillerinde metin zorunludur (bkz. kurallar). Diğer diller isteğe bağlıdır.
priceo ülke için yerel bir fiyat belirler. Yoksa CoSuite modülün USD fiyatını güncel döviz kuruyla çevirir.marketsboşsa ya da yoksa modülün nerede sunulacağına CoSuite karar verir.
Anahtarlar kalıcıdır
Modülün yayına çıktıktan sonra modül, özellik, limit, kapsam ve webhook anahtarları sözleşmenin parçasıdır. Onları yeniden adlandırma; yeni bir anahtar ekle ve eskisini en az 6 ay koru (bkz. sürümleme).