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.