Press "Enter" to skip to content

Hogyan hozzunk létre egy JSON fájlt C #

Kommunikáció a C # és a C # között: pihenés, GRPC és mindazok között

Sokféleképpen kommunikálhat a C # ügyfél és a C # szerver között. Néhányan megbízhatóak, mások nem. Néhány nagyon gyors, mások nem. Fontos megismerni a különböző lehetőségeket, hogy eldönthesse, mi jobb az Ön számára. Ez a cikk a legnépszerűbb technológiát fontolja meg, és miért olyan széles körben használják őket. Beszélünk a pihenésre, a GRPC-ről és mindegyikükről.

Optimális szkript

Nézzük meg, hogyan szeretnénk, ha a Client-Server kommunikációnk a valós világba nézzen. Elképzelni, hogy valami ilyesmi:

Szeretnék teljes intelligense támogatást. Amikor rákattintok szerverés .A Visual Studio-t szeretném megmutatni az összes vezérlőt. És amikor rákattintok CalculatorControllerés ., Szeretném látni az összes cselekvési módszert. Azt is szeretném a legmagasabb teljesítményt, nagyon kis terhelést a hálózat és a kétirányú adatátvitel. És kell egy megbízható rendszer, amely csehsüveg tökéletesen változatai változat, így könnyen telepíthető új verzióit ügyfelek és az új változat a szervereket.

Ez túl sok?

Ne feledje, hogy itt beszélek az API-ról Az állam tárolása nélkül. Ez megfelel a C # projektnek, ahol csak kétféle osztály van:

  • Statikus osztályok csak statikus módszerekkel.
  • POCO Osztályok, amelyekben semmi más, mint mezők és tulajdonságok, amelynek típusa primitív vagy más poco osztály.

Az API állapotának jelenléte bonyolultságot mutat be, és ez a gonosz gyökere. Tehát a cikk kedvéért készítsünk dolgokat, és ne tartsák meg az államokat.

Hagyományos pihenő megközelítés

Pihenés APImegjelent az x elején, és meghódította az internetet. Most ez a legnépszerűbb módja a webes szolgáltatások létrehozásának.

PihenésMeghatározza a rögzített műveleteket Kap, Post, Tedd és Töröl Az ügyfélnek a kiszolgálóra történő lekérdezéséhez. Minden egyes kéréshez egy válaszot tartalmazó válasz (általában JSON). A kérelmek magukban foglalják a lekérdezés paramétereit, vagy hasznos teher (általában JSON), amikor post vagy tedd kérés.

Van szabvány Nyugodt API, amely meghatározza a következő szabályokat (amit tényleg nem kell):

  • Hozzászokik az erőforrás megszerzéséhez
  • Az erőforrás állapotának megváltoztatására szolgál
  • Az erőforrás létrehozásához használt hozzászólás
  • A törlés az erőforrás törlésére szolgál

Ha eddig nem ismeri a többit, akkor a fenti magyarázat valószínűleg nem segít, így itt van egy példa. V .A NET beépített pihenésre van szüksége. Tény, hogy az alapértelmezett HAB Web API a többi webszolgáltatás. Itt van a tipikus ügyfél és a Hab szerver:

A szerveren:

Az ügyfélen:

A pihenő rohadt kényelmes, de nem felel meg az optimális forgatókönyvnek. Szóval lássuk, hogy jobban meg tudjuk csinálni.

Szerszám

Szerszám Nem a pihenés alternatívája. Ehelyett a többi tetejére épül, és lehetővé teszi számunkra, hogy a szerver végpontjait (végpontok) nevezzük, mintha egyszerű módszer lenne. Ezt úgy érjük el, hogy elválasztjuk az interfészt az ügyfél és a szerver között. A szerver oldalán a vezérlő végrehajtja az interfészt:

Ezután be kell kapcsolnia ugyanazt az interfészt az ügyfél oldalán, és használja a következő kódot:

Olyan egyszerű. Nem kell összetett automatizálást futtatni, vagy harmadik féltől származó eszközöket használni, kivéve a páros csomagokat Nuget.

Sokkal közelebb kerül az optimális forgatókönyvhez. Most van egy IntelliSense és megbízható szerződés az ügyfél és a szerver között. De van egy másik lehetőség, amely még néhány szempontból is jobb.

Henceg

Mint a REFIT, a Swagger a többi tetején is épül. Openapi, vagy Henceg , a többi API specifikáció. Leírja a Rest Web Service Simple JSON fájlokat. Ezek a fájlok egy webes szolgáltatás API-rendszer. Tartalmazzák:

  • Minden útvonal (URL) az API-ban.
  • Várható műveletek (Get, Post, …) minden útra. Minden út különböző műveleteket is képes feldolgozni. Például, ugyanúgy Hab Elfogadhatja a terméket, amely hozzáadja a terméket és a terméket, amely visszaadja a terméket.
  • Várható paraméterek minden útra és működésre.
  • Várható válaszok minden útra.
  • Az egyes paraméterek és válaszobjektum típusai.

Ez a JSON fájl lényegében az ügyfelek és a szerver közötti szerződés. Itt egy példa a Swagger fájl, amely leírja egy webes szolgáltatás az úgynevezett Swagger Petstore (az egyszerűség kedvéért azt el kell hagyni bizonyos részei):

Json Scheme

Nézzük meg ennek következményeit. A fentiekhez hasonló JSON fájlt használva potenciálisan létrehozhat egy C # ügyfélt teljes intelligense-vel. Végül tudod az összes módot, műveleteket, milyen paramétereket várnak, milyen paraméterek, mi a válaszok.

Számos olyan eszköz van, amely ezt teszi. A szerver oldalán a Habcuede add hülye-t használhatja a Hab-nak, és hozza létre a megadott JSON fájlokat. Az ügyfél oldalán a Swagger-CodeGene Autortest segítségével feldolgozhatja ezeket a fájlokat JSON formátumban és az ügyfél létrehozásához. Lássunk egy példát arra, hogyan kell csinálni:

A Hab-kiszolgálóhoz

Kezdje el a Nuget Habcore csomag hozzáadásával. V Konfigurálások, Regisztráljon Swagger Generator:

Fájlban HabA módszerben Beállítás Hozzáadás:

Végül a vezérlő belsejében lévő cselekvési módszereket (műveleteket) címkézni kell [Httpxxx]és [Frxxxx]Attribútumok:

Olyan egyszerű a szerver részre. A projekt indításakor a fájl generálódik Hab, amit használhat az ügyfél létrehozásához.

Ügyfélgyártás az autorest használatával

Az automatikus használat megkezdéséhez telepítse azt az NPM-vel: Npm telepítés -g autorest. A telepítés után az autorest parancssori felületet meg kell használnia a C # kliens létrehozásához a fájlból Hab. Itt van egy példa:

Ez létrehoz egy mappát GeneratedclientA generált fájlok c #. Ne feledje, hogy a névtér és az ügyfél neve újból meghatározva van. Adja hozzá ezt a mappát az ügyfélprojekthez a Visual Studio-ban az alábbiak szerint.

Telepítenie kell HaburtimeNuget csomag, mert a generált kód függ. A telepítés után az API-t a szokásos C # osztályként használhatja:

Vannak olyan finomságok, amelyeket olvashat a DokumentationAutorestben. És akkor kell automatizálni ezt a folyamatot, ezért javasoljuk, hogy olvassa a vezető Patrick Svensson, hogy néhány hasznos tipp, valamint ebben a cikkben a Yauzovts.

A Swaggerrel kapcsolatos problémám az, hogy a JSON fájl a végrehajtás során jön létre, így megnehezíti a CI / CD-folyamat automatizálását.

Hagyományos pihenés vs swagger vs

Íme néhány perc, hogy fontolja meg, amikor választja.

  • Ha van egy nagyon egyszerű privát API pihenése, előfordulhat, hogy nem aggódsz az ügyfelek és az általános interfészek létrehozásában. Egy kis feladat nem indokolja a további erőfeszítéseket.
  • A Swagger számos nyelvet támogat, és csak a támogatást támogatja .Háló. A Swagger számos eszköz, tesztelés, automatizálási és felhasználói felület eszközeinek alapja is. Valószínűleg a legjobb választás lesz, ha nagy nyilvános API-t hoz létre.
  • A swagger sokkal bonyolultabb, mint a finomítás. Helyesítéssel ez csak egy kérdés, hogy egy interfész hozzáadása mind a kiszolgálóhoz, mind az ügyfélprojekthez. Másrészt, a Helyesítéssel új interfészeket kell létrehoznia minden vezérlő számára, míg a swagger ezt automatikusan gondoskodik róla.

De mielőtt valamit eldöntené, ellenőrizze a 4. verziót, amely semmi köze a többihez.

GRPC

GRPC (GRPC – Távoli hívási eljárások) egy távoli nyílt forráskódú eljáráshívási rendszer, amelyet a Google fejlesztett ki. Ez egy kicsit olyan, mint a többi, abban az értelemben, hogy lehetővé teszi az ügyfél kéréseinek küldését a szerverre. De ez nagyrészt más, hasonlóság és különbségek:

  • Mint a pihenés, a GRPC nem függ a nyelvet. Vannak eszközök minden népszerű nyelven, beleértve a C # -t.
  • A GRPC szerződésen alapul és felhasználható .Proto A szerződés meghatározásához szükséges fájlok. Ez kissé hasonló a swaggerhez Hab és általános refiter felületen. Az ügyfelek bármely programozási nyelv generálhatók ezekből a fájlokból.
  • A GRPC protokoll puffer bináris serializációt (protobuf) használ. Ez különbözik a többitől, amelyet általában JSON-ban vagy XML-ben soroznak. Bináris serializáció kevesebb, és így gyorsabb.
  • A GRPC hosszú távú kapcsolatokat hoz létre a HTTP / 2 protokollon. Ez a protokoll könnyebb és kompaktabb. Figyelembe véve, hogy a többi HTTP 1 protokollt használ.X (általában http).
  • HTTP igényel TCP-nyugtázás (kézfogás) minden kérést, mivel a HTTP / 2 támogatja a kapcsolatot.
  • A http / 2 kapcsolat multiplexelt áramlást használ. Ez azt jelenti, hogy az egyik TCP-kapcsolat számos szálat támogathat. Ezeket a patakokat párhuzamosan lehet végrehajtani anélkül, hogy a HTTP-ben várnának egymást
  • A GRPC kétirányú streaminget tesz lehetővé.

A GRPC-nek két módja van. Mert .A Net Core egy teljesen kezelt könyvtár GRPC-t tartalmaz .Háló. A GRPC C # funkciót is használhatja. Ez nem jelenti azt GRPC .HálóFelvétel GRPC C #. Lássunk egy újabb példát GRPC .Háló.

Szerver rész GRPC .Háló

Ez nem útmutató, hanem általános ötlet arról, hogy mit várhat. Így néz ki a vezérlő példája a GRPC-ben:

A következőket kell hozzáadnia Beállítás fájlban Hab:

Az API-t a B. írja le .ProtoA projekt része, amely része a projektnek:

Ez .ProtoA fájl hozzáadott fájlja .Csproj:

Ügyfélrész GRPC .Háló

Az ügyfél generálódik .ProtoFájlok. Maga a kód nagyon egyszerű:

Grpc vs pihenés

A GRPC kellemes üzletnek hangzik. Gyorsabb és könnyebb a motorháztető alatt. Tehát mindannyian mindannyian a többi a GRPC-vel megyünk? A válasz az, hogy ez az attól függ. Íme néhány megfontolás:

A benyomások szerint a GRPC-vel és a Hab-val való munka még mindig kicsi. Jobb leszel a pihenésre. Ami a szerződéses kommunikációt illeti, jó, kivéve, hogy hasonló alternatívák vannak a többieknek, amit már mondtunk: a swagger és a felújítás.

A legnagyobb előny a termelékenység. A legtöbb esetben ezeknek a kritériumoknak megfelelően a GRPC sokkal gyorsabb. Különösen a nagy hasznos terhelések esetében, amelyekre a protobuf sorozata valóban fontos. Ez azt jelenti, hogy ez egy hatalmas előny a nagy terhelési szerver számára.

Az átmenet a többihez a GRPC-be a nagy HAB alkalmazásban nehéz lesz. Ha azonban mikroszervizzen alapuló architektúrája van, akkor ez az átmenet sokkal könnyebb lesz fokozatosan elvégezni.

Más kommunikációs módok

A kommunikáció számos más módja van, amelyet egyáltalán nem említettem, de érdemes tudni, hogy léteznek:

  • A Graphql egy API lekérdezési nyelv, amelyet a Facebook fejlesztett ki. Ez lehetővé teszi az ügyfél számára, hogy pontosan kérje a szerverről szükséges adatokat. Így csak egy végpontot hozhat létre a kiszolgálón, amely rendkívül rugalmas lesz, és csak az ügyfelek igényeit adja meg azokat az adatokat. A Graphql az elmúlt években nagyon népszerűvé válik.
  • Tcplient és tcplistener (in Habs) alacsony szintű TCP-kapcsolatot biztosít. Lényegében hozzon létre egy kapcsolatot és a bájt-tömböket. Ez nem ideális egy nagy alkalmazáshoz, ahol a Big API-t iránymutatásokat használhat a vezérlők és a Hab akció módszerek.
  • Az UDPClient UDP kommunikációs módszert biztosít. A TCP beállítja a kapcsolatot, majd elküldi az adatokat, míg az UDP egyszerűen elküldi az adatokat. A TCP garantálja, hogy nincsenek hibák az adatokban, de UDP – nem. Az UDP protokoll hatékonyabb a gyors adatátvitelhez, mivel nem elég ahhoz, hogy gondoskodjon arról, hogy megbízható és félreérthetetlen. Íme néhány példa: Videó streaming, élő közvetítések és hangátvitel IP (VoIP).
  • A WCF egy régi technológia, amely főként a folyamatokon alapuló szappant használ. Ez egy hatalmas keret, amelyben nem fogok bejutni, csak azt mondom, hogy elvesztette népszerűségét a többi és a json hasznos teher.

Ez minden. Remélem, hogy a cikk érdekes volt! Jó kód mindenkinek!

Comments are closed, but trackbacks and pingbacks are open.