GH GambleHub

API linting եւ ստատիկ վերլուծություն

1) Ինչու՞ լինել API-ը

API-ը թիմերի և արտաքին ինտեգրատորների միջև պայմանագիր է։ Լինթինգը և ստատիկ վերլուծությունը

նվաստացնում են արձանները, սխալները, սագինացիան, անվտանգությունը։

ճշգրտումներ են անում ստուգվող և կանխատեսելի ալգորիթմներ։

կանխում են անհամատեղելի և աննշան փոփոխությունները.

կրճատում են ծախսերը և ժամանակը։

Սկզբունքը '"պայմանագրերը ինքնաբերաբար ստուգվում են. PR-ն առանց կանաչ ոսպնյակի չի մեռնվում"։


2) Լինթինգի օբյեկտները

1. Պայմանագրեր ՝ OpenAPI/AsyncAPI/GraphQL SDL, Drobuf/Avro/JSON Schema։

2. Տե՛ ս ՝ REST/gRPC գրիչներ, middleware, wwww.stus/վերնագրեր։

3. Ենթակառուցվածքը 'անվտանգության վերնագրեր, սահմաններ, քեշի քաղաքականություն։

4. Հարակից արտեֆակտները 'օրինակներ (examples), Postman հավաքածուներ, սխալների սխեմաներ։


3) HTTP API-ի հիմնական կանոնները (առաջարկվող պրոֆիլը)

3. 1 Նոտացիա և URL

wwww.ake _ cript JSON-ի մարմիններում, kebab-cast ճանապարհներում կամ միանձնյա kebab-case//v1/... "։

Ռեսուրսները բազմաթիվ թիվ են '«/v1/payments », ներդրված' «/v1/wallets/+ id +/transactions»։

Բաղադրիչները որպես path-params: '/v1/payments/+ payment _ id _ "(տիպը ՝ string, ձևաչափը ՝ uuid)։

3. 2 Մեթոդներ և արձաններ

«GET» - 200/206; «POST» - 201 (+ «Corporation»), հակամարտությունները ՝ 407; vailivation - 422; լիմիտները 429 (+ «Retry-After»)։

Մի վերադարձնել 200 սխալների համար։ Պայմանական հարցումները 304-ն են '«If-None-Match»։

3. 3 Սխալ (միասնական ձևաչափ)

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

Պարտադիր են '«code», «code», «trace _ id»; Suble-ը '«Content-Language» -ի միջոցով։

3. 4 Պագինացիա/ֆիլտրեր

Cursor-based: `page_size`, `page_token`, ответ: `next_page_token`.

Ֆիլտրերը և տեսակավորումը whitelis.ru են, որոնք փաստաթղթավորված են «parameters» -ում։

3. 5 Անվտանգություն

Միատարր ֆայլային սխեմա ՝ OAuth2/OIDC scopes կամ mTSA; արգելել 'http' (միայն 'https')։

Մի վերադարձնել զգայուն վերնագրերը, նկարել դրանք օրինակներում։

3. 6 Սահմանափակումներ և չափեր

Վերնագրերի/մարմնի սահմանները ՝ 413/414/431; սահմանեք հնարավորինս ընդունելի արժեքներ։


4) Գործիքներ և էկոհամակարգ

4. 1 OpenAPI

Spectral (JSON/YAML lint), Redocly linter, oas-diff/openapi-diff (semantic diff), schemathesis/dredd (կատարված ստուգումներ)։

4. 2 Protobuf/gRPC

buf (lint + breaking dik), delolint, MSK գեներատորներ; gnostic վերլուծության համար։

4. 3 GraphQL

graphql-schema-linter, graphql-inspector (breaking).

4. 4 Կոդային ոսպնյակներ և SFC

ESLint, golangci-lint, Detekt/Ktlint, Pylint/Flake8, Semgrep (API հոտերի և դեղամիջոցների ձևանմուշներ)։


5) Կանոնների օրինակներ ՝ Spectral/Redocly

5. 1 Spectral (օրինակ 'spectral. 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 Redocly (հատված '.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) Delobuf/gRPC: buf-պրոֆիլ

6. 1 `buf. yaml`

yaml version: v2 modules:
- path: proto lint:
use:
- DEFAULT except:
- PACKAGE_VERSION_SUFFIX # используем v1 в package breaking:
use:
- WIRE_JSON deps: []

Առաջարկություններ

Մի վերարտադրեք դաշտերի համարները։ հեռավոր '«reserved» -ում։

Նոր դաշտերը '«optional» կամ դեֆոլտներով։ չփոխեք տեսակները/սեմանտիկան։


7) Սեմանտիկ դիֆը և «կոտրող» փոփոխությունները

7. 1 HTTP

Breaking-օրինակներ

դաշտային փոփոխությունը/պարտավորությունը;

հեռացում/105/105;

enum/տիրույթի նեղացումը;

ձևաչափի փոփոխությունը (uuid no string)։

Նեբրեյքինգը

էլեկտրամագնիսական դաշտերի ավելացում;

նոր արձաններ, որոնք չեն ազդում happy-path-ի վրա (օրինակ, փաստաթղթավորված '422');

ընդլայնումը enum.

7. 2 gRPC/Protobuf

Դաշտի հեռացումը առանց «reserved »/համարի փոփոխությունը breaking է։

Տիպի փոփոխությունը (int32 հազար string) - breaking։

Նոր թեգի ավելացումը որպես optional սովորաբար safe է։


8) Linting Linting-ի և կոդի կապը

Համաձայնությունը ապահովվում է երկու հոսքերով

1. Պայմանագիրը պաշտոնական կոդը 'SDK/սերվերային փակուղիների արտադրություն, թեստերի բացասական օրինակներ։

2. Կոդը կանխատեսում է պայմանագիրը 'հատուկ թեստեր, ստատուսի/վերնագրերի ավտոմատ ստուգում։

Semgrep գաղափարները

արգելքը 'return 200' irror! = nil ';

պարտադիր «Idempotency-Key» -ը վճարման կետերում;

հյուսվածքներում հյուսվածքները քողարկելը։


9) CI/CD pline (հանրաքվե)


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 պետք է ընկնի, եթե

կա breaking-diff;

խախտվել են հիմնական կանոնները (կարգավիճակներ/անվտանգություն/սխալներ);

օրինակներ/նկարագրություն չկան։


10) Կանոնների կատալոգ (ձևանմուշներ ձեր կազմակերպության համար)

Բաղադրիչները և տեսակները

`_id` — `string`, `format: uuid`.

Դրամական դաշտերը '«string '/» decimal' s scale; արժույթը RF-3517 է։

Սխալներ

Միասնական սխեմա (տե՛ ս 383։ 3), 07: 400/401/404/409/422/422/5xx "։

Միշտ 'trace _ id ";" Retry-After "429/503 համար։

Պագինացիա

Միայն cursor; max 'page _ size "փաստաթղթավորված է։

Անվտանգություն

Բոլոր վիրահատությունները '«07» բլոկը; նկարագրված է «scopes»։

Ոչ 'http:' հղումներ; TLS 1. 2+.

Քաշ/idempotention

Для GET — `ETag/Last-Modified`; write-ի համար '«Idempotency-Key» (որտեղ կիրառելի է)։

Մոսկվան

«summary», «description», հարցումների/պատասխանների օրինակներ (վալիդներ)։


11) Ավտոմատացված ստուգումների օրինակներ

11. 1 Պարտադիր անվտանգության վերնագրերի ստուգում (Spectral)

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

11. 2 openapi-diff (կեղծ CI քայլ)


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

11. 3 buf breaking-check


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

12) Որակ դիտելը

Metriks: PR մասնաբաժինը լինթինգի սխալներով, ֆիքսման ժամանակը, breaking-փորձերի քանակը, «պարտքերը» կանոններով։

Dashbords: առաջընթացը միացված սխալների սխեմայի վրա, օրինակների ծածկումը, ռուսական տարբերակները։


13) Անտիպատերնի

«Դոկ» -ը ապրում է կոորդինատիզացիայից առանձին։ Պայմանագիր պահեք ծառայության կողքին և թողեք տարբերակված արտեֆակտը։

Լինթերը միայն ձեռքով է։ Անհրաժեշտ է կոշտ PR-gate։

Պատահական օրինակները (non-deterministic) ֆլեյտներ են ստուգման մեջ։

Բացասական օրինակների և ձախողումների բացակայությունը։

Սխալների սխեմայի վերաթողարկումը յուրաքանչյուր քայլի համար։

Անտեսելով Delobuf breaking ստուգումները (փոխում են «աչքի վրա»)։


14) iGaming/ֆինանսական առանձնահատկությունները

Պարտադիր վերնագրերը «X-Tenault», «X-Region» և «traceparent» ուղին։

Դրամական դաշտերը ֆիքսված մասշտաբն են/կլորացումը; արգելք float.

Հիբրիդային write-բռնակները '«Idempotency-Key», «Retry-After» և ճիշտ 4.9/201 սեմանտիկ։

Webhuks PMS/KYC: HMAC/mTSA-ը նկարագրված է «www.Schemes» -ում։ anti-replay («X-Timestamp», պատուհան)։

Տարածաշրջանային սահմանափակումները և սխալների տեղայնացումը («Content-Language»)։


15) Չեկ-թուղթ պատրաստակամության համար

  • Spectral/Redocly պրոֆիլները կազմված և միացված են pre-commit և PR-gate-ում։
  • Սխալների և ստատուսների միասնական սխեման գրանցվում և ստուգվում է։
  • openapi-diff/GraphQL Inspector/buf - արգելափակում են breaking-փոփոխությունները։
  • Հարցումների/պատասխանների օրինակները վալիդային են. / ֆիլտրերը փաստագրված են։
  • Peter Schemes և scopes լցված են; http-հղումներ չկան։
  • Disobuf '«reserved» -ի համար հեռավոր թեստերում։ նոր դաշտերը optional են։
  • Semgrep/կոդի ոսպնյակները ներառում են. գաղտնիքները լոգարաններում։
  • CI-ն հրապարակում է արտեֆակտները և լինթինգի հաշվետվությունները։
  • Պլեյբուկ 'ինչպես վարվել breaking-2019-ում (rollback, hotfix, ծանուցում ինտեգրատորներին)։

16) TL; DR

Ներդրեք ավտոմատ ոսպնյակներ (Spectral/Redocly, buf/GraphQL Inspector) և սեմանտիկ diff, ամրագրեք սխալների/կարգավիճակների/ապահովության/, միացրեք PR-gate-ը և հրապարակումը որպես արտեֆակտներ։ Ցանկացած breaking-ազդանշան է։ Փողի/վճարման համար հատուկ կանոններ են (idempotention, «Retry-After», HMAC/mTRK)։

Contact

Կապ հաստատեք մեզ հետ

Կապ հաստատեք մեզ հետ ցանկացած հարցի կամ աջակցության համար։Մենք միշտ պատրաստ ենք օգնել։

Սկսել ինտեգրացիան

Email-ը՝ պարտադիր է։ Telegram կամ WhatsApp — ըստ ցանկության։

Ձեր անունը ըստ ցանկության
Email ըստ ցանկության
Թեմա ըստ ցանկության
Նամակի բովանդակություն ըստ ցանկության
Telegram ըստ ցանկության
@
Եթե նշեք Telegram — մենք կպատասխանենք նաև այնտեղ՝ Email-ի дополнение-ով։
WhatsApp ըստ ցանկության
Ձևաչափ՝ երկրի կոդ և համար (օրինակ՝ +374XXXXXXXXX)։

Սեղմելով կոճակը՝ դուք համաձայնում եք տվյալների մշակման հետ։