GH GambleHub

API astarı ve statik analiz

1) Neden link API

API - ekipler ve dış entegratörler arasında bir sözleşme. Linting ve statik analiz:
  • Uyumsuz ve örtülü değişiklikleri önlemek
  • Durumları, hataları, sayfalamayı, güvenliği birleştirin;
  • Spesifikasyonları makine tarafından doğrulanabilir ve bültenleri öngörülebilir hale getirin;
  • İnceleme maliyetini ve onboarding süresini azaltın.

İlke: "Sözleşmeler otomatik olarak kontrol edilir; Yeşil linting olmadan PR tutmaz"


2) Linting tesisleri

1. Sözleşmeler: OpenAPI/AsyncAPI/GraphQL SDL, Protobuf/Avro/JSON Schema.
2. Uygulama: REST/gRPC kalemleri, ara katman yazılımı, durum kodları/başlıkları.
3. Altyapı: güvenlik başlıkları, sınırlar, önbellek ilkeleri.
4. İlgili eserler: örnekler, Postacı koleksiyonları, hata şemaları.


3) HTTP API için temel kurallar (önerilen profil)

3. 1 Gösterim ve URL

JSON gövdelerinde snake_case, yollarda kebap kılıfı veya tek tip kebap kılıfı/'/v1/... '.
Kaynaklar - çoğul:'/v1/payments ', iç içe -'/v1/wallets/{ id }/transactions'.
Yol-paramları olarak tanımlayıcılar:'/v1/payments/{ payment _ id} '(type: string, format: uuid).

3. 2 Yöntemler ve durumlar

'GET' - 200/206; ' POST '- 201 (+' Konum '), çakışmalar - 409; Doğrulama - 422; Limitler - 429 (+ 'Retry-After').
Hatalar için 200 döndürmeyin. Koşullu Sorgular - 304 'If-None-Match'tarafından.

3. 3 Hatalar (tek format)

json
{ "code":"validation_error", "message":"amount must be ≥ 1", "trace_id":"...", "details":[{"field":"amount","reason":"min:1"}] }

Gerekli: 'kod', 'mesaj', 'trace _ id'; yerel - 'Content-Language' aracılığıyla.

3. 4 Sayfalama/filtreler

İmleç tabanlı: 'page _ size', 'page _ token', ответ: 'next _ page _ token'.
Filtreler ve sıralama - beyaz listeler 'parametrelerde' belgelenmiştir.

3. 5 Güvenlik

Tek tip güvenlik şeması: OAuth2/OIDC kapsamları veya mTLS; Deny 'http' (sadece 'https').
Hassas başlıkları döndürmeyin, örneklerde belirteçleri maskeleyin.

3. 6 Sınırlamalar ve boyutlar

Başlık/vücut sınırları: 413/414/431; İzin verilen maksimum değerleri belgeleyin.


4) Araçlar ve ekosistem

4. 1 OpenAPI

Spektral (JSON/YAML tiftik), Redocly linter, oas-diff/openapi-diff (anlamsal diff), şematez/dredd (devam eden kontroller).

4. 2 Protobuf/gRPC

Buf (tiftik + kesme kontrolü), protolint, SDK jeneratörleri; Analiz için gnostik.

4. 3 GraphQL

graphql-schema-linter, graphql-inspector (kırma).

4. 4 Kod Linters ve SAST

ESLint, golangci-lint, Detekt/Ktlint, Pylint/Flake8, Semgrep (API kokusu ve güvenlik şablonları).


5) Kural örnekleri: Spectral/Redocly

5. 1 Spektral (örnek 'spektral. yaml ')

yaml extends: ["spectral:oas", "spectral:asyncapi"]
rules:
openapi-tags: off info-contact: error no-http: error path-kebab-case:
description: "Paths must be kebab-case"
given: "$.paths[]~"
severity: error then:
function: pattern functionOptions: { match: "^/(?:[a-z0-9]+(?--[a-z0-9]+)/?)+$" }
response-error-schema:
description: "Error responses must use standard schema"
given: "$.paths[][].responses[?(@property >= '400')]"
then:
field: "content.application/json.schema.$ref"
function: truthy id-as-uuid:
given: "$..parameters[?(@.name =~ /.id$/i)]"
then:
field: schema.format function: enumeration functionOptions: { values: ["uuid"] }

5. 2 Yeniden odaklama (fragment '.redocly. yaml ')

yaml apis:
main: openapi.yaml lint:
extends:
- recommended rules:
no-ambiguous-paths: error operation-2xx-only: off operation-success-response:
severity: error where:
subject: response filterInParentKeys: ["200","201","204"]
operation-security-defined: error no-plain-http: error

6) Protobuf/gRPC: buf profili

6. 1 'buf. Yaml '

yaml version: v2 modules:
- path: proto lint:
use:
- DEFAULT except:
- PACKAGE_VERSION_SUFFIX # используем v1 в package breaking:
use:
- WIRE_JSON deps: []
Öneriler:
  • Alan numaralarını tekrar kullanmayın; silindi - 'korunmuş'da.
  • Yeni alanlar - 'isteğe bağlı' veya varsayılanlarla; Türleri/anlambilimleri değiştirmeyin.

7) Semantik diff ve "kırılma" değişiklikleri

7. 1 HTTP

Kırılma örnekleri:
  • Alan türünü değiştirme/zorunlu
  • Durumu/rotayı/parametreyi sil
  • Enum/aralık daraltma;
  • Kimlik değişikliği (uuid - string) formatı.
Kırılmayan:
  • İsteğe bağlı alanlar ekleme
  • Mutlu yolu etkilemeyen yeni durumlar (örneğin, belgelenmiş '422')
  • enum uzantısı.

7. 2 gRPC/Protobuf

'Korunmuş'/yeniden numaralandırma içermeyen bir alanı silme - kırma.
Tür değişikliği (int32 - string) - kırma.
İsteğe bağlı olarak yeni bir etiket eklemek genellikle güvenlidir.


8) Sözleşme ve Kod Bağlama

Tutarlılık iki konu tarafından sağlanır:

1. Contract kodu: SDK/sunucu taslaklarının oluşturulması, testlerde olumsuz örnekler.

2. Sözleşme - kod: şartname testleri, durumların/başlıkların otomatik kontrolü.

Semgrep fikirleri:
  • 'Hata! = nil' olduğunda 'geri dönüş 200'e izin vermemek;
  • Yazılı ödeme yollarında zorunlu 'Idempotency-Key';
  • Günlüklerde belirteçleri maskelemek.

9) CI/CD boru hattı (referans)


pre-commit: spectral lint, redocly lint
PR gate:  openapi-diff (base..PR), buf breaking-check, graphql-inspector build:   schemathesis smoke, unit/integration linters (ESLint/golangci-lint)
release:  publish contracts (artifact/broker), sign & tag
PR şu durumlarda düşecektir:
  • kırma-diff var;
  • Temel kurallar ihlal edildi (durumlar/güvenlik/hatalar)
  • Parametrelerin örnekleri/tanımları yoktur.

10) Kurallar kataloğu (kuruluşunuz için şablon)

Tanımlayıcılar ve türleri

'_ id' - 'string', 'format: uuid'.
Para alanları - 'string'/' decimal' ölçekli; Para birimi - ISO-4217.

Hatalar

Birleşik şema (bkz § 3. 3), kodları: '400/401/403/404/409/422/429/5xx'.
Her zaman 'trace _ id'; ' 429/503 için Retry-After '.

Pagination

Yalnızca imleç; max 'page _ size' belgelenmiştir.

Güvenlik

Tüm işlemler - 'güvenlik' bloğu; 'kapsamlar' tanımlanmıştır.
'http:' Bağlantısı yok; TLS 1. 2+.

Önbellek/idempotency

Для GET - 'ETag/Last-Modified'; Yazmak için - 'Idempotency-Key' (varsa).

Belgeler

'summary', 'description', istek/yanıt örnekleri (geçerli).


11) Otomatik kontrol örnekleri

11. 1 Zorunlu güvenlik başlıklarının doğrulanması (Spektral)

yaml security-headers:
given: "$.paths[][].responses['200'].headers"
then:
function: truthy

11. 2 openapi-diff (sözde CI adımı)


openapi-diff --fail-on-incompatible base.yaml pr.yaml

11. 3 buf kırma kontrolü


buf breaking --against '.git#branch=main'

12) Sözleşmelerin kalitesinin gözlemlenebilirliği

Metrikler: PR'ların bağlantı hatalarıyla paylaşılması, düzeltme süresi, kırılma girişimlerinin sayısı, kurallara göre "borçlar".
Panolar: birleşik hata şemasına geçiş, örneklerle kapsama, sürüm kararlılığı.


13) Antipatterns

"Doc" koddan ayrı yaşar - eşzamansızlık. Sözleşmeyi hizmete yakın tutun ve sürümlü bir eser bırakın.
Linter sadece elle. Sağlam bir PR-gate lazım.
Rastgele örnekler (deterministik olmayan) - kontrollerde pullar.
Olumsuz örnek ve hata kodu yok.
Her hizmet için hata şemasının yeniden oluşturulması.
Protobuf kırma kontrollerini göz ardı etme (etiketleri "göze göre" değiştirme).


14) iGaming/Finansın Özellikleri

Para birimi alanları - sabit ölçek/yuvarlama; yüzdürme yasağı.
Zorunlu başlıklar 'X-Tenant', 'X-Region've trace' traceparent '.
Ödeme yazma kolları: 'Idempotency-Key', 'Retry-After've doğru 409/201 semantiğini kontrol etme.
Webhooks PSP/KYC: HMAC/mTLS 'securitySchemes' içinde açıklanmıştır; Anti-replay ('X-Timestamp', pencere).
Bölgesel kısıtlamalar ve hata yerelleştirme ('Content-Language').


15) Prod Hazırlık Kontrol Listesi

  • Spektral/Redocly profiller tasarlanmış ve ön-commit ve PR-kapı bağlı.
  • Tek hata deseni ve durumları - taahhüt ve kontrol.
  • openapi-diff/GraphQL Inspector/buf - blok kırma değişiklikleri.
  • İstek/yanıt örnekleri geçerlidir; sayfalama/filtreler belgelenmiştir.
  • SecuritySchemes ve kapsamları doldurulur; HTTP bağlantısı yoktur.
  • Protobuf için: silinen etiketlerde 'ayrılmış'; Yeni alanlar - isteğe bağlı.
  • Semgrep/code linters etkin; Günlüklerdeki sırları maskelemek.
  • CI sözleşme eserler ve linting raporları yayınlar.
  • Playbook: breaking-diffa sırasında nasıl hareket edilir (geri alma, düzeltme, entegratörlere bildirimler).

16) TL; DR

Otomatik sözleşme linting (Spectral/Redocly, buf/GraphQL Inspector) ve anlamsal diff uygulayın, tek bir hata/durum/sayfalama/güvenlik şemasını düzeltin, PR-gate'i bağlayın ve sözleşmeleri eser olarak yayınlayın. Herhangi bir kırılma farkı bir fren lambasıdır. Para/ödemeler için - özel kurallar (idempotency, 'Retry-After', HMAC/mTLS).

Contact

Bizimle iletişime geçin

Her türlü soru veya destek için bize ulaşın.Size yardımcı olmaya her zaman hazırız!

Entegrasyona başla

Email — zorunlu. Telegram veya WhatsApp — isteğe bağlı.

Adınız zorunlu değil
Email zorunlu değil
Konu zorunlu değil
Mesaj zorunlu değil
Telegram zorunlu değil
@
Telegram belirtirseniz, Email’e ek olarak oradan da yanıt veririz.
WhatsApp zorunlu değil
Format: +ülke kodu ve numara (örneğin, +90XXXXXXXXX).

Butona tıklayarak veri işlemenize onay vermiş olursunuz.