Hexarc Pact bietet eine ToolChain für die Freigabe und Konsum von Web-API für .NET/TypeScript-basierte Projekte.
Entwickeln Sie Ihr .NET -Web -API -Projekt mit PACT, um eine einzelne Wahrheitsquelle für die API -Metadaten beizubehalten, und konsumieren Sie sie über das .NET -Ökosystem (Microservices, Desktop- und Mobile -Anwendungen) oder im Web über Typscript.
| Paket | Plattform | Version | Downloads |
|---|---|---|---|
Hexarch.Pact.Protocol | .NET 7.0+ | ||
Hexarch.Pact.AspNetCore | .NET 7.0+ | ||
Hexarch.Pact.Client | .NET 7.0+ | ||
Hexarch.Pact.Tool | .NET 7.0+ | ||
@hexarc/pact-tool | Typoskript |
Das PACT -System basiert auf den .NET -CLR -Typen mit einigen maßgeschneiderten, für die beste Entwicklungserfahrung.
Was ist innerhalb des Paktsystems:
Guid und DateTime )Das PACT-API-Schema ist für eine RPC-ähnliche Semantik ausgelegt. Dabei muss eine exponierte API folgende Regeln befolgen:
ApiController und Route markiert sein.[Route("Entities")] ).HttpGet oder HttpPost ) markiert werden. Verbattribute können einen Endpunktpfad enthalten. Andere werden momentan nicht unterstützt.HttpGet -Methoden können Abfrageparameter haben, die über das Attribut FromQuery gebunden werden müssen.HttpPost -Methoden müssen nur einen Parameter haben, der die Anforderungskörper ist.Route angegeben werden. Wenn der Methodenpfad im HTTP -Verb -Attribut nicht angegeben ist, wird er aus der Route ausgenommen oder eine Ausnahme wird angehoben.PACT bietet einige nützliche Attribute für die API -Annotation:
PactIgnoreAttribute kann auf API -Controller oder -Methoden angewendet werden, die von einem API -Schema ausgeschlossen werden sollen.PactScopeAttribute kann auf API -Controller angewendet werden, um in einem API -Schema in einen spezifischen Bereich zu isolieren. Der Demo-API-Server finden Sie unter https://hexarc-demo-api.herokuapp.com/.
Das PACT-API-Schema ist unter https://hexarc-demo-api.herokuapp.com/pact/schema freigelegt.
Um einen API -Client zu generieren, verwenden Sie die folgende Anweisung.
Finden Sie heraus, wie Sie PACT verwenden, um eine typische Web -API zu enthüllen und zu konsumieren.
Hexarc.Pact.AspNetCore in einem .NET -Web -API -Projekt: dotnet add package Hexarc.Pact.AspNetCoreStartup.ConfigureServices -Methode hinzu: public void ConfigureServices ( IServiceCollection services )
{
services . AddControllers ( ) ;
// Register the Pact schema generation.
services . AddPactGeneration ( ) ;
}Startup.Configure -Methode: public void Configure ( IApplicationBuilder app )
{
// Enable the Pact middleware to expose the generated API schema.
app . UsePact ( ) ;
app . UseRouting ( ) ;
app . UseEndpoints ( endpoints => endpoints . MapControllers ( ) ) ;
} [ ApiController , Route ( "Misc" ) ]
public sealed class MiscController : ControllerBase
{
[ HttpGet ( nameof ( Ping ) ) ]
public String Ping ( [ FromQuery ] String message ) => $ "Hello, { message } " ;
}YOUR_API_HOST/pact/schema um sicherzustellen, dass das PACT -API -Schema generiert wird.Hexarc.Pact.Client in einem .NET -Projekt: dotnet add package Hexarc.Pact.ClientHexarc.Pact.Tool im Projekt: dotnet tool install Hexarc.Pact.Tool Möglicherweise müssen Sie ein .NET -Tools -Manifest einrichten, bevor Sie das Werkzeug von Hexarc.Pact.Tool installieren:
dotnet new tool-manifestpact.json -Konfiguration im Projekt mit den gewünschten API -Client -Generierungseinstellungen hinzu: {
"schemaUri" : " YOUR_API_HOST/pact/schema " ,
"clientClassName" : " DemoClient " ,
"clientClassNamespace" : " DemoNamespace " ,
"outputDirectory" : " Generated "
}Wo
schemaUri - Link zu einem Pakt -API -SchemaclientClassName - Name für eine generierte API -Client -KlasseclientClassNamespace - Namespace, in dem in die generierte API -Client -Klasse eingebracht werden solloutputDirectory - Ausgabeverzeichnis für die generierten Quellendotnet pact Dieser Befehl muss im selben Ordner mit der pact.json -Konfiguration durchgeführt werden.
var client = new DemoClient ( new HttpClient { BaseAddress = new Uri ( "YOUR_API_HOST" ) } ) ;
var pong = await client . Misc . Ping ( "World" ) ;
Console . WriteLine ( pong ) ; // Prints "Hello, World" to the output. Erstellt mit JetBrains -Tools für Open -Source -Projekte.
MIT © Max Koverdyaev