Hacker DirectoryHacker Directory
Öğrenmeye devam et
ENHTML kaydet ↓

WEB / WEB-20.04

Third-party services ve trust boundaries

Provider response’u geldiğinde iş bitmez. Veri biçimi ve amaç kontrolünü, yerel write ve commit’ten ayrı izle.

CORE · RED · BLUE · ARTIFACT · PRACTICE

1. Core · Mekanizma

Hareket olmadan bütün senaryoları oku

Kontrol ve commit

  1. Request hazır

    Adapter public tea query’sini hazırlar. Provider henüz request’i almamış, local catalog değişmemiştir.

    Caller
    Public title sonucu bekleniyor
    Integration adapter
    Public tea query hazır
    Provider
    Provider request’i bilmiyor
    Yerel catalog
    Local draft committed
  2. Request provider’a ulaştı

    Provider query’yi öğrenir. Adapter henüz response veya validation sonucu bilmiyor.

    Caller
    Public title sonucu bekleniyor
    Integration adapter
    Public tea query hazır
    Provider
    Public tea query alındı
    Yerel catalog
    Local draft committed
  3. Provider response hazır

    Seçilen örnek response hazırlanır. Schema drift ve error status ayrı fixture durumlarıdır; gerçek SaaS çağrısı yapılmaz.

    Caller
    Public title sonucu bekleniyor
    Integration adapter
    Public tea query hazır
    Provider
    200 / string title hazır
    Yerel catalog
    Local draft committed
  4. Response adapter’a ulaştı

    Raw response alınır. Schema kabulü ve local mutation henüz yapılmamıştır; catalog eski state’tedir.

    Caller
    Public title sonucu bekleniyor
    Integration adapter
    Raw 200 bytes alındı
    Provider
    200 / string title hazır
    Yerel catalog
    Local draft committed
  5. Contract kararı

    Yerel kontrol status, beklenen public id ve string title koşullarını değerlendirir. Bu karar ağ mesajı değildir.

    Caller
    Public title sonucu bekleniyor
    Integration adapter
    Contract kabul edildi
    Provider
    200 / string title hazır
    Yerel catalog
    Local draft committed
  6. Write henüz pending

    Kabul edilen title SQLite transaction’da yazılır. Bağımsız reader hâlâ Local draft görür.

    Caller
    Public title sonucu bekleniyor
    Integration adapter
    Contract kabul edildi
    Provider
    200 / string title hazır
    Yerel catalog
    Tea note / commit bekliyor
  7. Commit görünür oldu

    COMMIT sonrasında bağımsız connection Tea note okur. Yerel persistence sonucu provider’a başka karar yetkisi vermez.

    Caller
    Title sonucu committed
    Integration adapter
    Contract kabul edildi
    Provider
    200 / string title hazır
    Yerel catalog
    Tea note committed

Schema uyuşmazlığı

  1. Request hazır

    Adapter public tea query’sini hazırlar. Provider henüz request’i almamış, local catalog değişmemiştir.

    Caller
    Public title sonucu bekleniyor
    Integration adapter
    Public tea query hazır
    Provider
    Provider request’i bilmiyor
    Yerel catalog
    Local draft committed
  2. Request provider’a ulaştı

    Provider query’yi öğrenir. Adapter henüz response veya validation sonucu bilmiyor.

    Caller
    Public title sonucu bekleniyor
    Integration adapter
    Public tea query hazır
    Provider
    Public tea query alındı
    Yerel catalog
    Local draft committed
  3. Provider response hazır

    Seçilen örnek response hazırlanır. Schema drift ve error status ayrı fixture durumlarıdır; gerçek SaaS çağrısı yapılmaz.

    Caller
    Public title sonucu bekleniyor
    Integration adapter
    Public tea query hazır
    Provider
    200 / numeric title hazır
    Yerel catalog
    Local draft committed
  4. Response adapter’a ulaştı

    Raw response alınır. Schema kabulü ve local mutation henüz yapılmamıştır; catalog eski state’tedir.

    Caller
    Public title sonucu bekleniyor
    Integration adapter
    Raw 200 bytes alındı
    Provider
    200 / numeric title hazır
    Yerel catalog
    Local draft committed
  5. Contract kararı

    Yerel kontrol status, beklenen public id ve string title koşullarını değerlendirir. Bu karar ağ mesajı değildir.

    Caller
    Public title sonucu bekleniyor
    Integration adapter
    Contract uyuşmazlığı
    Provider
    200 / numeric title hazır
    Yerel catalog
    Local draft committed
  6. Eski catalog korundu

    Caller ilgili error category’yi öğrenir. Catalog’da commits=0 ve önceki Local draft korunur.

    Caller
    Hata / yeni başarı sonucu yok
    Integration adapter
    Contract uyuşmazlığı
    Provider
    200 / numeric title hazır
    Yerel catalog
    Local draft committed

Provider hatası

  1. Request hazır

    Adapter public tea query’sini hazırlar. Provider henüz request’i almamış, local catalog değişmemiştir.

    Caller
    Public title sonucu bekleniyor
    Integration adapter
    Public tea query hazır
    Provider
    Provider request’i bilmiyor
    Yerel catalog
    Local draft committed
  2. Request provider’a ulaştı

    Provider query’yi öğrenir. Adapter henüz response veya validation sonucu bilmiyor.

    Caller
    Public title sonucu bekleniyor
    Integration adapter
    Public tea query hazır
    Provider
    Public tea query alındı
    Yerel catalog
    Local draft committed
  3. Provider response hazır

    Seçilen örnek response hazırlanır. Schema drift ve error status ayrı fixture durumlarıdır; gerçek SaaS çağrısı yapılmaz.

    Caller
    Public title sonucu bekleniyor
    Integration adapter
    Public tea query hazır
    Provider
    503 error hazır
    Yerel catalog
    Local draft committed
  4. Response adapter’a ulaştı

    Raw response alınır. Schema kabulü ve local mutation henüz yapılmamıştır; catalog eski state’tedir.

    Caller
    Public title sonucu bekleniyor
    Integration adapter
    Raw 503 bytes alındı
    Provider
    503 error hazır
    Yerel catalog
    Local draft committed
  5. Contract kararı

    Yerel kontrol status, beklenen public id ve string title koşullarını değerlendirir. Bu karar ağ mesajı değildir.

    Caller
    Public title sonucu bekleniyor
    Integration adapter
    Provider kullanılamıyor
    Provider
    503 error hazır
    Yerel catalog
    Local draft committed
  6. Eski catalog korundu

    Caller ilgili error category’yi öğrenir. Catalog’da commits=0 ve önceki Local draft korunur.

    Caller
    Hata / yeni başarı sonucu yok
    Integration adapter
    Provider kullanılamıyor
    Provider
    503 error hazır
    Yerel catalog
    Local draft committed

Yanıt bilinmiyor

  1. Unknown durumu başladı

    Yerel unknown-response örneği başlar. Gerçek network send veya provider delivery gözlemi yoktur.

    Caller
    Public title sonucu bekleniyor
    Integration adapter
    Public tea query hazır
    Provider
    Provider result bilgisi unknown
    Yerel catalog
    Local draft committed
  2. Adapter yanıt bekledi

    Adapter bu örnekte TimeoutError durumuyla karşılaşır. Remote completion hakkında bilgi edinmez.

    Caller
    Public title sonucu bekleniyor
    Integration adapter
    Yerel çağrı denendi
    Provider
    Provider result bilgisi unknown
    Yerel catalog
    Local draft committed
  3. Response gözlenmedi

    Adapter’ın status ve body bilgisi yoktur. Buradaki exception gerçek network deadline ölçümü değildir.

    Caller
    Public title sonucu bekleniyor
    Integration adapter
    Response gözlenmedi
    Provider
    Provider result bilgisi unknown
    Yerel catalog
    Local draft committed
  4. Unknown ayrı tutuldu

    Eksik response, 503 veya schema mismatch olarak sınıflandırılmaz. Automatic retry ve local mutation yapılmaz.

    Caller
    Public title sonucu bekleniyor
    Integration adapter
    response-unknown
    Provider
    Provider result bilgisi unknown
    Yerel catalog
    Local draft committed
  5. Caller unknown sonucunu biliyor

    Local draft değişmez. Caller response’un bilinmediğini öğrenir; provider’ın işi tamamladığı söylenmez.

    Caller
    Unknown / yeni başarı sonucu yok
    Integration adapter
    response-unknown
    Provider
    Provider result bilgisi unknown
    Yerel catalog
    Local draft committed

ROLLER · STATE · VERİ AKIŞI

Provider’a hangi sorumluluğu veriyoruz?

Third-party service, dışarıda yönetilen bir capability’yi API, webhook, library veya browser integration üzerinden kullanmaktır. SaaS dependency’de availability, quota, değişim ve retention kararlarının bir kısmı provider sözleşmesine bağlıdır. Ürün adı veya başarılı demo her kullanım amacına uygunluğu kanıtlamaz. Hangi veri dışarı çıkıyor, hangi sonuç geri geliyor ve uygulama bu sonucu ne için kullanıyor?

Atlas yalnız public tea identifier’ını catalog-demo adlı sentetik provider’a gönderir. catalog.example.invalid örnek adresidir. Integration adapter, yerel catalog değişmeden önce status, media type, JSON biçimi ve beklenen identifier’ı kontrol eder. Provider title sağlayabilir; private user permission veya account state kararını veremez. Bu amaç sınırı authentication ve TLS güveninden ayrıdır.

API version seçimi provider’a göre account default, SDK veya endpoint configuration üzerinden yapılabilir. Stripe versioning kaynaklardaki bir ürün örneğidir; Atlas payment API kullanmaz. catalog-v1 öğretim contract’ının adıdır. Object revision=1, API version değildir. Title string beklenirken title=7 gelmesi, HTTP başarılı olsa bile uygulamanın kullanabileceği veri sağlamaz.

Response almak, kabul etmek ve commit etmek ayrı olaylardır

Adapter 200 application/json response’u parse edebilir ama veri türleri, hedef nesne ve kullanım amacı henüz kontrol edilmemiş olabilir. Normal dalda id=tea, title=Tea note ve integer revision=1 kabul edilir. Sonra yerel SQLite write ve COMMIT gelir. Bağımsız reader yeni title’ı ancak commit sonrasında görür. Sahne response arrival, validation ve commit’i ayrı adımlarda gösterir.

Schema drift dalında status yine 200’dür; title=7 string olmadığı için reddedilir ve commit yapılmaz. Provider-error dalı 503 ile geçici hata getirir; adapter bunu success verisi gibi kullanmaz. Uygulama kendi unavailable sonucunu üretir. Kullanıcıya raw diagnostics veya credentials aktarılmaz. Local draft title’ının korunması yeni provider verisinin geldiği anlamına gelmez.

Unknown dalında adapter hiç response gözlemez. Dolayısıyla status veya provider completion sonucu bilinmez; model bunu success’e çevirmez. Gerçek timeout davranışı bu sahnede ölçülmez. Dış işlemin side effect’i varsa belirsiz sonuç retry ve idempotency tasarımında ayrıca ele alınır. Bu örnek public read kullanır ve automatic retry yapmaz; WEB-19.S01’deki commit ile caller bilgisi ayrımı burada da geçerlidir.

2. Red · Güven ve etki

Hareket olmadan bütün senaryoları oku

200, yanlış tür

  1. Contract önce belirli

    İstenen public id tea; title bir string, revision integer olmalı. Contract yalnız status=200 kontrolünden ibaret değildir.

    Provider kaydı
    request.id=tea
    Contract / local state
    title:string / revision:integer
    Güven sınırı
    Acceptance kararı bekleniyor
  2. 200 ile body geldi

    SchemaDrift.status=200. Body içindeki title=7 alanı ise contract’ın string koşulunu karşılamıyor.

    Provider kaydı
    status=200 / body.title=7
    Contract / local state
    Contract henüz değerlendirilmedi
    Güven sınırı
    Transport sonucu ve veri tipi ayrı
  3. Schema gate reddetti

    Accepted=false ve reason=contract-mismatch. HTTP success, bu uygulamanın representation’ı kullanmayı kabul ettiği anlamına gelmez.

    Provider kaydı
    status=200 / body.title=7
    Contract / local state
    accepted=false / reason=contract-mismatch
    Güven sınırı
    Local effect henüz incelenmedi
  4. Local not değişmedi

    LocalAfter=Local draft ve commits=0. Türü uymayan provider response, bu dalda note mutation’a dönüşmemiştir.

    Provider kaydı
    status=200 / body.title=7
    Contract / local state
    localAfter=Local draft / commits=0
    Güven sınırı
    Provider 200 != local COMMIT
  5. Ek alanları authority sayma

    Contract unused extra fields’i saklamaz. Dış response’un daha fazla alan taşıması, uygulamaya yeni permission veya private user kararı vermez.

    Provider kaydı
    status=200 / body.title=7
    Contract / local state
    unusedExtraFields=ignored, not persisted
    Güven sınırı
    providerCanAuthorizePrivateUser=false
  6. Hatanın katmanını doğru adlandır

    Bu dal HTTP ulaşımı değil schema kabulünde durdu. Status, kabul ve mutation ayrı raporlanır; 200 kaydı local başarı diye yeniden adlandırılmaz.

    Provider kaydı
    status=200 / body.title=7
    Contract / local state
    accepted=false / localAfter=Local draft / commits=0
    Güven sınırı
    Schema reddi

Kabul ve commit

  1. Normal body contract’a uyuyor

    Normal body tea, Tea note ve revision=1 taşır. İstenen id ve türler bu seçilen contract ile uyuşur.

    Provider kaydı
    status=200 / title=Tea note / revision=1
    Contract / local state
    Local contract kararı bekleniyor
    Güven sınırı
    Local commit henüz incelenmedi
  2. Representation kabul edildi

    Accepted=true, provider body’nin local işleme için kabul edildiğini kaydeder. Bu alan tek başına transaction’ın bittiğini söylemez.

    Provider kaydı
    status=200 / title=Tea note / revision=1
    Contract / local state
    accepted=true / localBefore=Local draft
    Güven sınırı
    Acceptance != commit
  3. İşlem sürerken bağımsız okuma

    IndependentReaderDuring=Local draft. Local işleme başlaması, ayrı reader’ın yeni başlığı görmesiyle aynı olay değildir.

    Provider kaydı
    status=200 / title=Tea note / revision=1
    Contract / local state
    accepted=true / independentReaderDuring=Local draft
    Güven sınırı
    Eski committed değer görünür
  4. Commit sonucu ayrıca var

    Commits=1 ve localAfter=Tea note. Başlığın local owner’da değişmesi provider cevabından sonra gelen ayrı bir transaction sonucudur.

    Provider kaydı
    status=200 / title=Tea note / revision=1
    Contract / local state
    commits=1 / localAfter=Tea note
    Güven sınırı
    Local state değişti
  5. Sonraki reader yeni başlığı gördü

    IndependentReaderAfter=Tea note, diğer bağlantının da committed başlığı görebildiğine dair ayrı gözlemdir. Önceki read’i geriye dönük değiştirmez.

    Provider kaydı
    status=200 / title=Tea note / revision=1
    Contract / local state
    commits=1 / independentReaderAfter=Tea note
    Güven sınırı
    During=Local draft; after=Tea note
  6. Public enrichment’in yetki sınırı

    Başlık enrichment’i başarıyla commit edilmiş olsa da provider private user’ı authorize edemez. Public data contract ile access-control authority ayrı sorumluluklardır.

    Provider kaydı
    status=200 / title=Tea note / revision=1
    Contract / local state
    commits=1 / localAfter=Tea note
    Güven sınırı
    providerCanAuthorizePrivateUser=false

VARSAYIM · SINIR · KONTROL

Güvenilir kanal, doğru uygulama verisi demek değildir

TLS, peer ve taşınan verinin bütünlüğü için güven sağlar; title’ın doğru türde, doğru note’a ait veya doğru amaç için kullanılabilir olduğunu belirlemez. Provider tanındığı için veri kontrolünü kaldırmak, sıradan version değişiminde bile storage ve UI koşullarını bozabilir. Örnekte numeric title, string contract’ını geçemediği için mutation öncesinde durdurulur.

Bir capability’yi başka bir kararın authority’sine dönüştürme. Public title sağlayan provider’ın user role veya private object authorization belirleme sorumluluğu yoktur. Örnek request yalnız public id taşır. Integration incelemesinde veri minimizasyonu, provider identity ve izin verilen kullanım amaçları birlikte değerlendirilir. Provider’ın retention ve account ayarları otomatik olarak uygulama sahibinin kontrolünde değildir.

Hata ile bilinmeyen sonucu birbirine karıştırma

200’ü schema validation saymak, error body’yi success body sanmak ve hiç response görmemek farklı durumlardır. Üçünde de eski title korunabilir, fakat nedenler aynı değildir. Kullanıcı aynı genel mesajı görse bile diagnostic category ayrılabilir. Contract mismatch, provider unavailable ve eksik gözlem ayrı değerlendirilerek mutation kararına bağlanır.

Raw provider error’ını kullanıcıya taşımak veya gereksiz body saklamak iç alanları ve hassas veriyi açığa çıkarabilir. Örnek kayıt yalnız karar nedeni, local title ve commit sayısını tutar. Body boyutu ve süre budget’ı gerçek integration’da ayrıca uygulanmalıdır; buradaki sonlu örnek ve unknown dalı production timeout kontrolünü ölçmez.

3. Blue · Güvenli geliştirme ve savunma

Hareket olmadan bütün senaryoları oku

Gözlenen 503

  1. Yanıtın varlığı biliniyor

    Status/body gözlemini sabit yerel provider adapter’ı, commit görünürlüğünü ayrı SQLite connection üretir. Bunlar remote provider’ın gerçekten çalıştığına dair log veya network capture değildir. ProviderError.status=503 ve error=temporary body’si kaydedilmiş. Bu dal yanıt alınmamasını değil, alınan hata yanıtını gösterir.

    Provider gözlemi
    status=503 / body.error=temporary
    Local kayıt
    Local state henüz incelenmedi
    Sonuç bilgisi
    Provider response gözlendi
  2. Local contract kabul etmedi

    Accepted=false ve provider-unavailable nedeni seçilmiş. Hata body’si başarılı public note representation’ı gibi kullanılmıyor.

    Provider gözlemi
    status=503 / body.error=temporary
    Local kayıt
    accepted=false / reason=provider-unavailable
    Sonuç bilgisi
    Mutation henüz incelenmedi
  3. Local commit yok

    Commits=0 ve localAfter=Local draft. Provider hata yanıtının varlığı local transaction’ın başarısız commit ettiğini söylemez; bu dalda commit yapılmamış.

    Provider gözlemi
    status=503 / body.error=temporary
    Local kayıt
    localAfter=Local draft / commits=0
    Sonuç bilgisi
    Local not korunmuş
  4. Diagnostics ayrıca sınırlı

    RawDiagnosticsExposed=false, ham provider diagnostics’in bu örnekte kullanıcıya verilmediğini belirtir. Status’un kaydedilmesi ham mesajı paylaşmayı gerektirmez.

    Provider gözlemi
    status=503 / body.error=temporary
    Local kayıt
    localAfter=Local draft / commits=0
    Sonuç bilgisi
    rawDiagnosticsExposed=false
  5. 503 gözlemini kapsamından çıkarma

    Bu response seçilen isteğin provider hata sonucudur. Diğer provider işlemlerinin durumu veya kalıcı availability sorunu bu tek status’tan bilinmez.

    Provider gözlemi
    status=503 / body.error=temporary
    Local kayıt
    localAfter=Local draft / commits=0
    Sonuç bilgisi
    Başka isteklerin sonucu bilinmiyor
  6. Ayrı sonuçları birlikte kaydet

    Bu dalın özeti gözlenen 503, reddedilen representation ve sıfır local commit’tir. No-response dalının belirsizliğini bu kayda taşımaya gerek yoktur.

    Provider gözlemi
    status=503 / body.error=temporary
    Local kayıt
    accepted=false / localAfter=Local draft / commits=0
    Sonuç bilgisi
    Bilinen hata yanıtı

Yanıt bilinmiyor

  1. Yanıt gözlenmemiş

    Status/body gözlemini sabit yerel provider adapter’ı, commit görünürlüğünü ayrı SQLite connection üretir. Bunlar remote provider’ın gerçekten çalıştığına dair log veya network capture değildir. Unknown.responseObserved=false ve status=null. Burada 503 veya 200 yok; status alanını başka dalın sonucuyla dolduramazsın.

    Provider gözlemi
    responseObserved=false / status=null
    Local kayıt
    Local state henüz incelenmedi
    Sonuç bilgisi
    Response outcome bilinmiyor
  2. Local state aynı kalmış

    LocalAfter=Local draft ve commits=0, local owner’ın gözlenen sonucudur. Bu bilgi provider’ın hiç çalışmadığını söylemez.

    Provider gözlemi
    responseObserved=false / status=null
    Local kayıt
    localAfter=Local draft / commits=0
    Sonuç bilgisi
    Provider tamamlanması ayrı
  3. Provider completion bilinmiyor

    ProviderCompletionKnown=false. Caller’ın response görmemesi ile provider’ın iş yapmaması aynı bilgi değildir.

    Provider gözlemi
    responseObserved=false / status=null
    Local kayıt
    localAfter=Local draft / commits=0
    Sonuç bilgisi
    providerCompletionKnown=false
  4. Deadline ölçülmemiş

    TimeoutActuallyMeasured=false, bu dalın gerçek network süresi ölçmediğini belirtir. Status=null değerini ölçülmüş timeout diye yeniden adlandırma.

    Provider gözlemi
    responseObserved=false / status=null
    Local kayıt
    localAfter=Local draft / commits=0
    Sonuç bilgisi
    timeoutActuallyMeasured=false
  5. Otomatik retry üretilmiyor

    AutomaticRetry=false verilmiş. Belirsiz provider completion, operation’ın retry-safe olduğunu kanıtlamaz; retry kararı için contract ve effect bilgisi gerekir.

    Provider gözlemi
    responseObserved=false / status=null
    Local kayıt
    localAfter=Local draft / commits=0
    Sonuç bilgisi
    providerCompletionKnown=false / automaticRetry=false
  6. UNKNOWN sonucu koru

    Rapor local notun değişmediğini ve provider completion’ın bilinmediğini birlikte söyler. Birini diğerinin yerine geçirmek öğrenciyi yanlış failure sınırına götürür.

    Provider gözlemi
    responseObserved=false / status=null
    Local kayıt
    localAfter=Local draft / commits=0
    Sonuç bilgisi
    provider completion=UNKNOWN

UYGULAMA · GÜVENLİK KONTROLÜ · DOĞRULAMA

Integration contract’ını somut alanlarla tanımla

Status/body gözlemini sabit yerel provider adapter’ı, commit görünürlüğünü ayrı SQLite connection üretir. Bunlar remote provider’ın gerçekten çalıştığına dair log veya network capture değildir. Provider identity, capability amacı, request veri sınıfı, beklenen status/media type, schema version ve yerel karar sorumluluğunu beraber kaydet. Contract değişince yalnız başarılı örneği değil schema drift ve provider error durumlarını da incele. Atlas, istenen id ile response id’sini, string title’ı ve integer revision’ı kontrol eder. Kullanılmayan extra fields saklanmaz. Bu kontrol title’ı bütün output context’leri için otomatik güvenli yapmaz.

Kabul ile kalıcı write’ı ayrı izle. Yerel transaction sürerken bağımsız reader eski title’ı görür; COMMIT sonrasında Tea note görünür. Reddedilen response’larda commits=0 kalır. Bu gözlem yerel verinin görünürlüğünü anlatır; provider’ın gerçekten request alması, network deadline veya distributed commit hakkında sonuç vermez.

Karar nedenini kullanıcı etkisine bağla

Contract mismatch için success gösterme; unavailable için uygulamanın hata sonucunu üret; unknown durumda remote completion iddiası kurma. Eski local title gösterilecekse nereden geldiği ve güncelliği korunmalıdır. Stale fallback bir policy seçimi olarak açık olmalıdır. Genel kullanıcı hatası ile iç diagnostic category ayrılabilir; provider nesnesinin tamamını browser’a veya log’a kopyalamak gerekmez.

Selector, accepted=false iken localCommitted=true yazılmış tutarsız kaydı arar. Normal rejected kayıtta count=0, tutarsız örnekte count=1 bulunur; eksik event yeterli kanıt değildir. Response ulaşmadan schema sonucu, transaction tamamlanmadan commit sonucu yazılmaz. Provider status, contract kabulü ve yerel mutation aynı request için ayrı gözlemler olarak tutulur.

ŞİMDİ VAKAYA UYGULA

200 cevabı, schema kabulü ve local COMMIT aynı başarı mı?

Atlas public tea notunun başlığını catalog-demo’dan zenginleştirir. Provider cevabı önce contract ile değerlendirilir; local not ancak kendi transaction’ı tamamlanınca değişir.

Vakadaki response’a hangi component’ler katkıda bulunuyor? UI, service, platform ve dış provider sonuçlarının hangi hop’ta tamamlandığını ayrı göster.

Bağlı vaka dosyasını aç ↗

ÖRNEĞİ BİRLİKTE OKUYALIM

Provider yanıtı ve local commit

Bir alan seç; hangi sonucu desteklediğini ve nerede yetersiz kaldığını incele.

Ham kaydı ve alan açıklamalarını oku
{
  "contract": {
    "providerAlias": "catalog-demo",
    "endpointAlias": "https://catalog.example.invalid",
    "apiVersionAlias": "catalog-v1",
    "purpose": "public-title enrichment",
    "request": {
      "id": "tea"
    },
    "dataClassification": "public synthetic only",
    "successStatus": 200,
    "mediaType": "application/json",
    "schema": {
      "id": "requested public id",
      "title": "string",
      "revision": "integer, not boolean"
    },
    "unusedExtraFields": "ignored, not persisted",
    "providerCanAuthorizePrivateUser": false
  },
  "normal": {
    "status": 200,
    "body": "{\"id\":\"tea\",\"title\":\"Tea note\",\"revision\":1}",
    "accepted": true,
    "localBefore": "Local draft",
    "localAfter": "Tea note",
    "commits": 1,
    "independentReaderDuring": "Local draft",
    "independentReaderAfter": "Tea note"
  },
  "schemaDrift": {
    "status": 200,
    "body": "{\"id\":\"tea\",\"title\":7,\"revision\":1}",
    "accepted": false,
    "reason": "contract-mismatch",
    "localAfter": "Local draft",
    "commits": 0
  },
  "providerError": {
    "status": 503,
    "body": "{\"error\":\"temporary\"}",
    "accepted": false,
    "reason": "provider-unavailable",
    "localAfter": "Local draft",
    "commits": 0,
    "rawDiagnosticsExposed": false
  },
  "unknown": {
    "responseObserved": false,
    "status": null,
    "reason": "response-unknown",
    "accepted": false,
    "localAfter": "Local draft",
    "commits": 0,
    "providerCompletionKnown": false,
    "automaticRetry": false,
    "timeoutActuallyMeasured": false
  },
  "limits": {
    "native": "fixed direct adapter + own SQLite + independent response/schema parsing",
    "realThirdPartyApiExecuted": false,
    "browserExecuted": false,
    "realTlsVerified": false,
    "networkDeadlineMeasured": false
  },
  "selector": {
    "language": "XPath",
    "xml": "<audit><integration accepted=\"false\" localCommitted=\"false\"/></audit>",
    "xpath": "count(/audit/integration[@accepted='false' and @localCommitted='true'])",
    "expected": 0,
    "positiveFixtureXml": "<audit><integration accepted=\"false\" localCommitted=\"true\"/></audit>",
    "positiveExpected": 1,
    "scope": "Authored inert decision ledger only; these are teaching fields, not product log or API field names.",
    "missingFieldBehavior": "A missing observation is insufficient evidence; zero matches alone proves no runtime control."
  }
}
contract
Public title için versioned provider contract’ı tanımlar. Provider’ın private user permission kararı verme authority’si yoktur.
normal/schemaDrift
HTTP response, schema kabulü ve local commit ayrı sonuçlardır. 200 status ile title’ın doğru türde olması aynı koşul değildir.
providerError/unknown
Gözlenen 503 ile hiç response gözlenmemesi farklı bilgi durumlarıdır; local notun değişmemesi bu farkı silmez.
selector/limits
Yerel adapter, response parsing ve local SQL kapsamıdır. Gerçek SaaS çağrısı veya network deadline ölçümü değildir.

Actual direct fixed adapter and own SQLite only. Provider messages conceptual; no external call/TLS check/actual network timeout/browser run.

İki yanlış kanı

Well-known SaaS ve HTTP200 local data’yı güvenilir kılar.

Peer/channel, expected schema, object/purpose ve local authority ayrı gate’lerdir.

No response, provider503 ile aynı bilgidir ve success default edilebilir.

Unknown outcome’da observed status yoktur; completion uydurulmaz, selected local state korunur.

SIRA SENDE

Bu hikâyeyi sen çöz.

Sonucu tahmin et, kanıtın sınırını bul ve nedenini kendi cümlenle anlat.

Provider 200 döndü, fakat title alanının değeri 7. Local persistence update yapılır mı?

  1. Evet. Provider’ın 200 cevabı bütün body alanlarını geçerli yapar.
  2. Hayır. contract-mismatch nedeniyle commits=0.
Gerekçeli cevabı oku

Hayır. contract-mismatch nedeniyle commits=0. — title alanının string olması gerekir. Bu koşul sağlanmadığı için accepted=false; yerel draft değişmeden kalır.

Response gözlenmedi. Provider işleminin tamamlanmadığını varsayarak otomatik retry yapmak bu kanıtla gerekçelendirilebilir mi?

Dersten seçilen artifact alanları; öğretim örneği

unknown
{"responseObserved":false,"status":null,"reason":"response-unknown","accepted":false,"localAfter":"Local draft","commits":0,"providerCompletionKnown":false,"automaticRetry":false,"timeoutActuallyMeasured":false}
  1. Hayır. providerCompletionKnown=false ve automaticRetry=false.
  2. Evet. Alınamayan her response, hiçbir effect oluşmadığını garanti eder.
Gerekçeli cevabı oku

Hayır. providerCompletionKnown=false ve automaticRetry=false. — Response’un kaybolması remote işlemin sonucunu bildirmez. Yeniden gönderimin güvenli olup olmadığı operation policy’siyle ayrıca belirlenmelidir.

Provider public title enrichment için kullanılıyor. Neden private kullanıcı iznini veya raw diagnostics’in paylaşılmasını belirleyemez?

Gerekçeli cevabı oku

Provider private kullanıcı izni veremez (providerCanAuthorizePrivateUser=false). Local application, doğrulanmış subject ve object policy’sini kendisi uygular. Provider hatası unavailable sonucuna dönüştürülür; raw diagnostics dışarı verilmez (rawDiagnosticsExposed=false). Yerel adapter ve SQLite sonuçları gerçek third-party API, TLS veya browser ölçümü değildir. Kullanılmayan ek alanlar persistence’a yazılmaz.

□ External data’yı private kullanıcı kimliği veya izni için authority saymadım.

□ Kullanıcıya verilen hata ile paylaşılmayan raw diagnostics’i ayırdım.

Uygulama konsolunu aç · request / response / browser
Request, URL, cookie ve DOM örneklerini ayrıca aç

Kaynaklar ve kapsam