Přeskočit na obsah

Tato stránka byla automaticky přeložena z angličtiny, jediného jazyka, ve kterém se tento web píše. Číst originál.

Rozhraní se změnilo a jeho kontraktní dokument ne

Smlouva udržovaná ručně vedle kódu, který popisuje, zastará při první změně, která na ni zapomene.

→ dodal změnu rozhraní, jejíž dokument kontraktu stále popisoval staré

cena, když k tomu dojde
vysoká
jak často
běžné

Okamžik

Typ odpovědi získá pole. Implementace je správná, testy procházejí a publikovaná specifikace stále popisuje tvar z minulého měsíce — takže každý spotřebitel z ní vygenerovaný je špatně způsobem, který se projeví v cizí codebase.

Proč k tomu dochází

Specifikace je druhá, ručně udržovaná reprezentace něčeho, co kód už vyjadřuje přesně. Dvě reprezentace jednoho faktu vyžadují akt synchronizace a ten akt se provádí z paměti. Poprvé, kdy někdo spěchá, se přeskočí, a od té chvíle je dokument nedůvěryhodný, takže jej lidé přestanou číst, takže se přestane aktualizovat úplně.

Proč to lepší model nevyřeší

Pracovník, který má změnit implementaci, změní implementaci. Žádat ho, aby aktualizoval také specifikaci, znamená žádat, aby synchronizaci provedlo něco jiného, co může zapomenout; řešením je mít jednu reprezentaci.

Co to stojí

Rozbití konzumenti, jejichž rozbití zjistí konzument, ne producent. A pomalá ztráta samotného dokumentu: jakmile byla specifikace dvakrát nesprávná, bere se jako dokumentace, ne jako kontrakt.

Co Majordomus dělá

Operace se deklaruje jednou, jako typovaný deskriptor vedle své implementace, s typy vstupu a výstupu. Vše vnější se odvozuje z této deklarace: nástroj MCP, trasa HTTP, operace OpenAPI se schématy a příklady, procházitelná reference, cíl měření výkonu a generovaná dokumentace. Přidat operaci úpravou registru transportu nebo souboru specifikace není možné, protože to jsou výstupy. generate --check pojmenuje každý generovaný soubor, který se liší od toho, co deklarace vytváří, a CI strom odmítne.

Před a po

before   handler.rs (new field)  +  openapi.yaml (hand-written, unchanged)

after    $ majordomus generate --check
         stale: docs/generated/openapi.json (differs)
                [reproduce: majordomus generate]

Co nedělá

Nehodnotí návrh rozhraní a nerozhoduje, zda je změna zpětně nekompatibilní. Odstraňuje možnost, že se popis a chování udržují zvlášť.

Jak to vypadá

Konkrétní situace, jedna pro každé publikum. Každá je deklarována v záhlaví okamžiku, takže stav před a po jsou data, ne próza, od které by se stránka mohla odchýlit.

  1. Specifikace napsaná dvakrát platform-team

    před
    Do typu odpovědi se přidá pole a specifikace se neaktualizuje, takže každý generovaný klient je špatně.
    po
    Specifikace se odvozuje ze stejné typované deklarace, kterou používá implementace, a CI odmítne strom, v němž je zastaralá.
  2. Konzumenti generovaní ze zastaralého dokumentu open-source-maintainer

    před
    Navazující klienti se generují z publikovaného kontraktu, který se před dvěma release rozešel s realitou.
    po
    Publikovaný dokument je výstup buildu z deklarace; neexistuje druhé místo, od kterého by mohl driftovat.
  3. Hranice, která byla zrevidována jednou enterprise

    před
    Posuzovaný dokument rozhraní a servírované rozhraní jsou dva artefakty bez vynuceného vztahu.
    po
    Jedna deklarace, mnoho projekcí; zkontrolovaný artefakt se znovu generuje a porovnává diffem, ne důvěřuje se mu.

Jak to poznáte

Pozorovatelné příznaky, které tento okamžik deklaruje. Jsou dotazníkem na indexu a vstupem pro majordomus why diagnose; nic jiného je nedefinuje.

  • Specifikace rozhraní se udržuje ručně vedle kódu, který ji implementuje. hand-written-spec
  • Publikovaný kontrakt popisuje verzi rozhraní, která už neexistuje. spec-behind
  • Přidání operace znamená úpravu implementace i samostatného registru nebo dokumentu. two-places-to-edit

Kde to v nástroji najdete

Vše níže je načteno z vlastního záhlaví tohoto okamžiku a ověřeno proti repozitáři. Neexistující název by neprošel validací.

příkazy, které na to odpovídají

schopnosti spustitelného souboru, které na to odpovídají

tvrzení, která tuto stránku podpírají, a důkazy za každým z nich

pravidla, která jej řídí

  • project.interfaces-are-projections
  • project.rust-canonical-declaration
  • project.derived-files-regenerated
  • majordomus.projection-integrity

případy užití, které ukazují cestu ven

Pokud vám tohle zní povědomě, další také

Co tento okamžik pojmenovává, co pojmenovává jeho a co sdílí jeho oblast, publikum nebo štítky. Druhé a třetí je odvozeno; zapsáno je jen první.

Všech 38 a jak souvisejí s nástrojem →

Prohledává názvy a popisy všech stránek, které tento web publikuje.